Name: series-workflown68wb Phase: Succeeded StartedAt: 2026-08-10 14:30:48 +0000 UTC FinishedAt: 2026-08-10 18:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[0] Phase: Succeeded StartedAt: 2026-08-10 14:30:48 +0000 UTC FinishedAt: 2026-08-10 14:36:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 14:30:48 +0000 UTC FinishedAt: 2026-08-10 14:36:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "SYSCTL", "UNIX", "SMC", "VSOCKETS", "XFRM_USER", "LWTUNNEL", "NF_CONNTRACK", "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "SYSCTL", "UNIX", "SMC", "VSOCKETS", "XFRM_USER", "LWTUNNEL", "NF_CONNTRACK", "IP_SCTP" ], "series_id": "3e8c1afd-2831-4c22-a956-433cd7f0f47a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "register_net_sysctl_sz", "smc_sysctl_net_init", "unix_sysctl_register" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeiYjMzQ7LAogICAgJiMzNDtzbWNfc3lzY3RsX25ldF9pbml0JiMzNDssCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHRhYmxlIHJlZ2lzdHJhdGlvbiBieSBtYWtpbmcgdGhlIHN0YXRpYyB0ZW1wbGF0ZSB0YWJsZXMgYGNvbnN0YCBhbmQgbW92aW5nIHRoZSBkdXBsaWNhdGlvbiBsb2dpYyBpbnRvIGRlZGljYXRlZCBgX2R1cGAgZnVuY3Rpb25zLiBUaGUgZHVwbGljYXRlZCB0YWJsZXMgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbWR1cCgpYCwgd2hpY2ggY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdGljIGdsb2JhbCB0ZW1wbGF0ZXMuIFNpbmNlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGluIEMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgKGluY2x1ZGluZyBhbnkgc3RydWN0IHBhZGRpbmcpLCB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRhYmxlcyBhcmUgY29tcGxldGVseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBtZW1vcnkgbGVha3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIG9uIHRoZSBhbGxvY2F0ZWQgdGFibGVzKSB3aWxsIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCByZWdpc3RyYXRpb24gZm9yIG5vbi1pbml0IG5ldHdvcmsgbmFtZXNwYWNlcywgY2hhbmdpbmcgaG93IHN5c2N0bCB0YWJsZXMgYXJlIGR1cGxpY2F0ZWQgYW5kIHZhbGlkYXRlZC4gSXQgaW50cm9kdWNlcyBhIHN0cmljdCBjaGVjayBpbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgdGhhdCByZXR1cm5zIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHBlcm1pc3Npb25zLCB3aGljaCBjYW4gY2F1c2UgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdG8gZmFpbCBpZiBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkLiBGdXp6aW5nIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDNmMjViMjUzNWY4MTY0MjNiZTg3ZmIzZTRjZjE2NGFmZGMzZGJlYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuaW5kZXggNTAxYWYxOTk5ZmU4My4uZTVlZTY3M2I5ZmNmOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5AQCAtNTI1LDEyICYjNDM7NTI1LDEzIEBAIHN0cnVjdCBjdGxfdGFibGU7XG4gI2lmZGVmIENPTkZJR19TWVNDVExcbiBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpO1xuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xuJiM0MztcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZV90IHRhYmxlX3NpemUpO1xuIHZvaWQgdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcbi1cdGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbiYjNDM7XHRjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbmluZGV4IGI1MDg2MThiZmMxMjMuLmViMzVkYTM1NTZmNGEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0bnNfY29yZV90YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3Jwc19kZWZhdWx0X21hc2tcJiMzNDssXG5AQCAtNzg3LDI2ICYjNDM7Nzg3LDM4IEBAIHN0YXRpYyBpbnQgX19pbml0IGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKGNoYXIgKnN0cilcbiB9XG4gX19zZXR1cChcJiMzNDtmYl90dW5uZWxzPVwmIzM0OywgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApO1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpuZXRuc19jb3JlX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpO1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGJsO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHR0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0YmwpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdGlmICh0YmxbaV0uZGF0YSA9PSBcdTAwMjZzeXNjdGxfd21lbV9tYXgpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHRibFtpXS5kYXRhICYjNDM7PSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG4mIzQzO1x0fVxuJiM0MztcdGZvciAoOyBpIFx1MDAzYyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdHRibFtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0Ymw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsO1xuIFxuIFx0dGJsID0gbmV0bnNfY29yZV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuLVx0XHR0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdHRibCA9IG5ldG5zX2NvcmVfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICh0YmwgPT0gTlVMTClcbiBcdFx0XHRnb3RvIGVycl9kdXA7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7XG4tXHRcdFx0aWYgKHRibFtpXS5kYXRhID09IFx1MDAyNnN5c2N0bF93bWVtX21heClcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdHRibFtpXS5kYXRhICYjNDM7PSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG4tXHRcdH1cbi1cdFx0Zm9yICg7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKVxuLVx0XHRcdHRibFtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNlY29yZS5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9jb3JlXCYjMzQ7LCB0YmwsIHRhYmxlX3NpemUpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuY1xuaW5kZXggNDdkZWQwZjYwN2Q0Yi4uYTkwYmU1N2M2M2JlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2RldmluZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZGV2aW5ldC5jXG5AQCAtMjc5Niw3ICYjNDM7Mjc5Niw3IEBAIHN0YXRpYyB2b2lkIGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IGluX2RldmljZSAqaWRldilcbiBcdG5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtXHUwMDNlYXJwX3Bhcm1zKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2lwX2ZvcndhcmRcJiMzNDssXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aXB2NF9kZXZjb25mLmRhdGFbXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuaW5kZXggY2ExMTgwZGJhMWRlYS4uMmYwMzYzYmNhMmE4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuQEAgLTYyNCw3ICYjNDM7NjI0LDcgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt0Y3BfbWF4X3R3X2J1Y2tldHNcJiMzNDssXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2NC50Y3BfZGVhdGhfcm93LnN5c2N0bF9tYXhfdHdfYnVja2V0cyxcbkBAIC0xNjU0LDM1ICYjNDM7MTY1NCw0NSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICppcHY0X25ldF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShpcHY0X25ldF90YWJsZSk7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0dGFibGUgPSBrbWVtZHVwKGlwdjRfbmV0X3RhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodGFibGVbaV0uZGF0YSkge1xuJiM0MztcdFx0XHQvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvXG4mIzQzO1x0XHRcdCAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXRcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcbiYjNDM7XHRcdFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHRhYmxlW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh0YWJsZVtpXS5leHRyYTIgXHUwMDNlPSAodm9pZCAqKVx1MDAyNmluaXRfbmV0LmlwdjQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGFibGVbaV0uZXh0cmEyIFx1MDAzYyAodm9pZCAqKShcdTAwMjZpbml0X25ldC5pcHY0ICYjNDM7IDEpKVxuJiM0MztcdFx0XHR0YWJsZVtpXS5leHRyYTIgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiBcdHRhYmxlID0gaXB2NF9uZXRfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuLVx0XHRpbnQgaTtcbi1cbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdHRhYmxlID0gaXB2NF9uZXRfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcbi1cdFx0XHRcdC8qIFVwZGF0ZSB0aGUgdmFyaWFibGVzIHRvIHBvaW50IGludG9cbi1cdFx0XHRcdCAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXRcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0dGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHQvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7XG4tXHRcdFx0XHQgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBuc1xuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR0YWJsZVtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICh0YWJsZVtpXS5leHRyYTIgXHUwMDNlPSAodm9pZCAqKVx1MDAyNmluaXRfbmV0LmlwdjQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHRhYmxlW2ldLmV4dHJhMiBcdTAwM2MgKHZvaWQgKikoXHUwMDI2aW5pdF9uZXQuaXB2NCAmIzQzOyAxKSlcbi1cdFx0XHRcdHRhYmxlW2ldLmV4dHJhMiAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHR9XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNlaXB2NC5pcHY0X2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvaXB2NFwmIzM0OywgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuaW5kZXggNThmYWYxZGRkMmIxNS4uYWI3YTAxMDI5ZDQ5MCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuQEAgLTE0MSw3ICYjNDM7MTQxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbyA9IHtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcJiMzNDt4ZnJtNF9nY190aHJlc2hcJiMzNDssXG4gXHRcdC5kYXRhICAgICAgICAgICA9IFx1MDAyNmluaXRfbmV0Lnhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2gsXG5AQCAtMTUxLDE4ICYjNDM7MTUxLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4mIzQzO1xuJiM0MztcdHRhYmxlID0ga21lbWR1cCh4ZnJtNF9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLFxuJiM0MztcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbiBcbiBcdHRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHR0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9pcHY0XCYjMzQ7LCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmNcbmluZGV4IGVmYjIzODA3YTAyNjIuLmE5NWIwMzUxODI0ZjMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pY21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2ljbXAuY1xuQEAgLTEzNzQsNyAmIzQzOzEzNzQsNyBAQCBFWFBPUlRfU1lNQk9MKGljbXB2Nl9lcnJfY29udmVydCk7XG4gc3RhdGljIHUzMiBpY21wdjZfZXJyb3JzX2V4dGVuc2lvbl9tYXNrX2FsbCA9XG4gXHRHRU5NQVNLX1U4KElDTVBfRVJSX0VYVF9DT1VOVCAtIDEsIDApO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X2ljbXBfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3JhdGVsaW1pdFwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pY21wdjZfdGltZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uYjgzM2E2NDAwYzk0NCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC02NTU1LDcgJiM0Mzs2NTU1LDcgQEAgc3RhdGljIGludCBpcHY2X3N5c2N0bF9ydGNhY2hlX2ZsdXNoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD1cdFwmIzM0O21heF9zaXplXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9XHRcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuY1xuaW5kZXggZDJjZDMzZTI2OThkNS4uMWEwYTM2ZGNkYWJjMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuY1xuQEAgLTYxLDcgJiM0Mzs2MSw3IEBAIHByb2NfcnQ2X211bHRpcGF0aF9oYXNoX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCB2b2lkICpiXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2JpbmR2Nm9ubHlcJiMzNDssXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2Ni5zeXNjdGwuYmluZHY2b25seSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5pbmRleCAzYjc0OTQ3NWY2ZWQ2Li41ZWMwNjNjYjRhYTQzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5AQCAtMTg3LDcgJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCYjMzQ7eGZybTZfZ2NfdGhyZXNoXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0Lnhmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2gsXG5AQCAtMTk3LDE4ICYjNDM7MTk3LDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNl9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTZfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4mIzQzO1xuJiM0MztcdHRhYmxlID0ga21lbWR1cCh4ZnJtNl9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNl9wb2xpY3lfdGFibGUpLFxuJiM0MztcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbiBcbiBcdHRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHR0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9pcHY2XCYjMzQ7LCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbmluZGV4IGJlMjk1M2M3ZDcwMmUuLmY0ZjJkODIxOTJkNTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuQEAgLTYzOSw3ICYjNDM7NjM5LDcgQEAgZW51bSBuZl9jdF9zeXNjdGxfaW5kZXgge1xuIFx0TkZfU1lTQ1RMX0NUX0xBU1RfU1lTQ1RMLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuIFx0W05GX1NZU0NUTF9DVF9NQVhdID0ge1xuIFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bmZfY29ubnRyYWNrX21heFwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZl9jb25udHJhY2tfbWF4LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuaW5kZXggMmQ4OTBkZDA0ZmY4OS4uNGUxZWVmMWJhMGYxNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXG5AQCAtNTQsNyAmIzQzOzU0LDcgQEAgaW50IG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTtcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtuZl9ob29rc19sd3R1bm5lbFwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBOVUxMLFxuQEAgLTY2LDggJiM0Mzs2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuIFxuIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmNcbmluZGV4IGZjYTg0MDQ4NGViZjcuLjJiOTRjMjExNDI3ZGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zeXNjdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3lzY3RsLmNcbkBAIC05Miw3ICYjNDM7OTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7XG4gI2RlZmluZSBTQ1RQX1BGX1JFVFJBTlNfSURYICAgIDJcbiAjZGVmaW5lIFNDVFBfUFNfUkVUUkFOU19JRFggICAgM1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XG4gXHRbU0NUUF9SVE9fTUlOX0lEWF0gPSB7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtydG9fbWluXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnNjdHAucnRvX21pbixcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19zeXNjdGwuYyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5pbmRleCBiMWVmZWQ1NDYyNDM1Li4wOWRhZDQ4MzM3ZjYxIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5AQCAtOTcsNyAmIzQzOzk3LDcgQEAgc3RhdGljIGludCBwcm9jX3NtY19oc19jdHJsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNtY190YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCYjMzQ7YXV0b2Nvcmtpbmdfc2l6ZVwmIzM0OyxcbiBcdFx0LmRhdGEgICAgICAgICAgID0gXHUwMDI2aW5pdF9uZXQuc21jLnN5c2N0bF9hdXRvY29ya2luZ19zaXplLFxuQEAgLTE5NSwxNCAmIzQzOzE5NSwyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIH07XG4gXG4taW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHR0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0YWJsZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBzbWNfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuLVx0XHRpbnQgaTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU01DX0hTX0NUUkxfQlBGKVxuIFx0XHRzdHJ1Y3Qgc21jX2hzX2N0cmwgKmN0cmw7XG4gXG5AQCAtMjE0LDEyICYjNDM7MjI5LDkgQEAgaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXG4gXG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0dGFibGUgPSBzbWNfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdHRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2VzbWMuc21jX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvc21jXCYjMzQ7LCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuY1xuaW5kZXggMTllODA0ODI0MWJhYy4uMDdmODQzNGQ0MjU4YyAxMDA2NDRcbi0tLSBhL25ldC9zeXNjdGxfbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zeXNjdGxfbmV0LmNcbkBAIC0xMTQsMTYgJiM0MzsxMTQsMTcgQEAgX19pbml0IGludCBuZXRfc3lzY3RsX2luaXQodm9pZClcbiBcdGdvdG8gb3V0O1xuIH1cbiBcbi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6XG4mIzQzOy8qIFJldHVybiBlcnJvciB3aGVuIHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSB1bnNhZmUgYnkgdmVyaWZ5aW5nOlxuICAqIDEpIGJlaW5nIHJlYWQtb25seSwgb3JcbiAgKiAyKSBoYXZpbmcgYSBkYXRhIHBvaW50ZXIgd2hpY2ggcG9pbnRzIG91dHNpZGUgb2YgdGhlIGdsb2JhbCBrZXJuZWwvbW9kdWxlXG4gICogICAgZGF0YSBzZWdtZW50LCBhbmQgcmF0aGVyIGludG8gdGhlIGhlYXAgd2hlcmUgYSBwZXItbmV0IG9iamVjdCB3YXNcbiAgKiAgICBhbGxvY2F0ZWQuXG4gICovXG4tc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCB0YWJsZV9zaXplKVxuIHtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKmVudDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xcblwmIzM0OywgbmV0LCBwYXRoKTtcbiBcdGVudCA9IHRhYmxlO1xuQEAgLTE0OSwyNCAmIzQzOzE1MCwyNCBAQCBzdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbiBcdFx0ZWxzZVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBJZiBpdCBpcyB3cml0YWJsZSBhbmQgcG9pbnRzIHRvIGtlcm5lbC9tb2R1bGUgZ2xvYmFsXG4tXHRcdCAqIGRhdGEsIHRoZW4gaXQmIzM5O3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLlxuLVx0XHQgKi9cbiYjNDM7XHRcdC8qIFdhcm4gb24gbmV0bnMgbGVhay4gKi9cbiBcdFx0V0FSTigxLCBcJiMzNDtzeXNjdGwgJXMvJXM6IGRhdGEgcG9pbnRzIHRvICVzIGdsb2JhbCBkYXRhOiAlcHNcXG5cJiMzNDssXG4tXHRcdCAgICAgcGF0aCwgZW50LVx1MDAzZXByb2NuYW1lLCB3aGVyZSwgZW50LVx1MDAzZWRhdGEpO1xuJiM0MztcdFx0XHRwYXRoLCBlbnQtXHUwMDNlcHJvY25hbWUsIHdoZXJlLCBlbnQtXHUwMDNlZGF0YSk7XG4gXG4tXHRcdC8qIE1ha2UgaXQgXCYjMzQ7c2FmZVwmIzM0OyBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqL1xuLVx0XHRlbnQtXHUwMDNlbW9kZSBcdTAwMjY9IH4wMjIyO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4gXHRcdFx0XHRcdFx0c2l6ZV90IHRhYmxlX3NpemUpXG4ge1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG4tXHRcdGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gX19yZWdpc3Rlcl9zeXNjdGxfdGFibGUoXHUwMDI2bmV0LVx1MDAzZXN5c2N0bHMsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggZTAyZWQ2ZTM5NTVjMC4uNDc2NjBkNTcyNmJiZCAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTEzLDcgJiM0MzsxMyw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YWZfdW5peC5oXCYjMzQ7XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDttYXhfZGdyYW1fcWxlblwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuQEAgLTIzLDE4ICYjNDM7MjMsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLWludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiYjNDM7XHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiYjNDM7XG4gXHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0gdW5peF90YWJsZTtcbiBcdH0gZWxzZSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0dGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNldW54LmN0bCA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvdW5peFwmIzM0OywgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li5jYWViZWY3M2VhNThkIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODk5LDcgJiM0MzsyODk5LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bnNfbW9kZVwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5tb2RlLFxuQEAgLTI5MjUsMjAgJiM0MzsyOTI1LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp2c29ja190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuJiM0MztcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0YWJsZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4mIzQzO1x0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuJiM0MztcdHRhYmxlWzJdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGFibGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4mIzQzO1xuIFx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuIFx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xuIFx0fSBlbHNlIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdHRhYmxlID0gdnNvY2tfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2subW9kZTtcbi1cdFx0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuLVx0XHR0YWJsZVsyXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjaztcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC92c29ja1wmIzM0OywgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbmluZGV4IGNhMDAzZThhMDM3NjAuLjM1NzE1MmE1MGZhZjEgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG5AQCAtMTMsNyAmIzQzOzEzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfaW5pdCBfX3hmcm1fc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7eGZybV9hZXZlbnRfZXRpbWVcJiMzNDssXG4gXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodTMyKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7LAogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7TFdUVU5ORUwmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6JiMzNDssCiAgICAmIzM0O3NtY19zeXNjdGxfbmV0X2luaXQmIzM0OywKICAgICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHJlZ2lzdHJhdGlvbiBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLCBjaGFuZ2luZyBob3cgc3lzY3RsIHRhYmxlcyBhcmUgZHVwbGljYXRlZCBhbmQgdmFsaWRhdGVkLiBJdCBpbnRyb2R1Y2VzIGEgc3RyaWN0IGNoZWNrIGluIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB0aGF0IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBtb2RpZnlpbmcgcGVybWlzc2lvbnMsIHdoaWNoIGNhbiBjYXVzZSBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiB0byBmYWlsIGlmIHN5c2N0bHMgYXJlIG1pc2NvbmZpZ3VyZWQuIEZ1enppbmcgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwM2YyNWIyNTM1ZjgxNjQyM2JlODdmYjNlNGNmMTY0YWZkYzNkYmViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTQ6MzM6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggNTAxYWYxOTk5ZmU4My4uZTVlZTY3M2I5ZmNmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtNTI1LDEyICYjNDM7NTI1LDEzIEBAIHN0cnVjdCBjdGxfdGFibGU7CiAjaWZkZWYgQ09ORklHX1NZU0NUTAogaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKTsKIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCwKLQkJCQkJICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpOwomIzQzOwkJCQkJCWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAomIzQzOwkJCQkJCXNpemVfdCB0YWJsZV9zaXplKTsKIHZvaWQgdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwKLQljb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpCiYjNDM7CWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggYjUwODYxOGJmYzEyMy4uZWIzNWRhMzU1NmY0YSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTY3OCw3ICYjNDM7Njc4LDcgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0bnNfY29yZV90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpCiAJewogCQkucHJvY25hbWUJPSAmIzM0O3Jwc19kZWZhdWx0X21hc2smIzM0OywKQEAgLTc4NywyNiAmIzQzOzc4NywzOCBAQCBzdGF0aWMgaW50IF9faW5pdCBmYl90dW5uZWxzX29ubHlfZm9yX2luaXRfbmV0X3N5c2N0bF9zZXR1cChjaGFyICpzdHIpCiB9CiBfX3NldHVwKCYjMzQ7ZmJfdHVubmVscz0mIzM0OywgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApOwogCi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpuZXRuc19jb3JlX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRibDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CXRibCA9IGttZW1kdXAobmV0bnNfY29yZV90YWJsZSwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YmwpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlpZiAodGJsW2ldLmRhdGEgPT0gJmFtcDtzeXNjdGxfd21lbV9tYXgpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQl0YmxbaV0uZGF0YSAmIzQzOz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CX0KJiM0MzsJZm9yICg7IGkgJmx0OyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSkKJiM0MzsJCXRibFtpXS5tb2RlICZhbXA7PSB+MDIyMjsKJiM0MzsKJiM0MzsJcmV0dXJuIHRibDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShuZXRuc19jb3JlX3RhYmxlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsOwogCiAJdGJsID0gbmV0bnNfY29yZV90YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7Ci0JCWludCBpOwotCQl0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRibCA9IG5ldG5zX2NvcmVfdGFibGVfZHVwKG5ldCk7CiAJCWlmICh0YmwgPT0gTlVMTCkKIAkJCWdvdG8gZXJyX2R1cDsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpIHsKLQkJCWlmICh0YmxbaV0uZGF0YSA9PSAmYW1wO3N5c2N0bF93bWVtX21heCkKLQkJCQlicmVhazsKLQotCQkJdGJsW2ldLmRhdGEgJiM0Mzs9IChjaGFyICopbmV0IC0gKGNoYXIgKikmYW1wO2luaXRfbmV0OwotCQl9Ci0JCWZvciAoOyBpICZsdDsgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpCi0JCQl0YmxbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CiAJfQogCiAJbmV0LSZndDtjb3JlLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvY29yZSYjMzQ7LCB0YmwsIHRhYmxlX3NpemUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDQ3ZGVkMGY2MDdkNGIuLmE5MGJlNTdjNjNiZTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTI3OTYsNyAmIzQzOzI3OTYsNyBAQCBzdGF0aWMgdm9pZCBkZXZpbmV0X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpCiAJbmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIoaWRldi0mZ3Q7YXJwX3Bhcm1zKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBjdGxfZm9yd2FyZF9lbnRyeVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtpcF9mb3J3YXJkJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aXB2NF9kZXZjb25mLmRhdGFbCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IGNhMTE4MGRiYTFkZWEuLjJmMDM2M2JjYTJhODggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC02MjQsNyAmIzQzOzYyNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDt0Y3BfbWF4X3R3X2J1Y2tldHMmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5pcHY0LnRjcF9kZWF0aF9yb3cuc3lzY3RsX21heF90d19idWNrZXRzLApAQCAtMTY1NCwzNSAmIzQzOzE2NTQsNDUgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqaXB2NF9uZXRfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKGlwdjRfbmV0X3RhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0YWJsZVtpXS5kYXRhKSB7CiYjNDM7CQkJLyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50bwomIzQzOwkJCSAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXQKJiM0MzsJCQkgKi8KJiM0MzsJCQl0YWJsZVtpXS5kYXRhICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogRW50cmllcyB3aXRob3V0IGRhdGEgcG9pbnRlciBhcmUgZ2xvYmFsOwomIzQzOwkJCSAqIE1ha2UgdGhlbSByZWFkLW9ubHkgaW4gbm9uLWluaXRfbmV0IG5zCiYjNDM7CQkJICovCiYjNDM7CQkJdGFibGVbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CiYjNDM7CQl9CiYjNDM7CQlpZiAodGFibGVbaV0uZXh0cmEyICZndDs9ICh2b2lkICopJmFtcDtpbml0X25ldC5pcHY0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0YWJsZVtpXS5leHRyYTIgJmx0OyAodm9pZCAqKSgmYW1wO2luaXRfbmV0LmlwdjQgJiM0MzsgMSkpCiYjNDM7CQkJdGFibGVbaV0uZXh0cmEyICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpOwomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAogCXRhYmxlID0gaXB2NF9uZXRfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQlpbnQgaTsKLQotCQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSBpcHY0X25ldF90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCWZvciAoaSA9IDA7IGkgJmx0OyB0YWJsZV9zaXplOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHRhYmxlW2ldLmRhdGEpIHsKLQkJCQkvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvCi0JCQkJICogdGhlIGN1cnJlbnQgc3RydWN0IG5ldAotCQkJCSAqLwotCQkJCXRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKikmYW1wO2luaXRfbmV0OwotCQkJfSBlbHNlIHsKLQkJCQkvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7Ci0JCQkJICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnMKLQkJCQkgKi8KLQkJCQl0YWJsZVtpXS5tb2RlICZhbXA7PSB+MDIyMjsKLQkJCX0KLQkJCWlmICh0YWJsZVtpXS5leHRyYTIgJmd0Oz0gKHZvaWQgKikmYW1wO2luaXRfbmV0LmlwdjQgJmFtcDsmYW1wOwotCQkJICAgIHRhYmxlW2ldLmV4dHJhMiAmbHQ7ICh2b2lkICopKCZhbXA7aW5pdF9uZXQuaXB2NCAmIzQzOyAxKSkKLQkJCQl0YWJsZVtpXS5leHRyYTIgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKikmYW1wO2luaXRfbmV0OwotCQl9CiAJfQogCiAJbmV0LSZndDtpcHY0LmlwdjRfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L2lwdjQmIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDU4ZmFmMWRkZDJiMTUuLmFiN2EwMTAyOWQ0OTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0xNDEsNyAmIzQzOzE0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHhmcm00X3BvbGljeV9hZmluZm8gPSB7CiB9OwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O3hmcm00X2djX3RocmVzaCYjMzQ7LAogCQkuZGF0YSAgICAgICAgICAgPSAmYW1wO2luaXRfbmV0Lnhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2gsCkBAIC0xNTEsMTggJiM0MzsxNTEsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHhmcm00X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm00X3BvbGljeV90YWJsZSksCiYjNDM7CQkJR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKIAogCXRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKLQkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQl0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7eGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaDsKIAl9CiAKIAloZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvaXB2NCYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCBlZmIyMzgwN2EwMjYyLi5hOTViMDM1MTgyNGYzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaWNtcC5jCkBAIC0xMzc0LDcgJiM0MzsxMzc0LDcgQEAgRVhQT1JUX1NZTUJPTChpY21wdjZfZXJyX2NvbnZlcnQpOwogc3RhdGljIHUzMiBpY21wdjZfZXJyb3JzX2V4dGVuc2lvbl9tYXNrX2FsbCA9CiAJR0VOTUFTS19VOChJQ01QX0VSUl9FWFRfQ09VTlQgLSAxLCAwKTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O3JhdGVsaW1pdCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2luaXRfbmV0LmlwdjYuc3lzY3RsLmljbXB2Nl90aW1lLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNTk2OGNlNWFkMTUwOC4uYjgzM2E2NDAwYzk0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC02NTU1LDcgJiM0Mzs2NTU1LDcgQEAgc3RhdGljIGludCBpcHY2X3N5c2N0bF9ydGNhY2hlX2ZsdXNoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3JvdXRlX3RhYmxlX3RlbXBsYXRlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0JJiMzNDttYXhfc2l6ZSYjMzQ7LAogCQkuZGF0YQkJPQkmYW1wO2luaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKaW5kZXggZDJjZDMzZTI2OThkNS4uMWEwYTM2ZGNkYWJjMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKQEAgLTYxLDcgJiM0Mzs2MSw3IEBAIHByb2NfcnQ2X211bHRpcGF0aF9oYXNoX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCB2b2lkICpiCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7YmluZHY2b25seSYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2luaXRfbmV0LmlwdjYuc3lzY3RsLmJpbmR2Nm9ubHksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDNiNzQ5NDc1ZjZlZDYuLjVlYzA2M2NiNGFhNDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0xODcsNyAmIzQzOzE4Nyw3IEBAIHN0YXRpYyB2b2lkIHhmcm02X3BvbGljeV9maW5pKHZvaWQpCiB9CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZSAgICAgICA9ICYjMzQ7eGZybTZfZ2NfdGhyZXNoJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQueGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCwKQEAgLTE5NywxOCAmIzQzOzE5NywzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnhmcm02X3BvbGljeV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwomIzQzOwomIzQzOwl0YWJsZSA9IGttZW1kdXAoeGZybTZfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwKJiM0MzsJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3hmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2g7CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyOwogCiAJdGFibGUgPSB4ZnJtNl9wb2xpY3lfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZih4ZnJtNl9wb2xpY3lfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlX2R1cChuZXQpOwogCQlpZiAoIXRhYmxlKQogCQkJZ290byBlcnJfYWxsb2M7Ci0KLQkJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoOwogCX0KIAogCWhkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC9pcHY2JiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IGJlMjk1M2M3ZDcwMmUuLmY0ZjJkODIxOTJkNTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTYzOSw3ICYjNDM7NjM5LDcgQEAgZW51bSBuZl9jdF9zeXNjdGxfaW5kZXggewogCU5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0gewogCVtORl9TWVNDVExfQ1RfTUFYXSA9IHsKIAkJLnByb2NuYW1lCT0gJiMzNDtuZl9jb25udHJhY2tfbWF4JiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7bmZfY29ubnRyYWNrX21heCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYwppbmRleCAyZDg5MGRkMDRmZjg5Li40ZTFlZWYxYmEwZjE1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jCkBAIC01NCw3ICYjNDM7NTQsNyBAQCBpbnQgbmZfaG9va3NfbHd0dW5uZWxfc3lzY3RsX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O25mX2hvb2tzX2x3dHVubmVsJiMzNDssCiAJCS5kYXRhCQk9IE5VTEwsCkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHsKIAogc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKLQlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAogCXRhYmxlID0gbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmMKaW5kZXggZmNhODQwNDg0ZWJmNy4uMmI5NGMyMTE0MjdkZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc3lzY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3lzY3RsLmMKQEAgLTkyLDcgJiM0Mzs5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfdGFibGVbXSA9IHsKICNkZWZpbmUgU0NUUF9QRl9SRVRSQU5TX0lEWCAgICAyCiAjZGVmaW5lIFNDVFBfUFNfUkVUUkFOU19JRFggICAgMwogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7CiAJW1NDVFBfUlRPX01JTl9JRFhdID0gewogCQkucHJvY25hbWUJPSAmIzM0O3J0b19taW4mIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5zY3RwLnJ0b19taW4sCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19zeXNjdGwuYyBiL25ldC9zbWMvc21jX3N5c2N0bC5jCmluZGV4IGIxZWZlZDU0NjI0MzUuLjA5ZGFkNDgzMzdmNjEgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX3N5c2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3N5c2N0bC5jCkBAIC05Nyw3ICYjNDM7OTcsNyBAQCBzdGF0aWMgaW50IHByb2Nfc21jX2hzX2N0cmwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsCiB9CiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqLwogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZSAgICAgICA9ICYjMzQ7YXV0b2Nvcmtpbmdfc2l6ZSYjMzQ7LAogCQkuZGF0YSAgICAgICAgICAgPSAmYW1wO2luaXRfbmV0LnNtYy5zeXNjdGxfYXV0b2Nvcmtpbmdfc2l6ZSwKQEAgLTE5NSwxNCAmIzQzOzE5NSwyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHsKICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovCiB9OwogCi1pbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqc21jX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHNtY190YWJsZSk7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwl0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KQomIzQzOwkJdGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKIAl0YWJsZSA9IHNtY190YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7Ci0JCWludCBpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX1NNQ19IU19DVFJMX0JQRikKIAkJc3RydWN0IHNtY19oc19jdHJsICpjdHJsOwogCkBAIC0yMTQsMTIgJiM0MzsyMjksOSBAQCBpbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqLwogCi0JCXRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSBzbWNfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspCi0JCQl0YWJsZVtpXS5kYXRhICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKIAl9CiAKIAluZXQtJmd0O3NtYy5zbWNfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L3NtYyYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC9zeXNjdGxfbmV0LmMgYi9uZXQvc3lzY3RsX25ldC5jCmluZGV4IDE5ZTgwNDgyNDFiYWMuLjA3Zjg0MzRkNDI1OGMgMTAwNjQ0Ci0tLSBhL25ldC9zeXNjdGxfbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N5c2N0bF9uZXQuYwpAQCAtMTE0LDE2ICYjNDM7MTE0LDE3IEBAIF9faW5pdCBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpCiAJZ290byBvdXQ7CiB9CiAKLS8qIFZlcmlmeSB0aGF0IHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSBzYWZlIGJ5IGVpdGhlcjoKJiM0MzsvKiBSZXR1cm4gZXJyb3Igd2hlbiBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgdW5zYWZlIGJ5IHZlcmlmeWluZzoKICAqIDEpIGJlaW5nIHJlYWQtb25seSwgb3IKICAqIDIpIGhhdmluZyBhIGRhdGEgcG9pbnRlciB3aGljaCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZ2xvYmFsIGtlcm5lbC9tb2R1bGUKICAqICAgIGRhdGEgc2VnbWVudCwgYW5kIHJhdGhlciBpbnRvIHRoZSBoZWFwIHdoZXJlIGEgcGVyLW5ldCBvYmplY3Qgd2FzCiAgKiAgICBhbGxvY2F0ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLAotCQkJCSAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSkKJiM0MztzdGF0aWMgaW50IGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAomIzQzOwkJCQkgIHNpemVfdCB0YWJsZV9zaXplKQogewotCXN0cnVjdCBjdGxfdGFibGUgKmVudDsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqZW50OwogCiAJcHJfZGVidWcoJiMzNDtSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xuJiMzNDssIG5ldCwgcGF0aCk7CiAJZW50ID0gdGFibGU7CkBAIC0xNDksMjQgJiM0MzsxNTAsMjQgQEAgc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsCiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCi0JCS8qIElmIGl0IGlzIHdyaXRhYmxlIGFuZCBwb2ludHMgdG8ga2VybmVsL21vZHVsZSBnbG9iYWwKLQkJICogZGF0YSwgdGhlbiBpdCYjMzk7cyBwcm9iYWJseSBhIG5ldG5zIGxlYWsuCi0JCSAqLwomIzQzOwkJLyogV2FybiBvbiBuZXRucyBsZWFrLiAqLwogCQlXQVJOKDEsICYjMzQ7c3lzY3RsICVzLyVzOiBkYXRhIHBvaW50cyB0byAlcyBnbG9iYWwgZGF0YTogJXBzXG4mIzM0OywKLQkJICAgICBwYXRoLCBlbnQtJmd0O3Byb2NuYW1lLCB3aGVyZSwgZW50LSZndDtkYXRhKTsKJiM0MzsJCQlwYXRoLCBlbnQtJmd0O3Byb2NuYW1lLCB3aGVyZSwgZW50LSZndDtkYXRhKTsKIAotCQkvKiBNYWtlIGl0ICYjMzQ7c2FmZSYjMzQ7IGJ5IGRyb3BwaW5nIHdyaXRhYmxlIHBlcm1zICovCi0JCWVudC0mZ3Q7bW9kZSAmYW1wOz0gfjAyMjI7CiYjNDM7CQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQljb25zdCBjaGFyICpwYXRoLAotCQkJCQkJc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiYjNDM7CQkJCQkJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCQkJCQlzaXplX3QgdGFibGVfc2l6ZSkKIHsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKQotCQllbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpOwomIzQzOwkJaWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gX19yZWdpc3Rlcl9zeXNjdGxfdGFibGUoJmFtcDtuZXQtJmd0O3N5c2N0bHMsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTsKIH0KZGlmZiAtLWdpdCBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKaW5kZXggZTAyZWQ2ZTM5NTVjMC4uNDc2NjBkNTcyNmJiZCAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKQEAgLTEzLDcgJiM0MzsxMyw3IEBACiAKICNpbmNsdWRlICYjMzQ7YWZfdW5peC5oJiMzNDsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7bWF4X2RncmFtX3FsZW4mIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLApAQCAtMjMsMTggJiM0MzsyMywyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLWludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCiYjNDM7CXRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRhYmxlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIHRhYmxlOwomIzQzO30KJiM0MzsKJiM0MztpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKIAlpZiAobmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKIAkJdGFibGUgPSB1bml4X3RhYmxlOwogCX0gZWxzZSB7Ci0JCXRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpOwogCQlpZiAoIXRhYmxlKQogCQkJZ290byBlcnJfYWxsb2M7Ci0KLQkJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuOwogCX0KIAogCW5ldC0mZ3Q7dW54LmN0bCA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC91bml4JiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLmNhZWJlZjczZWE1OGQgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTI4OTksNyAmIzQzOzI4OTksNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O25zX21vZGUmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC52c29jay5tb2RlLApAQCAtMjkyNSwyMCAmIzQzOzI5MjUsMzEgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnZzb2NrX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLm1vZGU7CiYjNDM7CXRhYmxlWzFdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2suY2hpbGRfbnNfbW9kZTsKJiM0MzsJdGFibGVbMl0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5nMmhfZmFsbGJhY2s7CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKIAlpZiAobmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKIAkJdGFibGUgPSB2c29ja190YWJsZTsKIAl9IGVsc2UgewotCQl0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSB2c29ja190YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2subW9kZTsKLQkJdGFibGVbMV0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5jaGlsZF9uc19tb2RlOwotCQl0YWJsZVsyXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLmcyaF9mYWxsYmFjazsKIAl9CiAKIAluZXQtJmd0O3Zzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvdnNvY2smIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jIGIvbmV0L3hmcm0veGZybV9zeXNjdGwuYwppbmRleCBjYTAwM2U4YTAzNzYwLi4zNTcxNTJhNTBmYWYxIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmMKQEAgLTEzLDcgJiM0MzsxMyw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2luaXQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIH0KIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O3hmcm1fYWV2ZW50X2V0aW1lJiMzNDssCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHUzMiksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBTeXNjdGwgUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgcmV3b3JraW5nIGhvdyBuZXR3b3JrIHN5c2N0bHMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBzZWVtcyBwcmV0dHkgc2lnbmlmaWNhbnQuIFRoZXkmIzM5O3JlIGNoYW5naW5nIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byB1c2UgYSBgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqYCwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHNhZmV0eSwgYW5kIHRoZXkmIzM5O3ZlIGFsdGVyZWQgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygc2lsZW50bHkgZHJvcHBpbmcgd3JpdGUgcGVybWlzc2lvbnMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBwb3RlbnRpYWwgcG9pbnQgZm9yIGJyZWFrYWdlLgoKVGhlIGJpZyBwaWN0dXJlIGlzIHRoYXQgdGhleSYjMzk7dmUgcmVmYWN0b3JlZCBob3cgc3lzY3RsIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGFuZCBtb2RpZmllZCBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLiBUaGV5JiMzOTt2ZSBtb3ZlZCB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYCpfZHVwYCBmdW5jdGlvbnMgKGUuZy4sIGBuZXRuc19jb3JlX3RhYmxlX2R1cGAsIGBpcHY0X25ldF90YWJsZV9kdXBgKSB3aGljaCBpbXByb3ZlcyByZWFkYWJpbGl0eS4gVGhpcyBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQgY2hhbmdlcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgd2hpY2ggaXMgY3JpdGljYWwuCgpUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgcHJldHR5IGNsZWFyOiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgbm93IHJldHVybnMgYW4gYC1FQUNDRVNgIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHRoZSB0YWJsZSwgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB3aWxsIGZhaWwgaWYgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIGRvZXMuIFRoYXQsIGNvdXBsZWQgd2l0aCB0aGUgY2hhbmdlIGluIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBhbGxvY2F0ZWQvaW5pdGlhbGl6ZWQgaW4gbmV3IG5ldG5zLCBtZWFucyB0aGVyZSYjMzk7cyBhIGRlZmluaXRlIHN1cmZhY2UgYXJlYSBmb3IgcmVncmVzc2lvbnMuCgpUaGlzIHNjcmVhbXMgJiMzNDtmdXp6aW5nIHRhcmdldC4mIzM0OyBUaGUgY2hhbmdlcyBhZmZlY3QgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24sIHdoaWNoIGFyZSBib3RoIGNydWNpYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGJlc3QgY2FuZGlkYXRlcyBmb3IgdGFyZ2V0aW5nLiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgaXMgcHJvYmFibHkgdGhlIG1haW4gb25lLCBhbHRob3VnaCBpdCBtaWdodCBiZSBjYWxsZWQgdG9vIG9mdGVuLiBUaGUgYCpfZHVwYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBzbyBJIGNhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgdGhlbS4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCwgd2hpY2ggYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcmUgdGhlIGAqX25ldF9pbml0YCBmdW5jdGlvbnMuIFRob3NlIGdldCBjYWxsZWQgd2hlbiBhIG5ldyBuZXR3b3JrIG5hbWVzcGFjZSBpcyBjcmVhdGVkLiBGdW5jdGlvbnMgbGlrZSBgc3lzY3RsX2NvcmVfbmV0X2luaXRgLCBgaXB2NF9zeXNjdGxfaW5pdF9uZXRgLCBgeGZybTRfbmV0X3N5c2N0bF9pbml0YCwgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAsIGBuZl9sd3R1bm5lbF9uZXRfaW5pdGAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYW5kIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIHN0YW5kIG91dC4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgb2Z0ZW4gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIGNhbGxlZCDigJMgbGlrZWx5IGR1cmluZyBuZXRucyBjcmVhdGlvbi4gU28sIGZ1enppbmcgdGhlIG5ldG5zIGNyZWF0aW9uIHBhdGggaXMgdGhlIHdheSB0byBnbyBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZXkmIzM5O3ZlIGNoYW5nZWQgYWxsIHRoZXNlIGAqX25ldF9pbml0YCBmdW5jdGlvbnM6IGBzeXNjdGxfY29yZV9uZXRfaW5pdGAsIGBpcHY0X3N5c2N0bF9pbml0X25ldGAsIGB4ZnJtNF9uZXRfc3lzY3RsX2luaXRgLCBgeGZybTZfbmV0X3N5c2N0bF9pbml0YCwgYG5mX2x3dHVubmVsX25ldF9pbml0YCwgYHNtY19zeXNjdGxfbmV0X2luaXRgLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAuIE9rYXksIGFuZCBhbHNvIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCAod2hpY2ggSSBjYW4mIzM5O3QgY2FsbCBkaXJlY3RseSkgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQuIFNvIHRoZSBtYWluIG9uZXMgdG8gbG9vayBhdCBhcmUgYCpfbmV0X2luaXRgLgoKTGV0IG1lIHNlZS4uLiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgKmlzKiBleHBvcnRlZCBmcm9tIGBuZXQvc3lzY3RsX25ldC5jYC4gSSBuZWVkIHRvIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4gT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYG5ldC9zeXNjdGxfbmV0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3lzY3RsX25ldC5jPTE2Mz1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3N5c2N0bF9uZXQuYy0xNzMtfVxubmV0L3N5c2N0bF9uZXQuYzoxNzQ6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfbmV0X3N5c2N0bF9zeik7XG5uZXQvc3lzY3RsX25ldC5jLTE3NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgYW5kIFJlbGF0ZWQgS2VybmVsIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCAqaXMqIGV4cG9ydGVkIOKAkyBnb29kLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEkgbmVlZCBgQ09ORklHX1NZU0NUTGAsIGBDT05GSUdfTkVUYCwgYW5kIGBDT05GSUdfTkVUX05TYC4gQW5kLCBkZXBlbmRpbmcgb24gdGhlIHN1YnN5c3RlbXMsIGBDT05GSUdfU01DYCwgYENPTkZJR19YRlJNYCwgYENPTkZJR19VTklYYCwgYENPTkZJR19WU09DS0VUU2AsIGFuZCBgQ09ORklHX0xXVFVOTkVMYCBhbHNvIGNvbWUgaW50byBwbGF5LgoKTGV0IG1lIGp1c3QgbGlzdCB0aG9zZSBvdXQgdG8gaGF2ZSB0aGVtIGNsZWFybHk6CiogICBgTkVUX05TYAoqICAgYFNZU0NUTGAKKiAgIGBTTUNgCiogICBgWEZSTWAKKiAgIGBWU09DS0VUU2AKCk5vdywgaXMgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXM/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgY2FsbGVkIHdoZW5ldmVyIGEgbmV0d29yayBuYW1lc3BhY2UgaXMgY3JlYXRlZCwgYW5kIGl0IGFwcGVhcnMgdG8gYmUgY2VudHJhbCB0byByZWdpc3RlcmluZyBzeXNjdGwgZW50cmllcyBmb3IgZWFjaCBuZXR3b3JrIHN1YnN5c3RlbS4gRXhjZWxsZW50IGZvY3VzLgoKQmVzaWRlcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGxldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGltcG9ydGFudCwgYW5kIHRoZXNlIG90aGVyIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VmdWwgaW4gdGhlIG5leHQgcm91bmQ6IGBzeXNjdGxfY29yZV9uZXRfaW5pdGAsIGBpcHY0X3N5c2N0bF9pbml0X25ldGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHNtY19zeXNjdGxfbmV0X2luaXRgLgoKTmV4dCwgSSBzaG91bGQgY2hlY2sgYG5ldC9zeXNjdGxfbmV0LmNgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCwgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBzYWZlIHN5c2N0bCBzeXN0ZW0gaXMgZW5zdXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnN1cmVfc2FmZV9uZXRfc3lzY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zeXNjdGxfbmV0LmM9OTU9X19pbml0IGludCBuZXRfc3lzY3RsX2luaXQodm9pZClcbi0tXG5uZXQvc3lzY3RsX25ldC5jLTEyMi0gKi9cbm5ldC9zeXNjdGxfbmV0LmM6MTIzOnN0YXRpYyBpbnQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG5uZXQvc3lzY3RsX25ldC5jLTEyNC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4tLVxubmV0L3N5c2N0bF9uZXQuYz0xNjM9c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zeXNjdGxfbmV0LmMtMTY4LVx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG5uZXQvc3lzY3RsX25ldC5jOjE2OTpcdFx0aWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpXG5uZXQvc3lzY3RsX25ldC5jLTE3MC1cdFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE5ldG5zIENyZWF0aW9uIEZhaWx1cmVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2F1c2luZyBtZSB0byByZS1ldmFsdWF0ZSBob3cgd2UgaGFuZGxlIG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCDigJMgaXQmIzM5O3Mgbm93IHJldHVybmluZyBhbiBlcnJvciwgd2hpY2gsIGluIHR1cm4sIGNhdXNlcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgdG8gcmV0dXJuIE5VTEwuIFRoYXQmIzM5O3MgYSBkaXJlY3QgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXRucyBjcmVhdGlvbiBhcmUgY29uY2VybmluZy4gSXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmVzIGlmIGFueSBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkIG9yIHZpb2xhdGUgb3VyIHNhZmV0eSBydWxlcywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBzeXNjdGwgdGFibGUgZHVwbGljYXRpb24uCgpNeSBmb2N1cyBpcyBzaGlmdGluZyB0byBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCwgb2J2aW91c2x5LCBidXQgYWxzbyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3lzY3RsIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBpbmNsdWRpbmcgYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHhmcm00X25ldF9zeXNjdGxfaW5pdGAsIGB4ZnJtNl9uZXRfc3lzY3RsX2luaXRgLCBgbmZfbHd0dW5uZWxfbmV0X2luaXRgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyYC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGhvb2tzIGludG8gdGhlIG5ldCBuYW1lc3BhY2UmIzM5O3Mgc3lzY3RsIHNldHVwLgoKVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGlzIHdoZXRoZXIgYHN5c2N0bF9jb3JlX25ldF9pbml0YCBpcyBzdGF0aWMgb3IgZ2xvYmFsLCBzbyBJIGNhbiBlc3RhYmxpc2ggaG93IGZhciByZWFjaGluZyBpdHMgYWZmZWN0cy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBtaWdodCBsZWFkIHRvIGFuIGVhcmx5IGV4aXQgZHVyaW5nIG5ldG5zIGNyZWF0aW9uIGR1ZSB0byBhIE5VTEwgcmV0dXJuIGZyb20gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJJiMzOTttIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBzdGFjaywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGVycm9yIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2N0bF9jb3JlX25ldF9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTY4MT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNzM5LVx0fSxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjc0MDpcdC8qIHN5c2N0bF9jb3JlX25ldF9pbml0KCkgd2lsbCBzZXQgdGhlIHZhbHVlcyBhZnRlciB0aGlzXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy03NDEtXHQgKiB0byByZWFkb25seSBpbiBuZXR3b3JrIG5hbWVzcGFjZXNcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz03OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy04MTEtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo4MTI6c3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTgxMy17XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9ODUwPXN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgc3lzY3RsX2NvcmVfb3BzID0ge1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODUxOlx0LmluaXQgPSBzeXNjdGxfY29yZV9uZXRfaW5pdCxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTg1Mi1cdC5leGl0ID0gc3lzY3RsX2NvcmVfbmV0X2V4aXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipTdGF0aWMgRnVuY3Rpb25zIGluIEZvY3VzU3ltYm9sczogQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBUaGUgZ29hbCBpcyB0byBrZWVwIGl0IGNsZWFuLCBmb2N1c2VkLCBhbmQgaWRlYWxseSwgYXZvaWQgaW5jbHVkaW5nIHN0YXRpYyBmdW5jdGlvbnMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlbiYjMzk7dCBleHRlcm5hbGx5IHZpc2libGUsIHNvIGluY2x1ZGluZyB0aGVtIGRvZXNuJiMzOTt0IHJlYWxseSBzZXJ2ZSBhIHB1cnBvc2UgaW4gYSBzeW1ib2wgdGFibGUsIGFuZCBjb3VsZCBsZWFkIHRvIHVubmVjZXNzYXJ5IGJsb2F0LgoKQnV0IHRoZW4gSSBzZWUgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJdCYjMzk7cyBleHBvcnRlZCwgd2hpY2ggdGhyb3dzIGEgd3JlbmNoIGluIHRoaXMgJiMzNDtubyBzdGF0aWNzJiMzNDsgYXBwcm9hY2guIEl0JiMzOTtzICpzdXBwb3NlZCogdG8gYmUgaW4gdGhpcyB0aGluZywgYmVjYXVzZSBpdCYjMzk7cyBub24tc3RhdGljIGFuZCB2aXNpYmxlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLgoKTm93LCB3aGF0IGFib3V0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmA/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGl0cyBhdHRyaWJ1dGVzLiBJcyB0aGF0IHN0YXRpYywgdG9vPyBJZiBzbywgd2UmIzM5O3JlIGNvbnNpc3RlbnQ7IGlmIG5vdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBwb2ludCB0byBjb25zaWRlciBpbiBtYWtpbmcgYSBjaGFuZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBpbiBlYWNoIGNhdGVnb3J5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTM4MDY9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODEwLVx0bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4gPSAxMDtcbm5ldC91bml4L2FmX3VuaXguYzozODExOlx0aWYgKHVuaXhfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXG5uZXQvdW5peC9hZl91bml4LmMtMzgxMi1cdFx0Z290byBvdXQ7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5oPTM3PWxvbmcgdW5peF9vdXRxX2xlbihzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbm5ldC91bml4L2FmX3VuaXguaC00MC0jaWZkZWYgQ09ORklHX1NZU0NUTFxubmV0L3VuaXgvYWZfdW5peC5oOjQxOmludCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3VuaXgvYWZfdW5peC5oLTQyLXZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3VuaXgvYWZfdW5peC5oLTQzLSNlbHNlXG5uZXQvdW5peC9hZl91bml4Lmg6NDQ6c3RhdGljIGlubGluZSBpbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3VuaXgvYWZfdW5peC5oLTQ1LXtcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0yNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTM4LVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6Mzk6aW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFN5c2N0bCBSZWdpc3RyYXRpb24qKgoKSG1tLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGlzbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IHByb21wdHMgYSBxdWVzdGlvbi4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBhbmFsb2dvdXMgaW4gdGhlIGB2c29ja2Agc3Vic3lzdGVtLiBXaGF0JiMzOTtzIHRoZSBzY29wZSBvZiB0aGUgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24/IElzIGl0IGFsc28gbm9uLXN0YXRpYywgb3IgaXMgaXQgaGFuZGxlZCBkaWZmZXJlbnRseT8gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHN5c2N0bCBpbnRlcmZhY2VzIGFyZSBleHBvc2VkIGFuZCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlZmFjdG9yaW5nIG9yIG1vZHVsYXJpdHkgY29uY2VybnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBpcyBjb25zaXN0ZW50IGFjcm9zcyB0aGVzZSByZWxhdGVkIGFyZWFzLiBMZXQgbWUgbG9vayBpbnRvIHRoYXQgaW1tZWRpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX3N5c2N0bF9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdnNvY2tfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk0Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTQzOnN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NDQte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTkxPXN0YXRpYyBfX25ldF9pbml0IGludCB2c29ja19zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTk0LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5OTU6XHRpZiAodnNvY2tfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk5Ni1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFN0YXRpYyBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlIG9yIGRhdGEgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsbHkgKnN0YXRpYyouIFRoZXJlJiMzOTtzIGEgY2VydGFpbiBpbW1vYmlsaXR5IG9yIGZpeGVkIG5hdHVyZSB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IHN0cmlraW5nLiBUaGF0IGluaXRpYWwgYXNzZXNzbWVudCBoZWxwcyBtZSBmb2N1cy4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGNoYXJ0aW5nIG91dCB3aGVyZSB0byBsb29rIGZvciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyAmIzM0O3N0YXRpYyYjMzQ7IGNoYXJhY3RlcmlzdGljLiBXaGF0IGxpbWl0YXRpb25zIGRvZXMgaXQgaW1wb3NlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBvciBkeW5hbWljIGNvbmZpZ3VyYXRpb24/IElzIGl0IHRydWx5IHN0YXRpYyBhY3Jvc3MgaXRzIGxpZmVjeWNsZSwgb3IgZG9lcyBpdCB1bmRlcmdvIHNvbWUgaW5pdGlhbGl6YXRpb24gdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdmFyaWFiaWxpdHk/CgpOb3csIHRoZSBtZW50aW9uIG9mIGBzbWNfc3lzY3RsX25ldF9pbml0YC4uLiBteSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3N5c2N0bF9uZXRfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTM0MTE9c3RhdGljIF9fbmV0X2luaXQgaW50IHNtY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zNDE0LVxubmV0L3NtYy9hZl9zbWMuYzozNDE1Olx0cmMgPSBzbWNfc3lzY3RsX25ldF9pbml0KG5ldCk7XG5uZXQvc21jL2FmX3NtYy5jLTM0MTYtXHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuYy0yMTMtXG5uZXQvc21jL3NtY19zeXNjdGwuYzoyMTQ6aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc21jL3NtY19zeXNjdGwuYy0yMTUte1xuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5oLTE3LVxubmV0L3NtYy9zbWNfc3lzY3RsLmg6MTg6aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmgtMTktdm9pZCBfX25ldF9leGl0IHNtY19zeXNjdGxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KTtcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuaC0yMi1cbm5ldC9zbWMvc21jX3N5c2N0bC5oOjIzOnN0YXRpYyBpbmxpbmUgaW50IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3NtYy9zbWNfc3lzY3RsLmgtMjQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA3MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTm9uLVN0YXRpYyBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBkeW5hbWljLCBzb21ldGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2luZyB1bmRlcmZvb3QsIGFuZCB0aGF0IGhhcyBhbGwgc29ydHMgb2YgaW1wbGljYXRpb25zIGZvciB0aHJlYWQgc2FmZXR5LCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgb3ZlcmFsbCBwcmVkaWN0YWJpbGl0eS4gR290dGEga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLiBNeSBjb25jZXJuIGlzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBub3QgZml4ZWQsIHRoYXQgdGhlcmUgaXMgY29uc3RhbnQgY2hhbmdlIHdpdGhpbiB0aGUgc3RydWN0dXJlLgoKVGhlbiwgdGhlIG1pbmQganVtcHMgdG8gYSBzcGVjaWZpYyBwb2ludDogV2hhdCBhYm91dCBgbmZfbHd0dW5uZWxfbmV0X2luaXRgPyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIGFyZWEsIGFuZCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGNvbnNpZGVyIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhhdCBmdW5jdGlvbi4gV2hhdCBpcyBpdCByZXNwb25zaWJsZSBmb3I/IERvZXMgaXQgaG9sZCB0aGUga2V5IHRvIHRoZSBkeW5hbWljIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nPyBJcyB0aGVyZSBzb21lIGluaXRpYWxpemF0aW9uIHdvcmsgYmVpbmcgZG9uZSB0aGVyZSB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGlzPyBJdCYjMzk7cyB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCB0byBleGFtaW5lIGZyb20gaGVyZS4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIHNvIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbm9uLXN0YXRpYyBzdHJ1Y3R1cmUsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfbHd0dW5uZWxfbmV0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jPTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYy02Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYzo2NzpzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jLTY4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgbmZfbHd0dW5uZWxfbmV0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYzoxMDc6XHQuaW5pdCA9IG5mX2x3dHVubmVsX25ldF9pbml0LFxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jLTEwOC1cdC5leGl0ID0gbmZfbHd0dW5uZWxfbmV0X2V4aXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjMyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBhIEtleSBRdWVzdGlvbioqCgpSaWdodCwgdGhpcyBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGJlZ3MgdGhlIHF1ZXN0aW9uOiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZSBgeGZybTRfbmV0X3N5c2N0bF9pbml0YD8gSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgYXJlYSBvZiBpbnRlcmVzdCBoZXJlLCBhbmQgdGhhdCBwYXJ0aWN1bGFyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFsd2F5cyBqdW1wcyBvdXQgYXQgbWUgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3Qgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gU3RhdGljIGFueXRoaW5nIGNvdWxkIGJlIGEgY29uZmlnIG9wdGlvbiwgb3IgbWF5YmUgc29tZXRoaW5nIHN0YXRpY2FsbHkgYm91bmQgYXQgYnVpbGR0aW1lIGFuZCBJJiMzOTttIHRyeWluZyB0byBhc2NlcnRhaW4gd2hhdCB0aGF0ICYjMzQ7c3RhdGljbmVzcyYjMzQ7IGFjdHVhbGx5IGltcGxpZXMuIFRoZSByZWxhdGlvbnNoaXAgdG8gYHhmcm00X25ldF9zeXNjdGxfaW5pdGAgaXMgbXkgcHJpbWFyeSB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9uZXRfc3lzY3RsX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQveGZybTRfcG9saWN5LmM9MTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0xNjctXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzoxNjg6c3RhdGljIF9fbmV0X2luaXQgaW50IHhmcm00X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0xNjkte1xuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTE5NT1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHhmcm00X25ldF9zeXNjdGxfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMjA3LSNlbHNlIC8qIENPTkZJR19TWVNDVEwgKi9cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jOjIwODpzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMjA5LXtcbi0tXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYz0yMTg9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm00X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0yMjctXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzoyMjg6XHRyZXQgPSB4ZnJtNF9uZXRfc3lzY3RsX2luaXQobmV0KTtcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTIyOS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBc3Nlc3NtZW50IG9mIGEgU3RhdGljIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgc2l0dWF0aW9uIGlzIGVzc2VudGlhbGx5IHN0YXRpYy4gTm90aGluZyBkeW5hbWljLiBJdCYjMzk7cyBhIHNuYXBzaG90LCBhIGZpeGVkIHN0YXRlLiBUaGVuLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3Q6IGBpcHY0X3N5c2N0bF9pbml0X25ldGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZnVuY3Rpb24gd2l0aGluIHRoaXMgY29udGV4dC4gQ291bGQgdGhlIGN1cnJlbnQgc3RhdGUgcmVsYXRlIHRvIG9yIGJlIGluZmx1ZW5jZWQgYnkgaG93IHRoZSBJUHY0IHN5c2N0bCBzZXR0aW5ncyBhcmUgaW5pdGlhbGl6ZWQgYXQgdGhlIG5ldHdvcmsgbGV2ZWw/IEkmIzM5O20gY3VyaW91cyBpZiB0aGlzIHN0YXRpYyBjaGFyYWN0ZXJpc3RpYyBpcyBhIGRpcmVjdCByZXN1bHQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMsIGEgc3RhdGljIGRlZmF1bHQgY29uZmlndXJhdGlvbiBiZWluZyBwcmVzZXJ2ZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBvbiB0aGF0IGZyb250LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY0X3N5c2N0bF9pbml0X25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0xNjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICppcHY0X25ldF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTE2ODUtXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxNjg2OnN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNjg3LXtcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0xNzMwPXN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2NF9zeXNjdGxfb3BzID0ge1xubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTczMTpcdC5pbml0ID0gaXB2NF9zeXNjdGxfaW5pdF9uZXQsXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNzMyLVx0LmV4aXQgPSBpcHY0X3N5c2N0bF9leGl0X25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NzgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgU3lzY3RsIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RhdGljIG92ZXJhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZG9pbmcgc29tZXRoaW5nIGR5bmFtaWMuIEZyb20gdGhlIGluaXRpYWwgc2NhbiwgaXQgbG9va3MgbGlrZSBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgc21jX3N5c2N0bF9uZXRfaW5pdGAgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uIHNpbmNlIHRoZXkmIzM5O3JlIHRoZSBub24tc3RhdGljIG9uZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCwgb3IgcGVyaGFwcyBldmVuIG5vbi1zdGF0aWMsIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gYGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXJgLCBgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXBgLCBhbmQgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAgYXJlIGFsbCBzdGF0aWMsIHNvIHRoZXkgYXJlIG5vdCBhcyBjcml0aWNhbCBpbiB0aGlzIGNvbnRleHQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGluIGBuZXQvc3lzY3RsX25ldC5jYC4gWWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB3aGljaCBtYWtlcyBpdCBhIGxpa2VseSBrZXkgcG9pbnQgb2YgZW50cnkuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIGluIGBuZXQvc3lzY3RsX25ldC5jYCBpcyBpbnZvbHZlZCBoZXJlLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIFJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgYnkgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLgoKU28sIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBzZWVtcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZS4gSWYgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMsIHRoZW4gbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgdGhlIHdheSB0byBkbyBpdCwgYmVjYXVzZSB0aGlzIGNvZGUgaXMgY2FsbGVkIGR1cmluZyB0aGF0IHByb2Nlc3MuIFNvLCBjb21tYW5kcyBsaWtlIGB1bnNoYXJlKENMT05FX05FV05FVClgIHdvdWxkIGJlIGlkZWFsIGZvciB0cmlnZ2VyaW5nIHRoaXMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBjb25maWdzIG5lZWQgdG8gYmUgZW5hYmxlZDogYE5FVF9OU2AsIGBTWVNDVExgLCBgVU5JWGAsIGFuZCBgU01DYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgTkVUX05TYCBpcyBhIHZhbGlkIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9OUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTQ1MT1jb25maWcgUElEX05TXG4tLVxuaW5pdC9LY29uZmlnLTE0NTgtXG5pbml0L0tjb25maWc6MTQ1OTpjb25maWcgTkVUX05TXG5pbml0L0tjb25maWctMTQ2MC1cdGJvb2wgXCYjMzQ7TmV0d29yayBuYW1lc3BhY2VcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG4tLVxubmV0L0tjb25maWcuZGVidWctMTEtXG5uZXQvS2NvbmZpZy5kZWJ1ZzoxMjpjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIHJlZmNvdW50IHRyYWNraW5nXCYjMzQ7XG4tLVxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcbm5ldC9uc2gvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzMwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAmYW1wOyBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBpdGVtcyBoZXJlLiBJIHNlZSB0aGF0IGBORVRfTlNgIGlzIGEgY29uZmlnIG9wdGlvbiwgZGVmaW5pdGVseS4gQW5kIGBTWVNDVExgLCB5ZXAsIHRoYXQmIzM5O3MgYW5vdGhlciBvbmUuIFdlIGNhbiBhZGQgYFVOSVhgIGFuZCBgU01DYCB0byB0aGUgbGlzdC4gTm93LCBzaW5jZSBgU01DYCBpcyBhIHJlbGF0aXZlbHkgY29tcGxleCBvcHRpb24sIEkgd2FudCB0byBxdWlja2x5IHZlcmlmeSBpZiBpdCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVtZW50cy4gSXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnPTE0Nj1jb25maWcgSTJDX1NQSV9TTUMxX1VDT0RFX1BBVENIXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZy0xNTAtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnOjE1MTpjb25maWcgU01DX1VDT0RFX1BBVENIXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7U01DIHJlbG9jYXRpb24gcGF0Y2hcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9TTVNDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWctMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc6MjI6Y29uZmlnIFNNQzkxWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7U01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipDb25maWd1cmF0aW9uIERlZXAgRGl2ZTogU01DICZhbXA7IFZTT0NLRVRTKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyByaWdodC4gVGhlIGBTTUNgIGVudHJ5LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIGVsZW1lbnQuIEdvdCBpdC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGl2b3QgYW5kIGRlbHZlIGludG8gdGhlIGBWU09DS0VUU2Agc2V0dGluZ3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0IHRoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2UgYXNwZWN0cyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZTT0NLRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZy01LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTYzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqT2theSwgTGV0JiMzOTtzIEdldCBUaGlzIFN0cmFpZ2h0KioKClJpZ2h0LCBzbyBgVlNPQ0tFVFNgIGlzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgZ290IGl0LiBObyBuZWVkIHRvIHNlY29uZC1ndWVzcyB0aGF0LiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byBgWEZSTWAuIFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2UgaW4gdGhpcyBwdXp6bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhbGwgc3F1YXJlZCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDc1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqWEZSTSBDb25maWd1cmF0aW9uIENoZWNrKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgd2F5IHRvIGdvIGZvciBlbmFibGluZyBYRlJNLiBUaGF0IG1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLiBOb3csIGJlZm9yZSBJIGp1bXAgdG9vIGZhciBkb3duIHRoYXQgcmFiYml0IGhvbGUsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgb24gdGhlIGBMV1RVTk5FTGAgc3VwcG9ydC4gR290dGEgbWFrZSBzdXJlIHRob3NlIHR1bm5lbHMgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExXVFVOTkVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ0Mz1zb3VyY2UgXCYjMzQ7bmV0L2lmZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00NDQtXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXG5uZXQvS2NvbmZpZy00NDYtXHRib29sIFwmIzM0O05ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy00NTItXG5uZXQvS2NvbmZpZzo0NTM6Y29uZmlnIExXVFVOTkVMX0JQRlxubmV0L0tjb25maWctNDU0LVx0Ym9vbCBcJiMzNDtFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzUzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHllcCwgdGhhdCBsb29rcyBsaWtlIGFuIGBMV1RVTk5FTGAgY29uZmlndXJhdGlvbiwgbm8gcXVlc3Rpb24gYWJvdXQgaXQuIE5vdywgZ2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIG1pZ2h0IGJlIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBgTkZfQ09OTlRSQUNLYCBpcyBiZWhhdmluZyBpbiByZWxhdGlvbiB0byB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBmbG93aW5nIGFzIEkgZXhwZWN0IGl0IHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9MjY9ZW5kaWYgIyBORl9UQUJMRVNfQlJJREdFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyODpjb25maWcgTkZfQ09OTlRSQUNLX0JSSURHRVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0lQdjQvSVBWNiBicmlkZ2UgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI3OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgTkZfQ09OTlRSQUNLYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQgZXhhY3RseSB0aGF0IGNvbmZpZyBvcHRpb24gaXMgZm9yLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBuZXR3b3JrIGZpbHRlcmluZyBpbmZyYXN0cnVjdHVyZSwgdGhhdCBtdWNoIEkmIzM5O20gc3VyZSBvZi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBTQ1RQYCBoYW5kbGluZyB0byBzZWUgaWYgdGhhdCBpbnRlcmFjdHMgd2l0aCBvciBpcyBhZmZlY3RlZCBieSB0aGUgYE5GX0NPTk5UUkFDS2Agc2V0dXAuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgYXMgaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TQ1RQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDkxCgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDE0ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgU3lzY3RsIFJlZ2lzdHJhdGlvbiBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYElQX1NDVFBgIGp1bXBzIG91dCBhcyBvbmUgb2YgdGhlIGNvbmZpZ3MgaW52b2x2ZWQuICBMZXQmIzM5O3Mgc2VlLCB0aGUgZnVsbCBsaXN0IGlzOiBgTkVUX05TYCwgYFNZU0NUTGAsIGBVTklYYCwgYFNNQ2AsIGBWU09DS0VUU2AsIGBYRlJNX1VTRVJgLCBgTFdUVU5ORUxgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBJUF9TQ1RQYC4gIFRoYXQgZ2l2ZXMgdXMgYSBzY29wZS4KCkkmIzM5O20ga2V5aW5nIGluIG9uIGEgZmV3IHN5bWJvbHMsIHNwZWNpZmljYWxseSBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgc21jX3N5c2N0bF9uZXRfaW5pdGAuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgdXNlZCBhbmQgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZC4gVGhlIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24sIEkgbm90aWNlLCBpcyBjb25kaXRpb25hbGx5IHN0YXRpYyBpbmxpbmUsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBDT05GSUdfU1lTQ1RMYCBpcyBkZWZpbmVkLiBCdXQgZXZlbiB3aGVuIGl0ICppcyogc2V0LCB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIG5vbi1zdGF0aWMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgc21jX3N5c2N0bF9uZXRfaW5pdGAgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBhcmUgYWxzbyBub24tc3RhdGljOyB5ZXMsIGBzbWNfc3lzY3RsX25ldF9pbml0YCBpcyBkZWZpbmVkIGluIGBuZXQvc21jL3NtY19zeXNjdGwuY2AgYW5kIGlzIG5vbi1zdGF0aWMsIHNvIGJvdGggYXJlIG5vbi1zdGF0aWMuCgpOb3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIG5vbi1zdGF0aWMgYW5kIHdlIG5lZWQgdG8gY29uc2lkZXI/IEkgc2VlIGBuZl9ob29rc19sd3R1bm5lbF9zeXNjdGxfaGFuZGxlcmAgaXMgZXhwb3J0ZWQsIGJ1dCBpdCBzZWVtcyB0aGF0IGZ1bmN0aW9uIGp1c3QgY2hhbmdlcyBhIGBjdGxfdGFibGVgIHRvIGBjb25zdGAgYW5kIGRvZXNuJiMzOTt0IGFmZmVjdCBuZXRucyBjcmVhdGlvbi4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IHRhYmxlcyBhcmUgZGVjbGFyZWQ6CmBgYGMKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewpgYGAKYW5kCmBgYGMKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7Ci0Jc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CmBgYApJdCBsb29rcyBsaWtlIGl0IGlzbiYjMzk7dCBkdXBsaWNhdGluZyB0aGUgdGFibGUgZm9yIGx3dHVubmVsIGJlY2F1c2UgbHd0dW5uZWwgc3lzY3RscyBkb24mIzM5O3QgaGF2ZSBwZXItbmV0bnMgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuCgpMZXQmIzM5O3Mgc2VlOiBgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlYCBoYXMgYC5kYXRhID0gTlVMTGAuICBTbyBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgd2lsbCBjaGVjayB0aGF0LCBhbmQgc2luY2UgaXQgaXMgYE5VTExgLCBpdCBzaG91bGQgcGFzcyB0aGlzIGNoZWNrOgpgYGBjCgkJaWYgKGVudC0mZ3Q7ZGF0YSA9PSBOVUxMKQoJCQljb250aW51ZTsKYGBgCk9rYXksIHNvIHRoYXQmIzM5O3Mgc2FmZS4gV2hhdCBhYm91dCBvdGhlciB0YWJsZXM/CgpJIHNlZSB0aGF0IGBuZl9jdF9zeXNjdGxfdGFibGVgLCBgeGZybV90YWJsZWAsIGBpcHY2X3RhYmxlX3RlbXBsYXRlYCwgYGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVgLCBgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlYCwgYW5kIGBjdGxfZm9yd2FyZF9lbnRyeWAgYXJlIGFsbCBqdXN0IG1hZGUgYGNvbnN0YC4KClNvLCB0aGUgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHhmcm00X25ldF9zeXNjdGxfaW5pdGAsIGB4ZnJtNl9uZXRfc3lzY3RsX2luaXRgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgLCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAsIGFuZCBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAuCgpOb3csIHRoZSBtYWluIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYW5kIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAuCgpMZXQmIzM5O3MgY29uZmlybTogIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBpcyB0aGUga2V5IEFQSSBmb3IgcmVnaXN0ZXJpbmcgbmV0d29yayBzeXNjdGxzLiAgVGhhdCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWU6IHllcywgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJJiMzOTttIGdvaW5nIHRvIGZ1enogdGhpcyEKCk5vdywgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKnJlcXVpcmVkKj8gSSYjMzk7dmUgZ290IGBDT05GSUdfU1lTQ1RMYCwgYENPTkZJR19ORVRfTlNgLCBgQ09ORklHX05FVGAsIGBDT05GSUdfVU5JWGAsIGBDT05GSUdfU01DYCwgYENPTkZJR19WU09DS0VUU2AsIGBDT05GSUdfWEZSTV9VU0VSYCwgYENPTkZJR19MV1RVTk5FTGAsIGBDT05GSUdfTkZfQ09OTlRSQUNLYCwgYW5kIGBDT05GSUdfSVBfU0NUUGAuIE9rYXksIGxldCYjMzk7cyBkb2N1bWVudCBhbGwgb2YgdGhpcyBmb3IgdGhlIGZ1enplci4KCmBgYGpzb24KewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeiYjMzQ7LAogICAgJiMzNDtzbWNfc3lzY3RsX25ldF9pbml0JiMzNDssCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCByZWdpc3RyYXRpb24gZm9yIG5vbi1pbml0IG5ldHdvcmsgbmFtZXNwYWNlcywgY2hhbmdpbmcgaG93IHN5c2N0bCB0YWJsZXMgYXJlIGR1cGxpY2F0ZWQgYW5kIHZhbGlkYXRlZC4gSXQgaW50cm9kdWNlcyBhIHN0cmljdCBjaGVjayBpbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgdGhhdCByZXR1cm5zIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHBlcm1pc3Npb25zLCB3aGljaCBjYW4gY2F1c2UgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdG8gZmFpbCBpZiBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkLiBGdXp6aW5nIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfTlMmIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtMV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX25ldF9zeXNjdGxfc3omIzM0OywKICAgICYjMzQ7c21jX3N5c2N0bF9uZXRfaW5pdCYjMzQ7LAogICAgJiMzNDt1bml4X3N5c2N0bF9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBzeXNjdGwgcmVnaXN0cmF0aW9uIGZvciBub24taW5pdCBuZXR3b3JrIG5hbWVzcGFjZXMsIGNoYW5naW5nIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBkdXBsaWNhdGVkIGFuZCB2YWxpZGF0ZWQuIEl0IGludHJvZHVjZXMgYSBzdHJpY3QgY2hlY2sgaW4gYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRoYXQgcmV0dXJucyBhbiBlcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5IG1vZGlmeWluZyBwZXJtaXNzaW9ucywgd2hpY2ggY2FuIGNhdXNlIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIHRvIGZhaWwgaWYgc3lzY3RscyBhcmUgbWlzY29uZmlndXJlZC4gRnV6emluZyBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiBhbmQgc3lzY3RsIHJlZ2lzdHJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uIGJ5IG1ha2luZyB0aGUgc3RhdGljIHRlbXBsYXRlIHRhYmxlcyBgY29uc3RgIGFuZCBtb3ZpbmcgdGhlIGR1cGxpY2F0aW9uIGxvZ2ljIGludG8gZGVkaWNhdGVkIGBfZHVwYCBmdW5jdGlvbnMuIFRoZSBkdXBsaWNhdGVkIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBrbWVtZHVwKClgLCB3aGljaCBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGF0aWMgZ2xvYmFsIHRlbXBsYXRlcy4gU2luY2Ugc3RhdGljIGdsb2JhbCB2YXJpYWJsZXMgaW4gQyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCAoaW5jbHVkaW5nIGFueSBzdHJ1Y3QgcGFkZGluZyksIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGFibGVzIGFyZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG1lbW9yeSBsZWFrcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgb24gdGhlIGFsbG9jYXRlZCB0YWJsZXMpIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDNmMjViMjUzNWY4MTY0MjNiZTg3ZmIzZTRjZjE2NGFmZGMzZGJlYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCmluZGV4IDUwMWFmMTk5OWZlODMuLmU1ZWU2NzNiOWZjZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKQEAgLTUyNSwxMiAmIzQzOzUyNSwxMyBAQCBzdHJ1Y3QgY3RsX3RhYmxlOwogI2lmZGVmIENPTkZJR19TWVNDVEwKIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCk7CiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsCi0JCQkJCSAgICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKTsKJiM0MzsJCQkJCQljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJCQlzaXplX3QgdGFibGVfc2l6ZSk7CiB2b2lkIHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsCi0JY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKQomIzQzOwljb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IGI1MDg2MThiZmMxMjMuLmViMzVkYTM1NTZmNGEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKQogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtycHNfZGVmYXVsdF9tYXNrJiMzNDssCkBAIC03ODcsMjYgJiM0Mzs3ODcsMzggQEAgc3RhdGljIGludCBfX2luaXQgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXAoY2hhciAqc3RyKQogfQogX19zZXR1cCgmIzM0O2ZiX3R1bm5lbHM9JiMzNDssIGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKTsKIAotc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqbmV0bnNfY29yZV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShuZXRuc19jb3JlX3RhYmxlKTsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwl0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGJsKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJaWYgKHRibFtpXS5kYXRhID09ICZhbXA7c3lzY3RsX3dtZW1fbWF4KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJdGJsW2ldLmRhdGEgJiM0Mzs9IChjaGFyICopbmV0IC0gKGNoYXIgKikmYW1wO2luaXRfbmV0OwomIzQzOwl9CiYjNDM7CWZvciAoOyBpICZsdDsgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpCiYjNDM7CQl0YmxbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CiYjNDM7CiYjNDM7CXJldHVybiB0Ymw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibDsKIAogCXRibCA9IG5ldG5zX2NvcmVfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQlpbnQgaTsKLQkJdGJsID0ga21lbWR1cCh0YmwsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQl0YmwgPSBuZXRuc19jb3JlX3RhYmxlX2R1cChuZXQpOwogCQlpZiAodGJsID09IE5VTEwpCiAJCQlnb3RvIGVycl9kdXA7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7Ci0JCQlpZiAodGJsW2ldLmRhdGEgPT0gJmFtcDtzeXNjdGxfd21lbV9tYXgpCi0JCQkJYnJlYWs7Ci0KLQkJCXRibFtpXS5kYXRhICYjNDM7PSAoY2hhciAqKW5ldCAtIChjaGFyICopJmFtcDtpbml0X25ldDsKLQkJfQotCQlmb3IgKDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKQotCQkJdGJsW2ldLm1vZGUgJmFtcDs9IH4wMjIyOwogCX0KIAogCW5ldC0mZ3Q7Y29yZS5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L2NvcmUmIzM0OywgdGJsLCB0YWJsZV9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA0N2RlZDBmNjA3ZDRiLi5hOTBiZTU3YzYzYmUxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0yNzk2LDcgJiM0MzsyNzk2LDcgQEAgc3RhdGljIHZvaWQgZGV2aW5ldF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KQogCW5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtJmd0O2FycF9wYXJtcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7aXBfZm9yd2FyZCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2lwdjRfZGV2Y29uZi5kYXRhWwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCBjYTExODBkYmExZGVhLi4yZjAzNjNiY2EyYTg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtNjI0LDcgJiM0Mzs2MjQsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7dGNwX21heF90d19idWNrZXRzJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQuaXB2NC50Y3BfZGVhdGhfcm93LnN5c2N0bF9tYXhfdHdfYnVja2V0cywKQEAgLTE2NTQsMzUgJiM0MzsxNjU0LDQ1IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmlwdjRfbmV0X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CXRhYmxlID0ga21lbWR1cChpcHY0X25ldF90YWJsZSwgc2l6ZW9mKGlwdjRfbmV0X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGFibGVbaV0uZGF0YSkgewomIzQzOwkJCS8qIFVwZGF0ZSB0aGUgdmFyaWFibGVzIHRvIHBvaW50IGludG8KJiM0MzsJCQkgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0CiYjNDM7CQkJICovCiYjNDM7CQkJdGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDsKJiM0MzsJCQkgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBucwomIzQzOwkJCSAqLwomIzQzOwkJCXRhYmxlW2ldLm1vZGUgJmFtcDs9IH4wMjIyOwomIzQzOwkJfQomIzQzOwkJaWYgKHRhYmxlW2ldLmV4dHJhMiAmZ3Q7PSAodm9pZCAqKSZhbXA7aW5pdF9uZXQuaXB2NCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGFibGVbaV0uZXh0cmEyICZsdDsgKHZvaWQgKikoJmFtcDtpbml0X25ldC5pcHY0ICYjNDM7IDEpKQomIzQzOwkJCXRhYmxlW2ldLmV4dHJhMiAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHRhYmxlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKIAl0YWJsZSA9IGlwdjRfbmV0X3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKLQkJaW50IGk7Ci0KLQkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gaXB2NF9uZXRfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmICh0YWJsZVtpXS5kYXRhKSB7Ci0JCQkJLyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50bwotCQkJCSAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXQKLQkJCQkgKi8KLQkJCQl0YWJsZVtpXS5kYXRhICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogRW50cmllcyB3aXRob3V0IGRhdGEgcG9pbnRlciBhcmUgZ2xvYmFsOwotCQkJCSAqIE1ha2UgdGhlbSByZWFkLW9ubHkgaW4gbm9uLWluaXRfbmV0IG5zCi0JCQkJICovCi0JCQkJdGFibGVbaV0ubW9kZSAmYW1wOz0gfjAyMjI7Ci0JCQl9Ci0JCQlpZiAodGFibGVbaV0uZXh0cmEyICZndDs9ICh2b2lkICopJmFtcDtpbml0X25ldC5pcHY0ICZhbXA7JmFtcDsKLQkJCSAgICB0YWJsZVtpXS5leHRyYTIgJmx0OyAodm9pZCAqKSgmYW1wO2luaXRfbmV0LmlwdjQgJiM0MzsgMSkpCi0JCQkJdGFibGVbaV0uZXh0cmEyICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKLQkJfQogCX0KIAogCW5ldC0mZ3Q7aXB2NC5pcHY0X2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC9pcHY0JiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwppbmRleCA1OGZhZjFkZGQyYjE1Li5hYjdhMDEwMjlkNDkwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwpAQCAtMTQxLDcgJiM0MzsxNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyB4ZnJtNF9wb2xpY3lfYWZpbmZvID0gewogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lICAgICAgID0gJiMzNDt4ZnJtNF9nY190aHJlc2gmIzM0OywKIAkJLmRhdGEgICAgICAgICAgID0gJmFtcDtpbml0X25ldC54ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoLApAQCAtMTUxLDE4ICYjNDM7MTUxLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0gewogCX0sCiB9OwogCi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CiYjNDM7CXRhYmxlID0ga21lbWR1cCh4ZnJtNF9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLAomIzQzOwkJCUdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRhYmxlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7eGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRhYmxlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7CiAKIAl0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7Ci0JCXRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHhmcm00X3BvbGljeV90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSB4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3hmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7CiAJfQogCiAJaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L2lwdjQmIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggZWZiMjM4MDdhMDI2Mi4uYTk1YjAzNTE4MjRmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtMTM3NCw3ICYjNDM7MTM3NCw3IEBAIEVYUE9SVF9TWU1CT0woaWNtcHY2X2Vycl9jb252ZXJ0KTsKIHN0YXRpYyB1MzIgaWNtcHY2X2Vycm9yc19leHRlbnNpb25fbWFza19hbGwgPQogCUdFTk1BU0tfVTgoSUNNUF9FUlJfRVhUX0NPVU5UIC0gMSwgMCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtyYXRlbGltaXQmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5pcHY2LnN5c2N0bC5pY21wdjZfdGltZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDU5NjhjZTVhZDE1MDguLmI4MzNhNjQwMGM5NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtNjU1NSw3ICYjNDM7NjU1NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zeXNjdGxfcnRjYWNoZV9mbHVzaChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9CSYjMzQ7bWF4X3NpemUmIzM0OywKIAkJLmRhdGEJCT0JJmFtcDtpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemUsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCmluZGV4IGQyY2QzM2UyNjk4ZDUuLjFhMGEzNmRjZGFiYzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC02MSw3ICYjNDM7NjEsNyBAQCBwcm9jX3J0Nl9tdWx0aXBhdGhfaGFzaF9maWVsZHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgdm9pZCAqYgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O2JpbmR2Nm9ubHkmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5pcHY2LnN5c2N0bC5iaW5kdjZvbmx5LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCAzYjc0OTQ3NWY2ZWQ2Li41ZWMwNjNjYjRhYTQzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTg3LDcgJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKQogfQogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O3hmcm02X2djX3RocmVzaCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2luaXRfbmV0Lnhmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2gsCkBAIC0xOTcsMTggJiM0MzsxOTcsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNl9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNl9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHhmcm02X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksCiYjNDM7CQkJR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNl9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKIAogCXRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKLQkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQl0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7eGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDsKIAl9CiAKIAloZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvaXB2NiYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBiZTI5NTNjN2Q3MDJlLi5mNGYyZDgyMTkyZDU0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC02MzksNyAmIzQzOzYzOSw3IEBAIGVudW0gbmZfY3Rfc3lzY3RsX2luZGV4IHsKIAlORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHsKIAlbTkZfU1lTQ1RMX0NUX01BWF0gPSB7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7bmZfY29ubnRyYWNrX21heCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO25mX2Nvbm50cmFja19tYXgsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMKaW5kZXggMmQ4OTBkZDA0ZmY4OS4uNGUxZWVmMWJhMGYxNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYwpAQCAtNTQsNyAmIzQzOzU0LDcgQEAgaW50IG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9ob29rc19sd3R1bm5lbF9zeXNjdGxfaGFuZGxlcik7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtuZl9ob29rc19sd3R1bm5lbCYjMzQ7LAogCQkuZGF0YQkJPSBOVUxMLApAQCAtNjYsOCAmIzQzOzY2LDggQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7CiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7Ci0Jc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKIAl0YWJsZSA9IG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zeXNjdGwuYyBiL25ldC9zY3RwL3N5c2N0bC5jCmluZGV4IGZjYTg0MDQ4NGViZjcuLjJiOTRjMjExNDI3ZGUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3N5c2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3N5c2N0bC5jCkBAIC05Miw3ICYjNDM7OTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7CiAjZGVmaW5lIFNDVFBfUEZfUkVUUkFOU19JRFggICAgMgogI2RlZmluZSBTQ1RQX1BTX1JFVFJBTlNfSURYICAgIDMKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc2N0cF9uZXRfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0gewogCVtTQ1RQX1JUT19NSU5fSURYXSA9IHsKIAkJLnByb2NuYW1lCT0gJiMzNDtydG9fbWluJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQuc2N0cC5ydG9fbWluLApkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfc3lzY3RsLmMgYi9uZXQvc21jL3NtY19zeXNjdGwuYwppbmRleCBiMWVmZWQ1NDYyNDM1Li4wOWRhZDQ4MzM3ZjYxIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19zeXNjdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19zeXNjdGwuYwpAQCAtOTcsNyAmIzQzOzk3LDcgQEAgc3RhdGljIGludCBwcm9jX3NtY19oc19jdHJsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAogfQogI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi8KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O2F1dG9jb3JraW5nX3NpemUmIzM0OywKIAkJLmRhdGEgICAgICAgICAgID0gJmFtcDtpbml0X25ldC5zbWMuc3lzY3RsX2F1dG9jb3JraW5nX3NpemUsCkBAIC0xOTUsMTQgJiM0MzsxOTUsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7CiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqLwogfTsKIAotaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnNtY190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHNtY190YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRhYmxlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0YWJsZV9zaXplOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKikmYW1wO2luaXRfbmV0OwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO2ludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHNtY190YWJsZSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCiAJdGFibGUgPSBzbWNfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQlpbnQgaTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19TTUNfSFNfQ1RSTF9CUEYpCiAJCXN0cnVjdCBzbWNfaHNfY3RybCAqY3RybDsKIApAQCAtMjE0LDEyICYjNDM7MjI5LDkgQEAgaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJCXJjdV9yZWFkX3VubG9jaygpOwogI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi8KIAotCQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzbWNfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gc21jX3RhYmxlX2R1cChuZXQpOwogCQlpZiAoIXRhYmxlKQogCQkJZ290byBlcnJfYWxsb2M7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KQotCQkJdGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiAJfQogCiAJbmV0LSZndDtzbWMuc21jX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC9zbWMmIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuYwppbmRleCAxOWU4MDQ4MjQxYmFjLi4wN2Y4NDM0ZDQyNThjIDEwMDY0NAotLS0gYS9uZXQvc3lzY3RsX25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zeXNjdGxfbmV0LmMKQEAgLTExNCwxNiAmIzQzOzExNCwxNyBAQCBfX2luaXQgaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKQogCWdvdG8gb3V0OwogfQogCi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6CiYjNDM7LyogUmV0dXJuIGVycm9yIHdoZW4gc3lzY3RscyBmb3Igbm9uLWluaXQgbmV0bnMgYXJlIHVuc2FmZSBieSB2ZXJpZnlpbmc6CiAgKiAxKSBiZWluZyByZWFkLW9ubHksIG9yCiAgKiAyKSBoYXZpbmcgYSBkYXRhIHBvaW50ZXIgd2hpY2ggcG9pbnRzIG91dHNpZGUgb2YgdGhlIGdsb2JhbCBrZXJuZWwvbW9kdWxlCiAgKiAgICBkYXRhIHNlZ21lbnQsIGFuZCByYXRoZXIgaW50byB0aGUgaGVhcCB3aGVyZSBhIHBlci1uZXQgb2JqZWN0IHdhcwogICogICAgYWxsb2NhdGVkLgogICovCi1zdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCwKLQkJCQkgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpCiYjNDM7c3RhdGljIGludCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJICBzaXplX3QgdGFibGVfc2l6ZSkKIHsKLQlzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmVudDsKIAogCXByX2RlYnVnKCYjMzQ7UmVnaXN0ZXJpbmcgbmV0IHN5c2N0bCAobmV0ICVwKTogJXNcbiYjMzQ7LCBuZXQsIHBhdGgpOwogCWVudCA9IHRhYmxlOwpAQCAtMTQ5LDI0ICYjNDM7MTUwLDI0IEBAIHN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLAogCQllbHNlCiAJCQljb250aW51ZTsKIAotCQkvKiBJZiBpdCBpcyB3cml0YWJsZSBhbmQgcG9pbnRzIHRvIGtlcm5lbC9tb2R1bGUgZ2xvYmFsCi0JCSAqIGRhdGEsIHRoZW4gaXQmIzM5O3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLgotCQkgKi8KJiM0MzsJCS8qIFdhcm4gb24gbmV0bnMgbGVhay4gKi8KIAkJV0FSTigxLCAmIzM0O3N5c2N0bCAlcy8lczogZGF0YSBwb2ludHMgdG8gJXMgZ2xvYmFsIGRhdGE6ICVwc1xuJiMzNDssCi0JCSAgICAgcGF0aCwgZW50LSZndDtwcm9jbmFtZSwgd2hlcmUsIGVudC0mZ3Q7ZGF0YSk7CiYjNDM7CQkJcGF0aCwgZW50LSZndDtwcm9jbmFtZSwgd2hlcmUsIGVudC0mZ3Q7ZGF0YSk7CiAKLQkJLyogTWFrZSBpdCAmIzM0O3NhZmUmIzM0OyBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqLwotCQllbnQtJmd0O21vZGUgJmFtcDs9IH4wMjIyOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJY29uc3QgY2hhciAqcGF0aCwKLQkJCQkJCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAomIzQzOwkJCQkJCWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQkJCQkJc2l6ZV90IHRhYmxlX3NpemUpCiB7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkKLQkJZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTsKJiM0MzsJCWlmIChlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpKQomIzQzOwkJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIF9fcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKCZhbXA7bmV0LSZndDtzeXNjdGxzLCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCmluZGV4IGUwMmVkNmUzOTU1YzAuLjQ3NjYwZDU3MjZiYmQgMTAwNjQ0Ci0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCkBAIC0xMyw3ICYjNDM7MTMsNyBAQAogCiAjaW5jbHVkZSAmIzM0O2FmX3VuaXguaCYjMzQ7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O21heF9kZ3JhbV9xbGVuJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiwKQEAgLTIzLDE4ICYjNDM7MjMsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0gewogCX0sCiB9OwogCi1pbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAomIzQzOwl0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3VueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CiAJaWYgKG5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0gdW5peF90YWJsZTsKIAl9IGVsc2UgewotCQl0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjsKIAl9CiAKIAluZXQtJmd0O3VueC5jdGwgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvdW5peCYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCA2MjJkYmQwNDY3OTk0Li5jYWViZWY3M2VhNThkIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0yODk5LDcgJiM0MzsyODk5LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtuc19tb2RlJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQudnNvY2subW9kZSwKQEAgLTI5MjUsMjAgJiM0MzsyOTI1LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp2c29ja190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCiYjNDM7CXRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5tb2RlOwomIzQzOwl0YWJsZVsxXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLmNoaWxkX25zX21vZGU7CiYjNDM7CXRhYmxlWzJdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2suZzJoX2ZhbGxiYWNrOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CiAJaWYgKG5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0gdnNvY2tfdGFibGU7CiAJfSBlbHNlIHsKLQkJdGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gdnNvY2tfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLm1vZGU7Ci0JCXRhYmxlWzFdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2suY2hpbGRfbnNfbW9kZTsKLQkJdGFibGVbMl0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5nMmhfZmFsbGJhY2s7CiAJfQogCiAJbmV0LSZndDt2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L3Zzb2NrJiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmMKaW5kZXggY2EwMDNlOGEwMzc2MC4uMzU3MTUyYTUwZmFmMSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jCkBAIC0xMyw3ICYjNDM7MTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9pbml0IF9feGZybV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB9CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtX3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDt4ZnJtX2FldmVudF9ldGltZSYjMzQ7LAogCQkubWF4bGVuCQk9IHNpemVvZih1MzIpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwOQoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA4MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXNjdGwgVGFibGUgUmVnaXN0cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyBuZXR3b3JrIHN5c2N0bCB0YWJsZXMgZ2V0IHJlZ2lzdGVyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIGNoYW5naW5nIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byB3b3JrIHdpdGggYSBgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqYCBpbnN0ZWFkIG9mIGEgcGxhaW4gb25lLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkmIzM5O3JlIHRyeWluZyB0byBlbmZvcmNlIHNvbWUgaW1tdXRhYmlsaXR5IG9uIHRoZXNlIHRhYmxlcy4gVGhleSYjMzk7dmUgYWxzbyBnb25lIHRocm91Z2ggYW5kIG1hZGUgdmFyaW91cyBgc3RydWN0IGN0bF90YWJsZWAgZGVmaW5pdGlvbnMgYGNvbnN0YC4gVGhlIGtleSBoZXJlIGlzIHRoZSBkdXBsaWNhdGlvbiBzdHJhdGVneSBmb3IgbmV3IG5ldHdvcmsgbmFtZXNwYWNlcy4gSXQmIzM5O3MgdXNpbmcgYGttZW1kdXBgIHRvIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlYC4KCkFscmlnaHQsIGBrbWVtZHVwYC4uLiBpdCBhbGxvY2F0ZXMgbWVtb3J5IGFuZCB0aGVuIGNvcGllcyBkYXRhLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGlzLiBBaCwgaGVyZSYjMzk7cyB0aGUgYG5ldG5zX2NvcmVfdGFibGVfZHVwYCBmdW5jdGlvbjoKCmBgYGMKc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKewoJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpOwoJc3RydWN0IGN0bF90YWJsZSAqdGJsOwoJaW50IGk7CgoJdGJsID0ga21lbWR1cChuZXRuc19jb3JlX3RhYmxlLCBzaXplb2YobmV0bnNfY29yZV90YWJsZSksIEdGUF9LRVJORUwpOwoJaWYgKCF0YmwpCgkJcmV0dXJuIE5VTEw7CgoJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7CgkJaWYgKHRibFtpXS5kYXRhID09ICZhbXA7c3lzY3RsX3dtZW1fbWF4KQoJCQlicmVhazsKCgkJdGJsW2ldLmRhdGEgJiM0Mzs9IChjaGFyICopbmV0IC0gKGNoYXIgKikmYW1wO2luaXRfbmV0OwoJfQoJZm9yICg7IGkgJmx0OyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSkKCQl0YmxbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CgoJcmV0dXJuIHRibDsKfQpgYGAKCk9rYXksIHNvIHRoaXMgaXMganVzdCByZWZhY3RvcmluZyB0aGUgZHVwbGljYXRpb24gaW50byBhIGRlZGljYXRlZCBmdW5jdGlvbiBhbmQgZW5mb3JjaW5nIHRoZSBgY29uc3RgIG9uIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIG1ha2luZyBzdXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFdpdGggYGttZW1kdXBgLCBpdCBjb3BpZXMgYHNpemVvZihuZXRuc19jb3JlX3RhYmxlKWAgYnl0ZXMuIFNpbmNlIGBuZXRuc19jb3JlX3RhYmxlYCBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLCBhbnkgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgYXV0b21hdGljYWxseSB6ZXJvZWQgb3V0IGJ5IHRoZSBjb21waWxlci4gVGhhdCBtZWFucyB0aGUgZHVwbGljYXRlZCB0YWJsZSBpcyAqZnVsbHkgaW5pdGlhbGl6ZWQqIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIGhlcmUuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgdG8gZW5mb3JjZSBgY29uc3RgIG9uIHRoZXNlIHN0YXRpYyB0ZW1wbGF0ZXMgYW5kIG1vdmUgdGhlIGR1cGxpY2F0aW9uIGxvZ2ljIGFyb3VuZC4KCkFoLCBhbmQgdGhlcmUmIzM5O3MgYSBiZWhhdmlvciBjaGFuZ2Ugd2l0aCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgd2hpY2ggdXNlZCB0bzoKCmBgYGMKLQkJLyogTWFrZSBpdCAmIzM0O3NhZmUmIzM0OyBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqLwotCQllbnQtJmd0O21vZGUgJmFtcDs9IH4wMjIyOwpgYGAKCkFuZCBub3cgaXQgZG9lczoKCmBgYGMKJiM0MzsJCXJldHVybiAtRUFDQ0VTOwpgYGAKClNvLCBpbnN0ZWFkIG9mIHNpbGVudGx5IGRyb3BwaW5nIHdyaXRlIHBlcm1pc3Npb25zIG9uIGFuIHVuc2FmZSBzeXNjdGwsIGl0IG5vdyAqZmFpbHMqIHRoZSByZWdpc3RyYXRpb24uIFRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UsIGJ1dCBhZ2FpbiwgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYnV0IGBrbWVtZHVwYCBhbGxvY2F0ZXMgYW5kIGNvcGllcy4gVGhlIHNvdXJjZSBpcyBhIHN0YXRpYyBnbG9iYWwgdmFyaWFibGUuIFN0YXRpYyBnbG9iYWxzIGFyZSAqemVyby1pbml0aWFsaXplZCouIFNvLCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkLgoKU28uLi5ubyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIHJlZmFjdG9ycyBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uLiBJdCBtYWtlcyB0aGUgc3RhdGljIHRlbXBsYXRlcyBgY29uc3RgIGFuZCB1c2VzIGBrbWVtZHVwYCB0byBkdXBsaWNhdGUgdGhlbS4gU2luY2UgdGhlIHRlbXBsYXRlcyBhcmUgc3RhdGljLCB0aGV5JiMzOTtyZSBmdWxseSBpbml0aWFsaXplZCAoemVyb2VkIG91dCBieSB0aGUgY29tcGlsZXIpLiBga21lbWR1cGAgY29waWVzIHRoaXMgaW5pdGlhbGl6ZWQgZGF0YS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgaW52b2x2ZWQgaW4gY29udHJvbCBmbG93IHRoYXQgSSBjYW4gc2VlLiBLQVNBTiB3aWxsIGJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIGFueSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN5c2N0bCB0YWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHRhYmxlIHJlZ2lzdHJhdGlvbiBieSBtYWtpbmcgdGhlIHN0YXRpYyB0ZW1wbGF0ZSB0YWJsZXMgYGNvbnN0YCBhbmQgbW92aW5nIHRoZSBkdXBsaWNhdGlvbiBsb2dpYyBpbnRvIGRlZGljYXRlZCBgX2R1cGAgZnVuY3Rpb25zLiBUaGUgZHVwbGljYXRlZCB0YWJsZXMgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbWR1cCgpYCwgd2hpY2ggY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdGljIGdsb2JhbCB0ZW1wbGF0ZXMuIFNpbmNlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGluIEMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgKGluY2x1ZGluZyBhbnkgc3RydWN0IHBhZGRpbmcpLCB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRhYmxlcyBhcmUgY29tcGxldGVseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBtZW1vcnkgbGVha3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIG9uIHRoZSBhbGxvY2F0ZWQgdGFibGVzKSB3aWxsIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjI3Ljc2Njg3ODIzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODYyMzYzMzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiVU5JWFwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJMV1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnaXN0ZXJfbmV0X3N5c2N0bF9zelwiLFxuICAgIFwic21jX3N5c2N0bF9uZXRfaW5pdFwiLFxuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCByZWdpc3RyYXRpb24gZm9yIG5vbi1pbml0IG5ldHdvcmsgbmFtZXNwYWNlcywgY2hhbmdpbmcgaG93IHN5c2N0bCB0YWJsZXMgYXJlIGR1cGxpY2F0ZWQgYW5kIHZhbGlkYXRlZC4gSXQgaW50cm9kdWNlcyBhIHN0cmljdCBjaGVjayBpbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgdGhhdCByZXR1cm5zIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHBlcm1pc3Npb25zLCB3aGljaCBjYW4gY2F1c2UgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdG8gZmFpbCBpZiBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkLiBGdXp6aW5nIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozMzoyNy43NjY4ODIxMjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDE5OTQwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwM2YyNWIyNTM1ZjgxNjQyM2JlODdmYjNlNGNmMTY0YWZkYzNkYmViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxcbmluZGV4IDUwMWFmMTk5OWZlODMuLmU1ZWU2NzNiOWZjZjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuQEAgLTUyNSwxMiArNTI1LDEzIEBAIHN0cnVjdCBjdGxfdGFibGU7XFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCk7XFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IHRhYmxlX3NpemUpO1xcbiB2b2lkIHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXFxuLVxcdGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcXG4rXFx0Y29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5pbmRleCBiNTA4NjE4YmZjMTIzLi5lYjM1ZGEzNTU2ZjRhIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXFxuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5AQCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJycHNfZGVmYXVsdF9tYXNrXFxcIixcXG5AQCAtNzg3LDI2ICs3ODcsMzggQEAgc3RhdGljIGludCBfX2luaXQgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXAoY2hhciAqc3RyKVxcbiB9XFxuIF9fc2V0dXAoXFxcImZiX3R1bm5lbHM9XFxcIiwgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApO1xcbiBcXG4tc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XFxuIFxcdHN0cnVjdCBjdGxfdGFibGUgKnRibDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHR0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGJsKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcXG4rXFx0XFx0aWYgKHRibFtpXS5kYXRhID09IFxcdTAwMjZzeXNjdGxfd21lbV9tYXgpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0dGJsW2ldLmRhdGEgKz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKVxcdTAwMjZpbml0X25ldDtcXG4rXFx0fVxcbitcXHRmb3IgKDsgaSBcXHUwMDNjIHRhYmxlX3NpemU7ICsraSlcXG4rXFx0XFx0dGJsW2ldLm1vZGUgXFx1MDAyNj0gfjAyMjI7XFxuK1xcbitcXHRyZXR1cm4gdGJsO1xcbit9XFxuK1xcbitzdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShuZXRuc19jb3JlX3RhYmxlKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsO1xcbiBcXG4gXFx0dGJsID0gbmV0bnNfY29yZV90YWJsZTtcXG4gXFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuLVxcdFxcdGludCBpO1xcbi1cXHRcXHR0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0dGJsID0gbmV0bnNfY29yZV90YWJsZV9kdXAobmV0KTtcXG4gXFx0XFx0aWYgKHRibCA9PSBOVUxMKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9kdXA7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGFibGVfc2l6ZTsgKytpKSB7XFxuLVxcdFxcdFxcdGlmICh0YmxbaV0uZGF0YSA9PSBcXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdHRibFtpXS5kYXRhICs9IChjaGFyICopbmV0IC0gKGNoYXIgKilcXHUwMDI2aW5pdF9uZXQ7XFxuLVxcdFxcdH1cXG4tXFx0XFx0Zm9yICg7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyArK2kpXFxuLVxcdFxcdFxcdHRibFtpXS5tb2RlIFxcdTAwMjY9IH4wMjIyO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZWNvcmUuc3lzY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcXFwibmV0L2NvcmVcXFwiLCB0YmwsIHRhYmxlX3NpemUpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmNcXG5pbmRleCA0N2RlZDBmNjA3ZDRiLi5hOTBiZTU3YzYzYmUxIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2RldmluZXQuY1xcbisrKyBiL25ldC9pcHY0L2RldmluZXQuY1xcbkBAIC0yNzk2LDcgKzI3OTYsNyBAQCBzdGF0aWMgdm9pZCBkZXZpbmV0X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpXFxuIFxcdG5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtXFx1MDAzZWFycF9wYXJtcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiaXBfZm9yd2FyZFxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aXB2NF9kZXZjb25mLmRhdGFbXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmNcXG5pbmRleCBjYTExODBkYmExZGVhLi4yZjAzNjNiY2EyYTg4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXFxuKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmNcXG5AQCAtNjI0LDcgKzYyNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwidGNwX21heF90d19idWNrZXRzXFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5pcHY0LnRjcF9kZWF0aF9yb3cuc3lzY3RsX21heF90d19idWNrZXRzLFxcbkBAIC0xNjU0LDM1ICsxNjU0LDQ1IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqaXB2NF9uZXRfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHR0YWJsZSA9IGttZW1kdXAoaXB2NF9uZXRfdGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRhYmxlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcXG4rXFx0XFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcXG4rXFx0XFx0XFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xcbitcXHRcXHRcXHQgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcXHUwMDI2aW5pdF9uZXQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcXG4rXFx0XFx0XFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHRhYmxlW2ldLm1vZGUgXFx1MDAyNj0gfjAyMjI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHRhYmxlW2ldLmV4dHJhMiBcXHUwMDNlPSAodm9pZCAqKVxcdTAwMjZpbml0X25ldC5pcHY0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0YWJsZVtpXS5leHRyYTIgXFx1MDAzYyAodm9pZCAqKShcXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxcbitcXHRcXHRcXHR0YWJsZVtpXS5leHRyYTIgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVxcdTAwMjZpbml0X25ldDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdGFibGU7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbiBcXHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlO1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4tXFx0XFx0aW50IGk7XFxuLVxcbi1cXHRcXHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xcbitcXHRcXHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlX2R1cChuZXQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4tXFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcXG4tXFx0XFx0XFx0XFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xcbi1cXHRcXHRcXHRcXHQgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0XFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcXHUwMDI2aW5pdF9uZXQ7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcXG4tXFx0XFx0XFx0XFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHRhYmxlW2ldLm1vZGUgXFx1MDAyNj0gfjAyMjI7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKHRhYmxlW2ldLmV4dHJhMiBcXHUwMDNlPSAodm9pZCAqKVxcdTAwMjZpbml0X25ldC5pcHY0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICB0YWJsZVtpXS5leHRyYTIgXFx1MDAzYyAodm9pZCAqKShcXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxcbi1cXHRcXHRcXHRcXHR0YWJsZVtpXS5leHRyYTIgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVxcdTAwMjZpbml0X25ldDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZWlwdjQuaXB2NF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9pcHY0XFxcIiwgdGFibGUsXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmNcXG5pbmRleCA1OGZhZjFkZGQyYjE1Li5hYjdhMDEwMjlkNDkwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXFxuKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmNcXG5AQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHhmcm00X3BvbGljeV9hZmluZm8gPSB7XFxuIH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lICAgICAgID0gXFxcInhmcm00X2djX3RocmVzaFxcXCIsXFxuIFxcdFxcdC5kYXRhICAgICAgICAgICA9IFxcdTAwMjZpbml0X25ldC54ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoLFxcbkBAIC0xNTEsMTggKzE1MSwzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuIHtcXG4gXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuK1xcbitcXHR0YWJsZSA9IGttZW1kdXAoeGZybTRfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSxcXG4rXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGFibGUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XFxuK1xcbitcXHRyZXR1cm4gdGFibGU7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyO1xcbiBcXG4gXFx0dGFibGUgPSB4ZnJtNF9wb2xpY3lfdGFibGU7XFxuIFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbi1cXHRcXHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0dGFibGUgPSB4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKG5ldCk7XFxuIFxcdFxcdGlmICghdGFibGUpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbi1cXG4tXFx0XFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XFxuIFxcdH1cXG4gXFxuIFxcdGhkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcXFwibmV0L2lwdjRcXFwiLCB0YWJsZSxcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jXFxuaW5kZXggZWZiMjM4MDdhMDI2Mi4uYTk1YjAzNTE4MjRmMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pY21wLmNcXG4rKysgYi9uZXQvaXB2Ni9pY21wLmNcXG5AQCAtMTM3NCw3ICsxMzc0LDcgQEAgRVhQT1JUX1NZTUJPTChpY21wdjZfZXJyX2NvbnZlcnQpO1xcbiBzdGF0aWMgdTMyIGljbXB2Nl9lcnJvcnNfZXh0ZW5zaW9uX21hc2tfYWxsID1cXG4gXFx0R0VOTUFTS19VOChJQ01QX0VSUl9FWFRfQ09VTlQgLSAxLCAwKTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X2ljbXBfdGFibGVfdGVtcGxhdGVbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJyYXRlbGltaXRcXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmljbXB2Nl90aW1lLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xcbmluZGV4IDU5NjhjZTVhZDE1MDguLmI4MzNhNjQwMGM5NDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcXG5AQCAtNjU1NSw3ICs2NTU1LDcgQEAgc3RhdGljIGludCBpcHY2X3N5c2N0bF9ydGNhY2hlX2ZsdXNoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X3JvdXRlX3RhYmxlX3RlbXBsYXRlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PVxcdFxcXCJtYXhfc2l6ZVxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PVxcdFxcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemUsXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcXG5pbmRleCBkMmNkMzNlMjY5OGQ1Li4xYTBhMzZkY2RhYmMxIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXFxuKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcXG5AQCAtNjEsNyArNjEsNyBAQCBwcm9jX3J0Nl9tdWx0aXBhdGhfaGFzaF9maWVsZHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgdm9pZCAqYlxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJiaW5kdjZvbmx5XFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5iaW5kdjZvbmx5LFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXFxuaW5kZXggM2I3NDk0NzVmNmVkNi4uNWVjMDYzY2I0YWE0MyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuY1xcbisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXFxuQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lICAgICAgID0gXFxcInhmcm02X2djX3RocmVzaFxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQueGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCxcXG5AQCAtMTk3LDE4ICsxOTcsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnhmcm02X3BvbGljeV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbitcXG4rXFx0dGFibGUgPSBrbWVtZHVwKHhmcm02X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksXFxuK1xcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRhYmxlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xcbitcXG4rXFx0cmV0dXJuIHRhYmxlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcXG4gXFxuIFxcdHRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlO1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4tXFx0XFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdHRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlX2R1cChuZXQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4tXFxuLVxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xcbiBcXHR9XFxuIFxcbiBcXHRoZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9pcHY2XFxcIiwgdGFibGUsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xcbmluZGV4IGJlMjk1M2M3ZDcwMmUuLmY0ZjJkODIxOTJkNTQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuQEAgLTYzOSw3ICs2MzksNyBAQCBlbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuIFxcdE5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcXG4gXFx0W05GX1NZU0NUTF9DVF9NQVhdID0ge1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfbWF4XFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZuZl9jb25udHJhY2tfbWF4LFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcXG5pbmRleCAyZDg5MGRkMDRmZjg5Li40ZTFlZWYxYmEwZjE1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xcbkBAIC01NCw3ICs1NCw3IEBAIGludCBuZl9ob29rc19sd3R1bm5lbF9zeXNjdGxfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9ob29rc19sd3R1bm5lbFxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PSBOVUxMLFxcbkBAIC02Niw4ICs2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xcbiBcXG4gc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcXG4tXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbiBcXHR0YWJsZSA9IG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZTtcXG4gXFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmNcXG5pbmRleCBmY2E4NDA0ODRlYmY3Li4yYjk0YzIxMTQyN2RlIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3N5c2N0bC5jXFxuKysrIGIvbmV0L3NjdHAvc3lzY3RsLmNcXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7XFxuICNkZWZpbmUgU0NUUF9QRl9SRVRSQU5TX0lEWCAgICAyXFxuICNkZWZpbmUgU0NUUF9QU19SRVRSQU5TX0lEWCAgICAzXFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xcbiBcXHRbU0NUUF9SVE9fTUlOX0lEWF0gPSB7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInJ0b19taW5cXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnNjdHAucnRvX21pbixcXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfc3lzY3RsLmMgYi9uZXQvc21jL3NtY19zeXNjdGwuY1xcbmluZGV4IGIxZWZlZDU0NjI0MzUuLjA5ZGFkNDgzMzdmNjEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfc3lzY3RsLmNcXG4rKysgYi9uZXQvc21jL3NtY19zeXNjdGwuY1xcbkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNtY190YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZSAgICAgICA9IFxcXCJhdXRvY29ya2luZ19zaXplXFxcIixcXG4gXFx0XFx0LmRhdGEgICAgICAgICAgID0gXFx1MDAyNmluaXRfbmV0LnNtYy5zeXNjdGxfYXV0b2Nvcmtpbmdfc2l6ZSxcXG5AQCAtMTk1LDE0ICsxOTUsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XFxuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXFxuIH07XFxuIFxcbi1pbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnNtY190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHR0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGFibGUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRhYmxlX3NpemU7IGkrKylcXG4rXFx0XFx0dGFibGVbaV0uZGF0YSArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXFx1MDAyNmluaXRfbmV0O1xcbitcXG4rXFx0cmV0dXJuIHRhYmxlO1xcbit9XFxuK1xcbitpbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbiBcXHR0YWJsZSA9IHNtY190YWJsZTtcXG4gXFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuLVxcdFxcdGludCBpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU01DX0hTX0NUUkxfQlBGKVxcbiBcXHRcXHRzdHJ1Y3Qgc21jX2hzX2N0cmwgKmN0cmw7XFxuIFxcbkBAIC0yMTQsMTIgKzIyOSw5IEBAIGludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi9cXG4gXFxuLVxcdFxcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpO1xcbitcXHRcXHR0YWJsZSA9IHNtY190YWJsZV9kdXAobmV0KTtcXG4gXFx0XFx0aWYgKCF0YWJsZSlcXG4gXFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKVxcbi1cXHRcXHRcXHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcXHUwMDI2aW5pdF9uZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdG5ldC1cXHUwMDNlc21jLnNtY19oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9zbWNcXFwiLCB0YWJsZSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmNcXG5pbmRleCAxOWU4MDQ4MjQxYmFjLi4wN2Y4NDM0ZDQyNThjIDEwMDY0NFxcbi0tLSBhL25ldC9zeXNjdGxfbmV0LmNcXG4rKysgYi9uZXQvc3lzY3RsX25ldC5jXFxuQEAgLTExNCwxNiArMTE0LDE3IEBAIF9faW5pdCBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpXFxuIFxcdGdvdG8gb3V0O1xcbiB9XFxuIFxcbi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6XFxuKy8qIFJldHVybiBlcnJvciB3aGVuIHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSB1bnNhZmUgYnkgdmVyaWZ5aW5nOlxcbiAgKiAxKSBiZWluZyByZWFkLW9ubHksIG9yXFxuICAqIDIpIGhhdmluZyBhIGRhdGEgcG9pbnRlciB3aGljaCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZ2xvYmFsIGtlcm5lbC9tb2R1bGVcXG4gICogICAgZGF0YSBzZWdtZW50LCBhbmQgcmF0aGVyIGludG8gdGhlIGhlYXAgd2hlcmUgYSBwZXItbmV0IG9iamVjdCB3YXNcXG4gICogICAgYWxsb2NhdGVkLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcXG4rc3RhdGljIGludCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3QgdGFibGVfc2l6ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmVudDtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xcXFxuXFxcIiwgbmV0LCBwYXRoKTtcXG4gXFx0ZW50ID0gdGFibGU7XFxuQEAgLTE0OSwyNCArMTUwLDI0IEBAIHN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0LyogSWYgaXQgaXMgd3JpdGFibGUgYW5kIHBvaW50cyB0byBrZXJuZWwvbW9kdWxlIGdsb2JhbFxcbi1cXHRcXHQgKiBkYXRhLCB0aGVuIGl0J3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLlxcbi1cXHRcXHQgKi9cXG4rXFx0XFx0LyogV2FybiBvbiBuZXRucyBsZWFrLiAqL1xcbiBcXHRcXHRXQVJOKDEsIFxcXCJzeXNjdGwgJXMvJXM6IGRhdGEgcG9pbnRzIHRvICVzIGdsb2JhbCBkYXRhOiAlcHNcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgcGF0aCwgZW50LVxcdTAwM2Vwcm9jbmFtZSwgd2hlcmUsIGVudC1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdFxcdHBhdGgsIGVudC1cXHUwMDNlcHJvY25hbWUsIHdoZXJlLCBlbnQtXFx1MDAzZWRhdGEpO1xcbiBcXG4tXFx0XFx0LyogTWFrZSBpdCBcXFwic2FmZVxcXCIgYnkgZHJvcHBpbmcgd3JpdGFibGUgcGVybXMgKi9cXG4tXFx0XFx0ZW50LVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH4wMjIyO1xcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcGF0aCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzaXplX3QgdGFibGVfc2l6ZSlcXG4ge1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxuLVxcdFxcdGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7XFxuK1xcdFxcdGlmIChlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdHJldHVybiBfX3JlZ2lzdGVyX3N5c2N0bF90YWJsZShcXHUwMDI2bmV0LVxcdTAwM2VzeXNjdGxzLCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xcbmluZGV4IGUwMmVkNmUzOTU1YzAuLjQ3NjYwZDU3MjZiYmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcXG4rKysgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xcbkBAIC0xMyw3ICsxMyw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYWZfdW5peC5oXFxcIlxcbiBcXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibWF4X2RncmFtX3FsZW5cXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXFxuQEAgLTIzLDE4ICsyMywyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1pbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuIHtcXG4gXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbitcXHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCF0YWJsZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG4rXFxuK1xcdHJldHVybiB0YWJsZTtcXG4rfVxcbitcXG4raW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbitcXG4gXFx0aWYgKG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4gXFx0XFx0dGFibGUgPSB1bml4X3RhYmxlO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0dGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4tXFxuLVxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZXVueC5jdGwgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC91bml4XFxcIiwgdGFibGUsXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmNhZWJlZjczZWE1OGQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuQEAgLTI4OTksNyArMjg5OSw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm5zX21vZGVcXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXFxuQEAgLTI5MjUsMjAgKzI5MjUsMzEgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdnNvY2tfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gXFxuK1xcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGFibGUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLm1vZGU7XFxuK1xcdHRhYmxlWzFdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xcbitcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xcbitcXG4rXFx0cmV0dXJuIHRhYmxlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4rXFxuIFxcdGlmIChuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuIFxcdFxcdHRhYmxlID0gdnNvY2tfdGFibGU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdHRhYmxlID0gdnNvY2tfdGFibGVfZHVwKG5ldCk7XFxuIFxcdFxcdGlmICghdGFibGUpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbi1cXG4tXFx0XFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLm1vZGU7XFxuLVxcdFxcdHRhYmxlWzFdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xcbi1cXHRcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC92c29ja1xcXCIsIHRhYmxlLFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jIGIvbmV0L3hmcm0veGZybV9zeXNjdGwuY1xcbmluZGV4IGNhMDAzZThhMDM3NjAuLjM1NzE1MmE1MGZhZjEgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9zeXNjdGwuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcXG5AQCAtMTMsNyArMTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9pbml0IF9feGZybV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInhmcm1fYWV2ZW50X2V0aW1lXFxcIixcXG4gXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHUzMiksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjI5LjA2OTQ0ODk4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMzIwNjk2OTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiVU5JWFwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJMV1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnaXN0ZXJfbmV0X3N5c2N0bF9zelwiLFxuICAgIFwic21jX3N5c2N0bF9uZXRfaW5pdFwiLFxuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBzeXNjdGwgcmVnaXN0cmF0aW9uIGZvciBub24taW5pdCBuZXR3b3JrIG5hbWVzcGFjZXMsIGNoYW5naW5nIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBkdXBsaWNhdGVkIGFuZCB2YWxpZGF0ZWQuIEl0IGludHJvZHVjZXMgYSBzdHJpY3QgY2hlY2sgaW4gYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRoYXQgcmV0dXJucyBhbiBlcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5IG1vZGlmeWluZyBwZXJtaXNzaW9ucywgd2hpY2ggY2FuIGNhdXNlIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIHRvIGZhaWwgaWYgc3lzY3RscyBhcmUgbWlzY29uZmlndXJlZC4gRnV6emluZyBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiBhbmQgc3lzY3RsIHJlZ2lzdHJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDNmMjViMjUzNWY4MTY0MjNiZTg3ZmIzZTRjZjE2NGFmZGMzZGJlYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5pbmRleCA1MDFhZjE5OTlmZTgzLi5lNWVlNjczYjlmY2Y4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcbkBAIC01MjUsMTIgKzUyNSwxMyBAQCBzdHJ1Y3QgY3RsX3RhYmxlO1xuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKTtcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKTtcbitcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbitcdFx0XHRcdFx0XHRzaXplX3QgdGFibGVfc2l6ZSk7XG4gdm9pZCB1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlcik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LFxuLVx0Y29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuK1x0Y29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5pbmRleCBiNTA4NjE4YmZjMTIzLi5lYjM1ZGEzNTU2ZjRhIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5AQCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0bnNfY29yZV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKVxuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJycHNfZGVmYXVsdF9tYXNrXCIsXG5AQCAtNzg3LDI2ICs3ODcsMzggQEAgc3RhdGljIGludCBfX2luaXQgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXAoY2hhciAqc3RyKVxuIH1cbiBfX3NldHVwKFwiZmJfdHVubmVscz1cIiwgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApO1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7XG4rXHRpbnQgaTtcbitcbitcdHRibCA9IGttZW1kdXAobmV0bnNfY29yZV90YWJsZSwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGJsKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICsraSkge1xuK1x0XHRpZiAodGJsW2ldLmRhdGEgPT0gXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR0YmxbaV0uZGF0YSArPSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG4rXHR9XG4rXHRmb3IgKDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgKytpKVxuK1x0XHR0YmxbaV0ubW9kZSBcdTAwMjY9IH4wMjIyO1xuK1xuK1x0cmV0dXJuIHRibDtcbit9XG4rXG4rc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7XG4gXG4gXHR0YmwgPSBuZXRuc19jb3JlX3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0aW50IGk7XG4tXHRcdHRibCA9IGttZW1kdXAodGJsLCBzaXplb2YobmV0bnNfY29yZV90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YmwgPSBuZXRuc19jb3JlX3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAodGJsID09IE5VTEwpXG4gXHRcdFx0Z290byBlcnJfZHVwO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcbi1cdFx0XHRpZiAodGJsW2ldLmRhdGEgPT0gXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0dGJsW2ldLmRhdGEgKz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHR9XG4tXHRcdGZvciAoOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpXG4tXHRcdFx0dGJsW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2Vjb3JlLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvY29yZVwiLCB0YmwsIHRhYmxlX3NpemUpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuY1xuaW5kZXggNDdkZWQwZjYwN2Q0Yi4uYTkwYmU1N2M2M2JlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2RldmluZXQuY1xuKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jXG5AQCAtMjc5Niw3ICsyNzk2LDcgQEAgc3RhdGljIHZvaWQgZGV2aW5ldF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxuIFx0bmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIoaWRldi1cdTAwM2VhcnBfcGFybXMpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBjdGxfZm9yd2FyZF9lbnRyeVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcImlwX2ZvcndhcmRcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpcHY0X2RldmNvbmYuZGF0YVtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG5pbmRleCBjYTExODBkYmExZGVhLi4yZjAzNjNiY2EyYTg4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG5AQCAtNjI0LDcgKzYyNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcInRjcF9tYXhfdHdfYnVja2V0c1wiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmlwdjQudGNwX2RlYXRoX3Jvdy5zeXNjdGxfbWF4X3R3X2J1Y2tldHMsXG5AQCAtMTY1NCwzNSArMTY1NCw0NSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmlwdjRfbmV0X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1x0aW50IGk7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoaXB2NF9uZXRfdGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcbitcdFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcbitcdFx0XHQvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvXG4rXHRcdFx0ICogdGhlIGN1cnJlbnQgc3RydWN0IG5ldFxuK1x0XHRcdCAqL1xuK1x0XHRcdHRhYmxlW2ldLmRhdGEgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcbitcdFx0XHQgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBuc1xuK1x0XHRcdCAqL1xuK1x0XHRcdHRhYmxlW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbitcdFx0fVxuK1x0XHRpZiAodGFibGVbaV0uZXh0cmEyIFx1MDAzZT0gKHZvaWQgKilcdTAwMjZpbml0X25ldC5pcHY0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGFibGVbaV0uZXh0cmEyIFx1MDAzYyAodm9pZCAqKShcdTAwMjZpbml0X25ldC5pcHY0ICsgMSkpXG4rXHRcdFx0dGFibGVbaV0uZXh0cmEyICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbitcdH1cbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4rc3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpO1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4gXHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0aW50IGk7XG4tXG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGlwdjRfbmV0X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRhYmxlID0gaXB2NF9uZXRfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkrKykge1xuLVx0XHRcdGlmICh0YWJsZVtpXS5kYXRhKSB7XG4tXHRcdFx0XHQvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvXG4tXHRcdFx0XHQgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0XG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHRhYmxlW2ldLmRhdGEgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHQvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7XG4tXHRcdFx0XHQgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBuc1xuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR0YWJsZVtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICh0YWJsZVtpXS5leHRyYTIgXHUwMDNlPSAodm9pZCAqKVx1MDAyNmluaXRfbmV0LmlwdjQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHRhYmxlW2ldLmV4dHJhMiBcdTAwM2MgKHZvaWQgKikoXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxuLVx0XHRcdFx0dGFibGVbaV0uZXh0cmEyICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZWlwdjQuaXB2NF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvaXB2NFwiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG5pbmRleCA1OGZhZjFkZGQyYjE1Li5hYjdhMDEwMjlkNDkwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmNcbisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG5AQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHhmcm00X3BvbGljeV9hZmluZm8gPSB7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcInhmcm00X2djX3RocmVzaFwiLFxuIFx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZpbml0X25ldC54ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoLFxuQEAgLTE1MSwxOCArMTUxLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbitcbitcdHRhYmxlID0ga21lbWR1cCh4ZnJtNF9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLFxuK1x0XHRcdEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK3N0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbiBcbiBcdHRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XG4gXHR9XG4gXG4gXHRoZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvaXB2NFwiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmNcbmluZGV4IGVmYjIzODA3YTAyNjIuLmE5NWIwMzUxODI0ZjMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pY21wLmNcbisrKyBiL25ldC9pcHY2L2ljbXAuY1xuQEAgLTEzNzQsNyArMTM3NCw3IEBAIEVYUE9SVF9TWU1CT0woaWNtcHY2X2Vycl9jb252ZXJ0KTtcbiBzdGF0aWMgdTMyIGljbXB2Nl9lcnJvcnNfZXh0ZW5zaW9uX21hc2tfYWxsID1cbiBcdEdFTk1BU0tfVTgoSUNNUF9FUlJfRVhUX0NPVU5UIC0gMSwgMCk7XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcInJhdGVsaW1pdFwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmljbXB2Nl90aW1lLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA1OTY4Y2U1YWQxNTA4Li5iODMzYTY0MDBjOTQ0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTY1NTUsNyArNjU1NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zeXNjdGxfcnRjYWNoZV9mbHVzaChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3JvdXRlX3RhYmxlX3RlbXBsYXRlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD1cdFwibWF4X3NpemVcIixcbiBcdFx0LmRhdGFcdFx0PVx0XHUwMDI2aW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X21heF9zaXplLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcbmluZGV4IGQyY2QzM2UyNjk4ZDUuLjFhMGEzNmRjZGFiYzEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcbkBAIC02MSw3ICs2MSw3IEBAIHByb2NfcnQ2X211bHRpcGF0aF9oYXNoX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCB2b2lkICpiXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJiaW5kdjZvbmx5XCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2Ni5zeXNjdGwuYmluZHY2b25seSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5pbmRleCAzYjc0OTQ3NWY2ZWQ2Li41ZWMwNjNjYjRhYTQzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5AQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyB2b2lkIHhmcm02X3BvbGljeV9maW5pKHZvaWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZSAgICAgICA9IFwieGZybTZfZ2NfdGhyZXNoXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQueGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCxcbkBAIC0xOTcsMTggKzE5NywzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTZfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoeGZybTZfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSxcbitcdFx0XHRHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xuK1xuK1x0cmV0dXJuIHRhYmxlO1xuK31cbitcbitzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7XG4gXG4gXHR0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2lwdjZcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5pbmRleCBiZTI5NTNjN2Q3MDJlLi5mNGYyZDgyMTkyZDU0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbkBAIC02MzksNyArNjM5LDcgQEAgZW51bSBuZl9jdF9zeXNjdGxfaW5kZXgge1xuIFx0TkZfU1lTQ1RMX0NUX0xBU1RfU1lTQ1RMLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4gXHRbTkZfU1lTQ1RMX0NUX01BWF0gPSB7XG4gXHRcdC5wcm9jbmFtZVx0PSBcIm5mX2Nvbm50cmFja19tYXhcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZl9jb25udHJhY2tfbWF4LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuaW5kZXggMmQ4OTBkZDA0ZmY4OS4uNGUxZWVmMWJhMGYxNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXG5AQCAtNTQsNyArNTQsNyBAQCBpbnQgbmZfaG9va3NfbHd0dW5uZWxfc3lzY3RsX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfaG9va3NfbHd0dW5uZWxfc3lzY3RsX2hhbmRsZXIpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJuZl9ob29rc19sd3R1bm5lbFwiLFxuIFx0XHQuZGF0YVx0XHQ9IE5VTEwsXG5AQCAtNjYsOCArNjYsOCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbiBcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmNcbmluZGV4IGZjYTg0MDQ4NGViZjcuLjJiOTRjMjExNDI3ZGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zeXNjdGwuY1xuKysrIGIvbmV0L3NjdHAvc3lzY3RsLmNcbkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfdGFibGVbXSA9IHtcbiAjZGVmaW5lIFNDVFBfUEZfUkVUUkFOU19JRFggICAgMlxuICNkZWZpbmUgU0NUUF9QU19SRVRSQU5TX0lEWCAgICAzXG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc2N0cF9uZXRfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xuIFx0W1NDVFBfUlRPX01JTl9JRFhdID0ge1xuIFx0XHQucHJvY25hbWVcdD0gXCJydG9fbWluXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuc2N0cC5ydG9fbWluLFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3N5c2N0bC5jIGIvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbmluZGV4IGIxZWZlZDU0NjI0MzUuLjA5ZGFkNDgzMzdmNjEgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19zeXNjdGwuY1xuKysrIGIvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi9cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCJhdXRvY29ya2luZ19zaXplXCIsXG4gXHRcdC5kYXRhICAgICAgICAgICA9IFx1MDAyNmluaXRfbmV0LnNtYy5zeXNjdGxfYXV0b2Nvcmtpbmdfc2l6ZSxcbkBAIC0xOTUsMTQgKzE5NSwyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIH07XG4gXG4taW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnNtY190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXHRpbnQgaTtcbitcbitcdHRhYmxlID0ga21lbWR1cChzbWNfdGFibGUsIHNpemVvZihzbWNfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKVxuK1x0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbitcbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4raW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHNtY190YWJsZSk7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiBcdHRhYmxlID0gc21jX3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0aW50IGk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1NNQ19IU19DVFJMX0JQRilcbiBcdFx0c3RydWN0IHNtY19oc19jdHJsICpjdHJsO1xuIFxuQEAgLTIxNCwxMiArMjI5LDkgQEAgaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXG4gXG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHNtY190YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKVxuLVx0XHRcdHRhYmxlW2ldLmRhdGEgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZXNtYy5zbWNfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L3NtY1wiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuY1xuaW5kZXggMTllODA0ODI0MWJhYy4uMDdmODQzNGQ0MjU4YyAxMDA2NDRcbi0tLSBhL25ldC9zeXNjdGxfbmV0LmNcbisrKyBiL25ldC9zeXNjdGxfbmV0LmNcbkBAIC0xMTQsMTYgKzExNCwxNyBAQCBfX2luaXQgaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKVxuIFx0Z290byBvdXQ7XG4gfVxuIFxuLS8qIFZlcmlmeSB0aGF0IHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSBzYWZlIGJ5IGVpdGhlcjpcbisvKiBSZXR1cm4gZXJyb3Igd2hlbiBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgdW5zYWZlIGJ5IHZlcmlmeWluZzpcbiAgKiAxKSBiZWluZyByZWFkLW9ubHksIG9yXG4gICogMikgaGF2aW5nIGEgZGF0YSBwb2ludGVyIHdoaWNoIHBvaW50cyBvdXRzaWRlIG9mIHRoZSBnbG9iYWwga2VybmVsL21vZHVsZVxuICAqICAgIGRhdGEgc2VnbWVudCwgYW5kIHJhdGhlciBpbnRvIHRoZSBoZWFwIHdoZXJlIGEgcGVyLW5ldCBvYmplY3Qgd2FzXG4gICogICAgYWxsb2NhdGVkLlxuICAqL1xuLXN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuLVx0XHRcdFx0ICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuK3N0YXRpYyBpbnQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuK1x0XHRcdFx0ICBzaXplX3QgdGFibGVfc2l6ZSlcbiB7XG4tXHRzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIlJlZ2lzdGVyaW5nIG5ldCBzeXNjdGwgKG5ldCAlcCk6ICVzXFxuXCIsIG5ldCwgcGF0aCk7XG4gXHRlbnQgPSB0YWJsZTtcbkBAIC0xNDksMjQgKzE1MCwyNCBAQCBzdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbiBcdFx0ZWxzZVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBJZiBpdCBpcyB3cml0YWJsZSBhbmQgcG9pbnRzIHRvIGtlcm5lbC9tb2R1bGUgZ2xvYmFsXG4tXHRcdCAqIGRhdGEsIHRoZW4gaXQncyBwcm9iYWJseSBhIG5ldG5zIGxlYWsuXG4tXHRcdCAqL1xuK1x0XHQvKiBXYXJuIG9uIG5ldG5zIGxlYWsuICovXG4gXHRcdFdBUk4oMSwgXCJzeXNjdGwgJXMvJXM6IGRhdGEgcG9pbnRzIHRvICVzIGdsb2JhbCBkYXRhOiAlcHNcXG5cIixcbi1cdFx0ICAgICBwYXRoLCBlbnQtXHUwMDNlcHJvY25hbWUsIHdoZXJlLCBlbnQtXHUwMDNlZGF0YSk7XG4rXHRcdFx0cGF0aCwgZW50LVx1MDAzZXByb2NuYW1lLCB3aGVyZSwgZW50LVx1MDAzZWRhdGEpO1xuIFxuLVx0XHQvKiBNYWtlIGl0IFwic2FmZVwiIGJ5IGRyb3BwaW5nIHdyaXRhYmxlIHBlcm1zICovXG4tXHRcdGVudC1cdTAwM2Vtb2RlIFx1MDAyNj0gfjAyMjI7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRjb25zdCBjaGFyICpwYXRoLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuK1x0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuIFx0XHRcdFx0XHRcdHNpemVfdCB0YWJsZV9zaXplKVxuIHtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuLVx0XHRlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpO1xuK1x0XHRpZiAoZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHJldHVybiBfX3JlZ2lzdGVyX3N5c2N0bF90YWJsZShcdTAwMjZuZXQtXHUwMDNlc3lzY3RscywgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG5pbmRleCBlMDJlZDZlMzk1NWMwLi40NzY2MGQ1NzI2YmJkIDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcbisrKyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG5AQCAtMTMsNyArMTMsNyBAQFxuIFxuICNpbmNsdWRlIFwiYWZfdW5peC5oXCJcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJtYXhfZGdyYW1fcWxlblwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG5AQCAtMjMsMTggKzIzLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1pbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbitcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK2ludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbitcbiBcdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiBcdFx0dGFibGUgPSB1bml4X3RhYmxlO1xuIFx0fSBlbHNlIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHVuaXhfdGFibGUsIHNpemVvZih1bml4X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZXVueC5jdGwgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvdW5peFwiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmNhZWJlZjczZWE1OGQgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTI4OTksNyArMjg5OSw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJuc19tb2RlXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcbkBAIC0yOTI1LDIwICsyOTI1LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnZzb2NrX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4rXHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4rXHR0YWJsZVsxXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGU7XG4rXHR0YWJsZVsyXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjaztcbitcbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4rc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4gXHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0gdnNvY2tfdGFibGU7XG4gXHR9IGVsc2Uge1xuLVx0XHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHZzb2NrX3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4tXHRcdHRhYmxlWzFdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZTtcbi1cdFx0dGFibGVbMl0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5nMmhfZmFsbGJhY2s7XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNldnNvY2suc3lzY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcIm5ldC92c29ja1wiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jIGIvbmV0L3hmcm0veGZybV9zeXNjdGwuY1xuaW5kZXggY2EwMDNlOGEwMzc2MC4uMzU3MTUyYTUwZmFmMSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbkBAIC0xMyw3ICsxMyw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2luaXQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJ4ZnJtX2FldmVudF9ldGltZVwiLFxuIFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHUzMiksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozMzoyOS4wNjk0NTAxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEwMjIyOTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFN5c2N0bCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZnVuZGFtZW50YWxseSByZXdvcmtpbmcgaG93IG5ldHdvcmsgc3lzY3RscyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbmV0d29yayBuYW1lc3BhY2VzLiBUaGlzIHNlZW1zIHByZXR0eSBzaWduaWZpY2FudC4gVGhleSdyZSBjaGFuZ2luZyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgdG8gdXNlIGEgYGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmAsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBzYWZldHksIGFuZCB0aGV5J3ZlIGFsdGVyZWQgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygc2lsZW50bHkgZHJvcHBpbmcgd3JpdGUgcGVybWlzc2lvbnMuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIHBvdGVudGlhbCBwb2ludCBmb3IgYnJlYWthZ2UuXG5cblRoZSBiaWcgcGljdHVyZSBpcyB0aGF0IHRoZXkndmUgcmVmYWN0b3JlZCBob3cgc3lzY3RsIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGFuZCBtb2RpZmllZCBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLiBUaGV5J3ZlIG1vdmVkIHRoZSBkdXBsaWNhdGlvbiBsb2dpYyBpbnRvIGRlZGljYXRlZCBgKl9kdXBgIGZ1bmN0aW9ucyAoZS5nLiwgYG5ldG5zX2NvcmVfdGFibGVfZHVwYCwgYGlwdjRfbmV0X3RhYmxlX2R1cGApIHdoaWNoIGltcHJvdmVzIHJlYWRhYmlsaXR5LiBUaGlzIGlzbid0IGp1c3QgY29zbWV0aWM7IGl0IGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5UaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgcHJldHR5IGNsZWFyOiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgbm93IHJldHVybnMgYW4gYC1FQUNDRVNgIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHRoZSB0YWJsZSwgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB3aWxsIGZhaWwgaWYgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIGRvZXMuIFRoYXQsIGNvdXBsZWQgd2l0aCB0aGUgY2hhbmdlIGluIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBhbGxvY2F0ZWQvaW5pdGlhbGl6ZWQgaW4gbmV3IG5ldG5zLCBtZWFucyB0aGVyZSdzIGEgZGVmaW5pdGUgc3VyZmFjZSBhcmVhIGZvciByZWdyZXNzaW9ucy5cblxuVGhpcyBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXQuXCIgVGhlIGNoYW5nZXMgYWZmZWN0IG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uLCB3aGljaCBhcmUgYm90aCBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBiZXN0IGNhbmRpZGF0ZXMgZm9yIHRhcmdldGluZy4gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIHByb2JhYmx5IHRoZSBtYWluIG9uZSwgYWx0aG91Z2ggaXQgbWlnaHQgYmUgY2FsbGVkIHRvbyBvZnRlbi4gVGhlIGAqX2R1cGAgZnVuY3Rpb25zIGFyZSBzdGF0aWMgc28gSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgdGhlbS4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCwgd2hpY2ggYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcmUgdGhlIGAqX25ldF9pbml0YCBmdW5jdGlvbnMuIFRob3NlIGdldCBjYWxsZWQgd2hlbiBhIG5ldyBuZXR3b3JrIG5hbWVzcGFjZSBpcyBjcmVhdGVkLiBGdW5jdGlvbnMgbGlrZSBgc3lzY3RsX2NvcmVfbmV0X2luaXRgLCBgaXB2NF9zeXNjdGxfaW5pdF9uZXRgLCBgeGZybTRfbmV0X3N5c2N0bF9pbml0YCwgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAsIGBuZl9sd3R1bm5lbF9uZXRfaW5pdGAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYW5kIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIHN0YW5kIG91dC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBvZnRlbiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgaXMgY2FsbGVkIOKAkyBsaWtlbHkgZHVyaW5nIG5ldG5zIGNyZWF0aW9uLiBTbywgZnV6emluZyB0aGUgbmV0bnMgY3JlYXRpb24gcGF0aCBpcyB0aGUgd2F5IHRvIGdvIGhlcmUuIExldCdzIHNlZS4uLiB0aGV5J3ZlIGNoYW5nZWQgYWxsIHRoZXNlIGAqX25ldF9pbml0YCBmdW5jdGlvbnM6IGBzeXNjdGxfY29yZV9uZXRfaW5pdGAsIGBpcHY0X3N5c2N0bF9pbml0X25ldGAsIGB4ZnJtNF9uZXRfc3lzY3RsX2luaXRgLCBgeGZybTZfbmV0X3N5c2N0bF9pbml0YCwgYG5mX2x3dHVubmVsX25ldF9pbml0YCwgYHNtY19zeXNjdGxfbmV0X2luaXRgLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAuIE9rYXksIGFuZCBhbHNvIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCAod2hpY2ggSSBjYW4ndCBjYWxsIGRpcmVjdGx5KSBhbmQgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludC4gU28gdGhlIG1haW4gb25lcyB0byBsb29rIGF0IGFyZSBgKl9uZXRfaW5pdGAuXG5cbkxldCBtZSBzZWUuLi4gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgICppcyogZXhwb3J0ZWQgZnJvbSBgbmV0L3N5c2N0bF9uZXQuY2AuIEkgbmVlZCB0byBkaWcgaW50byBpdHMgaW1wbGVtZW50YXRpb24uIE9rYXksIGxldCdzIGxvb2sgYXQgYG5ldC9zeXNjdGxfbmV0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozMzo0MC4xNzE2ODI2NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NjQxMTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zeXNjdGxfbmV0LmM9MTYzPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zeXNjdGxfbmV0LmMtMTczLX1cXG5uZXQvc3lzY3RsX25ldC5jOjE3NDpFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KTtcXG5uZXQvc3lzY3RsX25ldC5jLTE3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzM6NDIuMTY4MTAwODMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyOTEyNjAxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGFuZCBSZWxhdGVkIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCAqaXMqIGV4cG9ydGVkIOKAkyBnb29kLiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgSSBuZWVkIGBDT05GSUdfU1lTQ1RMYCwgYENPTkZJR19ORVRgLCBhbmQgYENPTkZJR19ORVRfTlNgLiBBbmQsIGRlcGVuZGluZyBvbiB0aGUgc3Vic3lzdGVtcywgYENPTkZJR19TTUNgLCBgQ09ORklHX1hGUk1gLCBgQ09ORklHX1VOSVhgLCBgQ09ORklHX1ZTT0NLRVRTYCwgYW5kIGBDT05GSUdfTFdUVU5ORUxgIGFsc28gY29tZSBpbnRvIHBsYXkuXG5cbkxldCBtZSBqdXN0IGxpc3QgdGhvc2Ugb3V0IHRvIGhhdmUgdGhlbSBjbGVhcmx5OlxuKiAgIGBORVRfTlNgXG4qICAgYFNZU0NUTGBcbiogICBgU01DYFxuKiAgIGBYRlJNYFxuKiAgIGBWU09DS0VUU2BcblxuTm93LCBpcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgZnVydGhlciBhbmFseXNpcz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGNhbGxlZCB3aGVuZXZlciBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGNlbnRyYWwgdG8gcmVnaXN0ZXJpbmcgc3lzY3RsIGVudHJpZXMgZm9yIGVhY2ggbmV0d29yayBzdWJzeXN0ZW0uIEV4Y2VsbGVudCBmb2N1cy5cblxuQmVzaWRlcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGxldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW1wb3J0YW50LCBhbmQgdGhlc2Ugb3RoZXIgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWZ1bCBpbiB0aGUgbmV4dCByb3VuZDogYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgc21jX3N5c2N0bF9uZXRfaW5pdGAuXG5cbk5leHQsIEkgc2hvdWxkIGNoZWNrIGBuZXQvc3lzY3RsX25ldC5jYCB0byBzZWUgaWYgSSBjYW4gZmluZCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc2FmZSBzeXNjdGwgc3lzdGVtIGlzIGVuc3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDUzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjU0LjQ1OTM2MzAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjczMzg2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5zdXJlX3NhZmVfbmV0X3N5c2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3lzY3RsX25ldC5jPTk1PV9faW5pdCBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc3lzY3RsX25ldC5jLTEyMi0gKi9cXG5uZXQvc3lzY3RsX25ldC5jOjEyMzpzdGF0aWMgaW50IGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxcbm5ldC9zeXNjdGxfbmV0LmMtMTI0LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvc3lzY3RsX25ldC5jPTE2Mz1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc3lzY3RsX25ldC5jLTE2OC1cXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxubmV0L3N5c2N0bF9uZXQuYzoxNjk6XFx0XFx0aWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpXFxubmV0L3N5c2N0bF9uZXQuYy0xNzAtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjU2LjA4NjcwODc2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTE5NjQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBOZXRucyBDcmVhdGlvbiBGYWlsdXJlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2F1c2luZyBtZSB0byByZS1ldmFsdWF0ZSBob3cgd2UgaGFuZGxlIG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCDigJMgaXQncyBub3cgcmV0dXJuaW5nIGFuIGVycm9yLCB3aGljaCwgaW4gdHVybiwgY2F1c2VzIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byByZXR1cm4gTlVMTC4gVGhhdCdzIGEgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0bnMgY3JlYXRpb24gYXJlIGNvbmNlcm5pbmcuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlcyBpZiBhbnkgc3lzY3RscyBhcmUgbWlzY29uZmlndXJlZCBvciB2aW9sYXRlIG91ciBzYWZldHkgcnVsZXMsIGFuZCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzY3RsIHRhYmxlIGR1cGxpY2F0aW9uLlxuXG5NeSBmb2N1cyBpcyBzaGlmdGluZyB0byBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCwgb2J2aW91c2x5LCBidXQgYWxzbyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3lzY3RsIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBpbmNsdWRpbmcgYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHhmcm00X25ldF9zeXNjdGxfaW5pdGAsIGB4ZnJtNl9uZXRfc3lzY3RsX2luaXRgLCBgbmZfbHd0dW5uZWxfbmV0X2luaXRgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyYC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGhvb2tzIGludG8gdGhlIG5ldCBuYW1lc3BhY2UncyBzeXNjdGwgc2V0dXAuXG5cblRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIHdoZXRoZXIgYHN5c2N0bF9jb3JlX25ldF9pbml0YCBpcyBzdGF0aWMgb3IgZ2xvYmFsLCBzbyBJIGNhbiBlc3RhYmxpc2ggaG93IGZhciByZWFjaGluZyBpdHMgYWZmZWN0cy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBtaWdodCBsZWFkIHRvIGFuIGVhcmx5IGV4aXQgZHVyaW5nIG5ldG5zIGNyZWF0aW9uIGR1ZSB0byBhIE5VTEwgcmV0dXJuIGZyb20gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjYWxsIHN0YWNrLCBhbmQgSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBhbmFseXplIHRoZSBlcnJvciBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MDEuNzc4Njc2MTExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjA5NzcxMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY3RsX2NvcmVfbmV0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NjgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTczOS1cXHR9LFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjc0MDpcXHQvKiBzeXNjdGxfY29yZV9uZXRfaW5pdCgpIHdpbGwgc2V0IHRoZSB2YWx1ZXMgYWZ0ZXIgdGhpc1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTc0MS1cXHQgKiB0byByZWFkb25seSBpbiBuZXR3b3JrIG5hbWVzcGFjZXNcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTc5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqbmV0bnNfY29yZV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODExLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjgxMjpzdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTgxMy17XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz04NTA9c3RhdGljIF9fbmV0X2luaXRkYXRhIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBzeXNjdGxfY29yZV9vcHMgPSB7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODUxOlxcdC5pbml0ID0gc3lzY3RsX2NvcmVfbmV0X2luaXQsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODUyLVxcdC5leGl0ID0gc3lzY3RsX2NvcmVfbmV0X2V4aXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjAzLjE5OTY1NzMwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzI3NjMwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKlN0YXRpYyBGdW5jdGlvbnMgaW4gRm9jdXNTeW1ib2xzOiBBIFF1aWNrIFJldmlldyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBUaGUgZ29hbCBpcyB0byBrZWVwIGl0IGNsZWFuLCBmb2N1c2VkLCBhbmQgaWRlYWxseSwgYXZvaWQgaW5jbHVkaW5nIHN0YXRpYyBmdW5jdGlvbnMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlbid0IGV4dGVybmFsbHkgdmlzaWJsZSwgc28gaW5jbHVkaW5nIHRoZW0gZG9lc24ndCByZWFsbHkgc2VydmUgYSBwdXJwb3NlIGluIGEgc3ltYm9sIHRhYmxlLCBhbmQgY291bGQgbGVhZCB0byB1bm5lY2Vzc2FyeSBibG9hdC5cblxuQnV0IHRoZW4gSSBzZWUgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJdCdzIGV4cG9ydGVkLCB3aGljaCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhpcyBcIm5vIHN0YXRpY3NcIiBhcHByb2FjaC4gSXQncyAqc3VwcG9zZWQqIHRvIGJlIGluIHRoaXMgdGhpbmcsIGJlY2F1c2UgaXQncyBub24tc3RhdGljIGFuZCB2aXNpYmxlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLlxuXG5Ob3csIHdoYXQgYWJvdXQgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYD8gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaXRzIGF0dHJpYnV0ZXMuIElzIHRoYXQgc3RhdGljLCB0b28/IElmIHNvLCB3ZSdyZSBjb25zaXN0ZW50OyBpZiBub3QsIHRoZXJlJ3MgYW5vdGhlciBwb2ludCB0byBjb25zaWRlciBpbiBtYWtpbmcgYSBjaGFuZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBpbiBlYWNoIGNhdGVnb3J5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDowNi43NzI0MjMyMTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTMzODU5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM4MDY9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTAtXFx0bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XFxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTE6XFx0aWYgKHVuaXhfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTItXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4Lmg9Mzc9bG9uZyB1bml4X291dHFfbGVuKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmgtNDAtI2lmZGVmIENPTkZJR19TWVNDVExcXG5uZXQvdW5peC9hZl91bml4Lmg6NDE6aW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCk7XFxubmV0L3VuaXgvYWZfdW5peC5oLTQyLXZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xcbm5ldC91bml4L2FmX3VuaXguaC00My0jZWxzZVxcbm5ldC91bml4L2FmX3VuaXguaDo0NDpzdGF0aWMgaW5saW5lIGludCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvYWZfdW5peC5oLTQ1LXtcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozOTppbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDowOC4yNjU4MTU5ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NzEzOTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTeXNjdGwgUmVnaXN0cmF0aW9uKipcblxuSG1tLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGlzbid0IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBwcm9tcHRzIGEgcXVlc3Rpb24uIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgYW5hbG9nb3VzIGluIHRoZSBgdnNvY2tgIHN1YnN5c3RlbS4gV2hhdCdzIHRoZSBzY29wZSBvZiB0aGUgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24/IElzIGl0IGFsc28gbm9uLXN0YXRpYywgb3IgaXMgaXQgaGFuZGxlZCBkaWZmZXJlbnRseT8gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHN5c2N0bCBpbnRlcmZhY2VzIGFyZSBleHBvc2VkIGFuZCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlZmFjdG9yaW5nIG9yIG1vZHVsYXJpdHkgY29uY2VybnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBpcyBjb25zaXN0ZW50IGFjcm9zcyB0aGVzZSByZWxhdGVkIGFyZWFzLiBMZXQgbWUgbG9vayBpbnRvIHRoYXQgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MTEuOTIyOTU4NTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5NzkzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX3N5c2N0bF9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdnNvY2tfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTQyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTQzOnN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTQ0LXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTkxPXN0YXRpYyBfX25ldF9pbml0IGludCB2c29ja19zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTQtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5OTU6XFx0aWYgKHZzb2NrX3N5c2N0bF9yZWdpc3RlcihuZXQpKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTk2LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDoxMy4zNzI3NTYwOTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMjE3MDcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFN0YXRpYyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgb3IgZGF0YSBzdHJ1Y3R1cmUgaXMgZnVuZGFtZW50YWxseSAqc3RhdGljKi4gVGhlcmUncyBhIGNlcnRhaW4gaW1tb2JpbGl0eSBvciBmaXhlZCBuYXR1cmUgdGhhdCdzIGltbWVkaWF0ZWx5IHN0cmlraW5nLiBUaGF0IGluaXRpYWwgYXNzZXNzbWVudCBoZWxwcyBtZSBmb2N1cy4gSSdtIGFscmVhZHkgbWVudGFsbHkgY2hhcnRpbmcgb3V0IHdoZXJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIFwic3RhdGljXCIgY2hhcmFjdGVyaXN0aWMuIFdoYXQgbGltaXRhdGlvbnMgZG9lcyBpdCBpbXBvc2U/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5IG9yIGR5bmFtaWMgY29uZmlndXJhdGlvbj8gSXMgaXQgdHJ1bHkgc3RhdGljIGFjcm9zcyBpdHMgbGlmZWN5Y2xlLCBvciBkb2VzIGl0IHVuZGVyZ28gc29tZSBpbml0aWFsaXphdGlvbiB0aGF0IGNvdWxkIGludHJvZHVjZSB2YXJpYWJpbGl0eT9cblxuTm93LCB0aGUgbWVudGlvbiBvZiBgc21jX3N5c2N0bF9uZXRfaW5pdGAuLi4gbXkgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHR1cm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MTcuODg0OTI5MjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NjMwNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19zeXNjdGxfbmV0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0zNDExPXN0YXRpYyBfX25ldF9pbml0IGludCBzbWNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zNDE0LVxcbm5ldC9zbWMvYWZfc21jLmM6MzQxNTpcXHRyYyA9IHNtY19zeXNjdGxfbmV0X2luaXQobmV0KTtcXG5uZXQvc21jL2FmX3NtYy5jLTM0MTYtXFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jLTIxMy1cXG5uZXQvc21jL3NtY19zeXNjdGwuYzoyMTQ6aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjE1LXtcXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5oLTE3LVxcbm5ldC9zbWMvc21jX3N5c2N0bC5oOjE4OmludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvc21jL3NtY19zeXNjdGwuaC0xOS12b2lkIF9fbmV0X2V4aXQgc21jX3N5c2N0bF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpO1xcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmgtMjItXFxubmV0L3NtYy9zbWNfc3lzY3RsLmg6MjM6c3RhdGljIGlubGluZSBpbnQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NtYy9zbWNfc3lzY3RsLmgtMjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDoxOS4zMjE1NjQyMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5NDMyMzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOb24tU3RhdGljIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlLCBhbmQgaXQncyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYy4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBkeW5hbWljLCBzb21ldGhpbmcgdGhhdCdzIGNoYW5naW5nIHVuZGVyZm9vdCwgYW5kIHRoYXQgaGFzIGFsbCBzb3J0cyBvZiBpbXBsaWNhdGlvbnMgZm9yIHRocmVhZCBzYWZldHksIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBvdmVyYWxsIHByZWRpY3RhYmlsaXR5LiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuIE15IGNvbmNlcm4gaXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIG5vdCBmaXhlZCwgdGhhdCB0aGVyZSBpcyBjb25zdGFudCBjaGFuZ2Ugd2l0aGluIHRoZSBzdHJ1Y3R1cmUuXG5cblRoZW4sIHRoZSBtaW5kIGp1bXBzIHRvIGEgc3BlY2lmaWMgcG9pbnQ6IFdoYXQgYWJvdXQgYG5mX2x3dHVubmVsX25ldF9pbml0YD8gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIGFyZWEsIGFuZCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGNvbnNpZGVyIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhhdCBmdW5jdGlvbi4gV2hhdCBpcyBpdCByZXNwb25zaWJsZSBmb3I/IERvZXMgaXQgaG9sZCB0aGUga2V5IHRvIHRoZSBkeW5hbWljIGJlaGF2aW9yIEknbSBzZWVpbmc/IElzIHRoZXJlIHNvbWUgaW5pdGlhbGl6YXRpb24gd29yayBiZWluZyBkb25lIHRoZXJlIHRoYXQncyBjcml0aWNhbCB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcz8gSXQncyB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCB0byBleGFtaW5lIGZyb20gaGVyZS4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBub24tc3RhdGljIHN0cnVjdHVyZSwgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW1wbGljYXRpb25zIG9mIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA3MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjI1LjUxNTg4OTMxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MTE5ODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9sd3R1bm5lbF9uZXRfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMtNjYtXFxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jOjY3OnN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jLTY4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYz0xMDY9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZl9sd3R1bm5lbF9uZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYzoxMDc6XFx0LmluaXQgPSBuZl9sd3R1bm5lbF9uZXRfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMtMTA4LVxcdC5leGl0ID0gbmZfbHd0dW5uZWxfbmV0X2V4aXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjI2Ljk3NzA5NDEyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM4NjQwNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgS2V5IFF1ZXN0aW9uKipcblxuUmlnaHQsIHRoaXMgc2VlbXMgdG8gYmUgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBiZWdzIHRoZSBxdWVzdGlvbjogV2hhdCdzIHRoZSBjb250ZXh0PyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZSBgeGZybTRfbmV0X3N5c2N0bF9pbml0YD8gSSdtIHRyeWluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBhcmVhIG9mIGludGVyZXN0IGhlcmUsIGFuZCB0aGF0IHBhcnRpY3VsYXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYWx3YXlzIGp1bXBzIG91dCBhdCBtZSBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBTdGF0aWMgYW55dGhpbmcgY291bGQgYmUgYSBjb25maWcgb3B0aW9uLCBvciBtYXliZSBzb21ldGhpbmcgc3RhdGljYWxseSBib3VuZCBhdCBidWlsZHRpbWUgYW5kIEknbSB0cnlpbmcgdG8gYXNjZXJ0YWluIHdoYXQgdGhhdCBcInN0YXRpY25lc3NcIiBhY3R1YWxseSBpbXBsaWVzLiBUaGUgcmVsYXRpb25zaGlwIHRvIGB4ZnJtNF9uZXRfc3lzY3RsX2luaXRgIGlzIG15IHByaW1hcnkgdGhvdWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDozMS42MTU3MzY3OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE2ODI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfbmV0X3N5c2N0bF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTE1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0xNjctXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM6MTY4OnN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTE2OS17XFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYz0xOTU9c3RhdGljIF9fbmV0X2V4aXQgdm9pZCB4ZnJtNF9uZXRfc3lzY3RsX2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMjA3LSNlbHNlIC8qIENPTkZJR19TWVNDVEwgKi9cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzoyMDg6c3RhdGljIGlubGluZSBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0yMDkte1xcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9MjE4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0yMjctXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM6MjI4OlxcdHJldCA9IHhmcm00X25ldF9zeXNjdGxfaW5pdChuZXQpO1xcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTIyOS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDozMy4wNjc0MjQ5NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NDM4MjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFzc2Vzc21lbnQgb2YgYSBTdGF0aWMgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHNpdHVhdGlvbiBpcyBlc3NlbnRpYWxseSBzdGF0aWMuIE5vdGhpbmcgZHluYW1pYy4gSXQncyBhIHNuYXBzaG90LCBhIGZpeGVkIHN0YXRlLiBUaGVuLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3Q6IGBpcHY0X3N5c2N0bF9pbml0X25ldGAuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjb250ZXh0LiBDb3VsZCB0aGUgY3VycmVudCBzdGF0ZSByZWxhdGUgdG8gb3IgYmUgaW5mbHVlbmNlZCBieSBob3cgdGhlIElQdjQgc3lzY3RsIHNldHRpbmdzIGFyZSBpbml0aWFsaXplZCBhdCB0aGUgbmV0d29yayBsZXZlbD8gSSdtIGN1cmlvdXMgaWYgdGhpcyBzdGF0aWMgY2hhcmFjdGVyaXN0aWMgaXMgYSBkaXJlY3QgcmVzdWx0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzLCBhIHN0YXRpYyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYmVpbmcgcHJlc2VydmVkLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBvbiB0aGF0IGZyb250LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjM3Ljk0MTgwOTg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc0Mzg4MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRfc3lzY3RsX2luaXRfbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTE2NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmlwdjRfbmV0X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNjg1LVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjE2ODY6c3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNjg3LXtcXG4tLVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTE3MzA9c3RhdGljIF9fbmV0X2luaXRkYXRhIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHY0X3N5c2N0bF9vcHMgPSB7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTczMTpcXHQuaW5pdCA9IGlwdjRfc3lzY3RsX2luaXRfbmV0LFxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTE3MzItXFx0LmV4aXQgPSBpcHY0X3N5c2N0bF9leGl0X25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MzkuNDE2MjAxNzc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjYyMjgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgU3lzY3RsIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgcHJldHR5IHN0YXRpYyBvdmVyYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRvaW5nIHNvbWV0aGluZyBkeW5hbWljLiBGcm9tIHRoZSBpbml0aWFsIHNjYW4sIGl0IGxvb2tzIGxpa2UgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHNtY19zeXNjdGxfbmV0X2luaXRgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbiBzaW5jZSB0aGV5J3JlIHRoZSBub24tc3RhdGljIG9uZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkLCBvciBwZXJoYXBzIGV2ZW4gbm9uLXN0YXRpYywgZnVuY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gYGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXJgLCBgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXBgLCBhbmQgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAgYXJlIGFsbCBzdGF0aWMsIHNvIHRoZXkgYXJlIG5vdCBhcyBjcml0aWNhbCBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBpbiBgbmV0L3N5c2N0bF9uZXQuY2AuIFllcywgaXQncyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB3aGljaCBtYWtlcyBpdCBhIGxpa2VseSBrZXkgcG9pbnQgb2YgZW50cnkuXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN0YXRpYyBmdW5jdGlvbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgaW4gYG5ldC9zeXNjdGxfbmV0LmNgIGlzIGludm9sdmVkIGhlcmUsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLiBSaWdodCwgaXQncyBjYWxsZWQgYnkgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLlxuXG5TbywgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIHNlZW1zIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlLiBJZiBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzLCB0aGVuIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSB3YXkgdG8gZG8gaXQsIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGNhbGxlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBTbywgY29tbWFuZHMgbGlrZSBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCB3b3VsZCBiZSBpZGVhbCBmb3IgdHJpZ2dlcmluZyB0aGlzLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoYXQgY29uZmlncyBuZWVkIHRvIGJlIGVuYWJsZWQ6IGBORVRfTlNgLCBgU1lTQ1RMYCwgYFVOSVhgLCBhbmQgYFNNQ2AuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIG1ha2Ugc3VyZSBgTkVUX05TYCBpcyBhIHZhbGlkIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6NDcuNDQyNDMyMjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA3MDAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9OU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQ1MT1jb25maWcgUElEX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ1OC1cXG5pbml0L0tjb25maWc6MTQ1OTpjb25maWcgTkVUX05TXFxuaW5pdC9LY29uZmlnLTE0NjAtXFx0Ym9vbCBcXFwiTmV0d29yayBuYW1lc3BhY2VcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuLS1cXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMS1cXG5uZXQvS2NvbmZpZy5kZWJ1ZzoxMjpjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxubmV0L0tjb25maWcuZGVidWctMTMtXFx0Ym9vbCBcXFwiRW5hYmxlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIHJlZmNvdW50IHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25zaC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfTlNIXFxubmV0L25zaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgU2VydmljZSBIZWFkZXIgKE5TSCkgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjQ4Ljg5MzEzODk3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQyMTMwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgXHUwMDI2IFZlcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBpdGVtcyBoZXJlLiBJIHNlZSB0aGF0IGBORVRfTlNgIGlzIGEgY29uZmlnIG9wdGlvbiwgZGVmaW5pdGVseS4gQW5kIGBTWVNDVExgLCB5ZXAsIHRoYXQncyBhbm90aGVyIG9uZS4gV2UgY2FuIGFkZCBgVU5JWGAgYW5kIGBTTUNgIHRvIHRoZSBsaXN0LiBOb3csIHNpbmNlIGBTTUNgIGlzIGEgcmVsYXRpdmVseSBjb21wbGV4IG9wdGlvbiwgSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGl0IGhhcyBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMgb3IgcmVxdWlyZW1lbnRzLiBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjMzLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6NTMuODM1MjcyMDY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxMDQwMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZz0xNDY9Y29uZmlnIEkyQ19TUElfU01DMV9VQ09ERV9QQVRDSFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZy0xNTAtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZzoxNTE6Y29uZmlnIFNNQ19VQ09ERV9QQVRDSFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlNNQyByZWxvY2F0aW9uIHBhdGNoXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfU01TQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc6MjI6Y29uZmlnIFNNQzkxWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiU01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6NTUuMzI2MzE3MzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjI4MTIxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipDb25maWd1cmF0aW9uIERlZXAgRGl2ZTogU01DIFx1MDAyNiBWU09DS0VUUyoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCdzIHJpZ2h0LiBUaGUgYFNNQ2AgZW50cnksIHRoYXQncyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBlbGVtZW50LiBHb3QgaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpdm90IGFuZCBkZWx2ZSBpbnRvIHRoZSBgVlNPQ0tFVFNgIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGhvdyB0aG9zZSBhc3BlY3RzIGFyZSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjU5LjU0OTEzMTk2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NDgwMDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVlNPQ0tFVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnLTUtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjAxLjAyMzkzNzM4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEyMzE5OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipPa2F5LCBMZXQncyBHZXQgVGhpcyBTdHJhaWdodCoqXG5cblJpZ2h0LCBzbyBgVlNPQ0tFVFNgIGlzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgZ290IGl0LiBObyBuZWVkIHRvIHNlY29uZC1ndWVzcyB0aGF0LiBOb3csIGxldCdzIHBpdm90IHRvIGBYRlJNYC4gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIGluIHRoaXMgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBhbGwgc3F1YXJlZCBhd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU2MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjAzLjkzNjI2MDAxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDg0Nzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnLTQtI1xcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL0tjb25maWctMTItXFx0Ym9vbFxcbm5ldC94ZnJtL0tjb25maWctMTMtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDpjb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTQyLVxcbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXFxubmV0L3hmcm0vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTUwLVxcbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbm5ldC94ZnJtL0tjb25maWctNTItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTcxLVxcbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xcbm5ldC94ZnJtL0tjb25maWctNzMtXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1xcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxcbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTkyLSMgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1BcXG5uZXQveGZybS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwNS1cXG5uZXQveGZybS9LY29uZmlnOjEwNjpjb25maWcgWEZSTV9JUENPTVBcXG5uZXQveGZybS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL0tjb25maWctMTU4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MDUuOTk3MTEyMTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjgyODUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlhGUk0gQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgd2F5IHRvIGdvIGZvciBlbmFibGluZyBYRlJNLiBUaGF0IG1ha2VzIHNlbnNlLCB0aGF0J3MgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzdGFydGluZyBwb2ludCBmb3IgYSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24uIE5vdywgYmVmb3JlIEkganVtcCB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBvbiB0aGUgYExXVFVOTkVMYCBzdXBwb3J0LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgdHVubmVscyBhcmUgd29ya2luZyBhcyBleHBlY3RlZCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjA5LjQyNTQwMDA0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDI4MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFdUVU5ORUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDQzPXNvdXJjZSBcXFwibmV0L2lmZS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQ0NC1cXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXFxubmV0L0tjb25maWctNDQ2LVxcdGJvb2wgXFxcIk5ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZy00NTItXFxubmV0L0tjb25maWc6NDUzOmNvbmZpZyBMV1RVTk5FTF9CUEZcXG5uZXQvS2NvbmZpZy00NTQtXFx0Ym9vbCBcXFwiRXhlY3V0ZSBCUEYgcHJvZ3JhbSBhcyByb3V0ZSBuZXh0aG9wIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MTAuOTA1Njg1NzdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxOTgyNjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgeWVwLCB0aGF0IGxvb2tzIGxpa2UgYW4gYExXVFVOTkVMYCBjb25maWd1cmF0aW9uLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gTm93LCBnaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgbWlnaHQgYmUgaW52b2x2ZWQuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBgTkZfQ09OTlRSQUNLYCBpcyBiZWhhdmluZyBpbiByZWxhdGlvbiB0byB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGZsb3dpbmcgYXMgSSBleHBlY3QgaXQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzUzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MTUuMjI1NTE1MTExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3NzkxMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yNj1lbmRpZiAjIE5GX1RBQkxFU19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Mjg6Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJJUHY0L0lQVjYgYnJpZGdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MTcuMzYzMzEzNDYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTQ1OTg2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBORl9DT05OVFJBQ0tgLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCBleGFjdGx5IHRoYXQgY29uZmlnIG9wdGlvbiBpcyBmb3IuIEl0J3MgYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBmaWx0ZXJpbmcgaW5mcmFzdHJ1Y3R1cmUsIHRoYXQgbXVjaCBJJ20gc3VyZSBvZi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBTQ1RQYCBoYW5kbGluZyB0byBzZWUgaWYgdGhhdCBpbnRlcmFjdHMgd2l0aCBvciBpcyBhZmZlY3RlZCBieSB0aGUgYE5GX0NPTk5UUkFDS2Agc2V0dXAuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgYXMgaW50ZW5kZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MjEuNzc3OTE0NDk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1MjY4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TQ1RQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL0tjb25maWctNS1cXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXFxubmV0L3NjdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MjQuMDgzMTkwMzY2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDY4OTM5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFN5c2N0bCBSZWdpc3RyYXRpb24gZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgSVBfU0NUUGAganVtcHMgb3V0IGFzIG9uZSBvZiB0aGUgY29uZmlncyBpbnZvbHZlZC4gIExldCdzIHNlZSwgdGhlIGZ1bGwgbGlzdCBpczogYE5FVF9OU2AsIGBTWVNDVExgLCBgVU5JWGAsIGBTTUNgLCBgVlNPQ0tFVFNgLCBgWEZSTV9VU0VSYCwgYExXVFVOTkVMYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgSVBfU0NUUGAuICBUaGF0IGdpdmVzIHVzIGEgc2NvcGUuXG5cbkknbSBrZXlpbmcgaW4gb24gYSBmZXcgc3ltYm9scywgc3BlY2lmaWNhbGx5IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYW5kIGBzbWNfc3lzY3RsX25ldF9pbml0YC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSB1c2VkIGFuZCB3aGVyZSB0aGV5J3JlIGRlZmluZWQuIFRoZSBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBJIG5vdGljZSwgaXMgY29uZGl0aW9uYWxseSBzdGF0aWMgaW5saW5lLCBkZXBlbmRpbmcgb24gd2hldGhlciBgQ09ORklHX1NZU0NUTGAgaXMgZGVmaW5lZC4gQnV0IGV2ZW4gd2hlbiBpdCAqaXMqIHNldCwgdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBub24tc3RhdGljLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgc21jX3N5c2N0bF9uZXRfaW5pdGAgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBhcmUgYWxzbyBub24tc3RhdGljOyB5ZXMsIGBzbWNfc3lzY3RsX25ldF9pbml0YCBpcyBkZWZpbmVkIGluIGBuZXQvc21jL3NtY19zeXNjdGwuY2AgYW5kIGlzIG5vbi1zdGF0aWMsIHNvIGJvdGggYXJlIG5vbi1zdGF0aWMuXG5cbk5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbm9uLXN0YXRpYyBhbmQgd2UgbmVlZCB0byBjb25zaWRlcj8gSSBzZWUgYG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyYCBpcyBleHBvcnRlZCwgYnV0IGl0IHNlZW1zIHRoYXQgZnVuY3Rpb24ganVzdCBjaGFuZ2VzIGEgYGN0bF90YWJsZWAgdG8gYGNvbnN0YCBhbmQgZG9lc24ndCBhZmZlY3QgbmV0bnMgY3JlYXRpb24uIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0YWJsZXMgYXJlIGRlY2xhcmVkOlxuYGBgY1xuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuYGBgXG5hbmRcbmBgYGNcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuYGBgXG5JdCBsb29rcyBsaWtlIGl0IGlzbid0IGR1cGxpY2F0aW5nIHRoZSB0YWJsZSBmb3IgbHd0dW5uZWwgYmVjYXVzZSBsd3R1bm5lbCBzeXNjdGxzIGRvbid0IGhhdmUgcGVyLW5ldG5zIGRhdGEuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLlxuXG5MZXQncyBzZWU6IGBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVgIGhhcyBgLmRhdGEgPSBOVUxMYC4gIFNvIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB3aWxsIGNoZWNrIHRoYXQsIGFuZCBzaW5jZSBpdCBpcyBgTlVMTGAsIGl0IHNob3VsZCBwYXNzIHRoaXMgY2hlY2s6XG5gYGBjXG5cdFx0aWYgKGVudC1cdTAwM2VkYXRhID09IE5VTEwpXG5cdFx0XHRjb250aW51ZTtcbmBgYFxuT2theSwgc28gdGhhdCdzIHNhZmUuIFdoYXQgYWJvdXQgb3RoZXIgdGFibGVzP1xuXG5JIHNlZSB0aGF0IGBuZl9jdF9zeXNjdGxfdGFibGVgLCBgeGZybV90YWJsZWAsIGBpcHY2X3RhYmxlX3RlbXBsYXRlYCwgYGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVgLCBgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlYCwgYW5kIGBjdGxfZm9yd2FyZF9lbnRyeWAgYXJlIGFsbCBqdXN0IG1hZGUgYGNvbnN0YC5cblxuU28sIHRoZSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgc3lzY3RsX2NvcmVfbmV0X2luaXRgLCBgaXB2NF9zeXNjdGxfaW5pdF9uZXRgLCBgeGZybTRfbmV0X3N5c2N0bF9pbml0YCwgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAsIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCwgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YC5cblxuTm93LCB0aGUgbWFpbiBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGFuZCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLlxuXG5MZXQncyBjb25maXJtOiAgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIHRoZSBrZXkgQVBJIGZvciByZWdpc3RlcmluZyBuZXR3b3JrIHN5c2N0bHMuICBUaGF0IG1ha2VzIHRoaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbiBuYW1lOiB5ZXMsIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YC4gSSdtIGdvaW5nIHRvIGZ1enogdGhpcyFcblxuTm93LCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqcmVxdWlyZWQqPyBJJ3ZlIGdvdCBgQ09ORklHX1NZU0NUTGAsIGBDT05GSUdfTkVUX05TYCwgYENPTkZJR19ORVRgLCBgQ09ORklHX1VOSVhgLCBgQ09ORklHX1NNQ2AsIGBDT05GSUdfVlNPQ0tFVFNgLCBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfTFdUVU5ORUxgLCBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGFuZCBgQ09ORklHX0lQX1NDVFBgLiBPa2F5LCBsZXQncyBkb2N1bWVudCBhbGwgb2YgdGhpcyBmb3IgdGhlIGZ1enplci5cblxuYGBganNvblxue1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6XG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5MSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjQyLjE1MjEzMjE0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDI4MzczMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlVOSVhcIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiTFdUVU5ORUxcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX25ldF9zeXNjdGxfc3pcIixcbiAgICBcInNtY19zeXNjdGxfbmV0X2luaXRcIixcbiAgICBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHJlZ2lzdHJhdGlvbiBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLCBjaGFuZ2luZyBob3cgc3lzY3RsIHRhYmxlcyBhcmUgZHVwbGljYXRlZCBhbmQgdmFsaWRhdGVkLiBJdCBpbnRyb2R1Y2VzIGEgc3RyaWN0IGNoZWNrIGluIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB0aGF0IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBtb2RpZnlpbmcgcGVybWlzc2lvbnMsIHdoaWNoIGNhbiBjYXVzZSBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiB0byBmYWlsIGlmIHN5c2N0bHMgYXJlIG1pc2NvbmZpZ3VyZWQuIEZ1enppbmcgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlVOSVhcIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiTFdUVU5ORUxcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX25ldF9zeXNjdGxfc3pcIixcbiAgICBcInNtY19zeXNjdGxfbmV0X2luaXRcIixcbiAgICBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHJlZ2lzdHJhdGlvbiBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLCBjaGFuZ2luZyBob3cgc3lzY3RsIHRhYmxlcyBhcmUgZHVwbGljYXRlZCBhbmQgdmFsaWRhdGVkLiBJdCBpbnRyb2R1Y2VzIGEgc3RyaWN0IGNoZWNrIGluIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB0aGF0IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBtb2RpZnlpbmcgcGVybWlzc2lvbnMsIHdoaWNoIGNhbiBjYXVzZSBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiB0byBmYWlsIGlmIHN5c2N0bHMgYXJlIG1pc2NvbmZpZ3VyZWQuIEZ1enppbmcgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjQyLjI3NjQyMzM3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMTQwNzQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNTo0Mi4yNzY5MDAyMDJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQxMTM1OTMyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAzZjI1YjI1MzVmODE2NDIzYmU4N2ZiM2U0Y2YxNjRhZmRjM2RiZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNDozMzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuaW5kZXggNTAxYWYxOTk5ZmU4My4uZTVlZTY3M2I5ZmNmOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5AQCAtNTI1LDEyICs1MjUsMTMgQEAgc3RydWN0IGN0bF90YWJsZTtcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCk7XG4gc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSk7XG4rXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHRcdFx0c2l6ZV90IHRhYmxlX3NpemUpO1xuIHZvaWQgdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcbi1cdGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbitcdGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuaW5kZXggYjUwODYxOGJmYzEyMy4uZWIzNWRhMzU1NmY0YSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG4rKysgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuQEAgLTY3OCw3ICs2NzgsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwicnBzX2RlZmF1bHRfbWFza1wiLFxuQEAgLTc4NywyNiArNzg3LDM4IEBAIHN0YXRpYyBpbnQgX19pbml0IGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKGNoYXIgKnN0cilcbiB9XG4gX19zZXR1cChcImZiX3R1bm5lbHM9XCIsIGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKTtcbiBcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpuZXRuc19jb3JlX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpO1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGJsO1xuK1x0aW50IGk7XG4rXG4rXHR0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRibClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcbitcdFx0aWYgKHRibFtpXS5kYXRhID09IFx1MDAyNnN5c2N0bF93bWVtX21heClcbitcdFx0XHRicmVhaztcbitcbitcdFx0dGJsW2ldLmRhdGEgKz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKVx1MDAyNmluaXRfbmV0O1xuK1x0fVxuK1x0Zm9yICg7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICsraSlcbitcdFx0dGJsW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbitcbitcdHJldHVybiB0Ymw7XG4rfVxuK1xuK3N0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpO1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsO1xuIFxuIFx0dGJsID0gbmV0bnNfY29yZV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuLVx0XHR0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGJsID0gbmV0bnNfY29yZV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKHRibCA9PSBOVUxMKVxuIFx0XHRcdGdvdG8gZXJyX2R1cDtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgKytpKSB7XG4tXHRcdFx0aWYgKHRibFtpXS5kYXRhID09IFx1MDAyNnN5c2N0bF93bWVtX21heClcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdHRibFtpXS5kYXRhICs9IChjaGFyICopbmV0IC0gKGNoYXIgKilcdTAwMjZpbml0X25ldDtcbi1cdFx0fVxuLVx0XHRmb3IgKDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgKytpKVxuLVx0XHRcdHRibFtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNlY29yZS5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2NvcmVcIiwgdGJsLCB0YWJsZV9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmNcbmluZGV4IDQ3ZGVkMGY2MDdkNGIuLmE5MGJlNTdjNjNiZTEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmNcbisrKyBiL25ldC9pcHY0L2RldmluZXQuY1xuQEAgLTI3OTYsNyArMjc5Niw3IEBAIHN0YXRpYyB2b2lkIGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IGluX2RldmljZSAqaWRldilcbiBcdG5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtXHUwMDNlYXJwX3Bhcm1zKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBjdGxfZm9yd2FyZF9lbnRyeVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJpcF9mb3J3YXJkXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aXB2NF9kZXZjb25mLmRhdGFbXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuaW5kZXggY2ExMTgwZGJhMWRlYS4uMmYwMzYzYmNhMmE4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuQEAgLTYyNCw3ICs2MjQsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJ0Y3BfbWF4X3R3X2J1Y2tldHNcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnRjcF9kZWF0aF9yb3cuc3lzY3RsX21heF90d19idWNrZXRzLFxuQEAgLTE2NTQsMzUgKzE2NTQsNDUgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICppcHY0X25ldF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShpcHY0X25ldF90YWJsZSk7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbitcdGludCBpO1xuK1xuK1x0dGFibGUgPSBrbWVtZHVwKGlwdjRfbmV0X3RhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKSB7XG4rXHRcdGlmICh0YWJsZVtpXS5kYXRhKSB7XG4rXHRcdFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xuK1x0XHRcdCAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXRcbitcdFx0XHQgKi9cbitcdFx0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7XG4rXHRcdFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcbitcdFx0XHQgKi9cbitcdFx0XHR0YWJsZVtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4rXHRcdH1cbitcdFx0aWYgKHRhYmxlW2ldLmV4dHJhMiBcdTAwM2U9ICh2b2lkICopXHUwMDI2aW5pdF9uZXQuaXB2NCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHRhYmxlW2ldLmV4dHJhMiBcdTAwM2MgKHZvaWQgKikoXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxuK1x0XHRcdHRhYmxlW2ldLmV4dHJhMiArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXHUwMDI2aW5pdF9uZXQ7XG4rXHR9XG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK3N0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBpcHY0X25ldF90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuLVxuLVx0XHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcbi1cdFx0XHRpZiAodGFibGVbaV0uZGF0YSkge1xuLVx0XHRcdFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xuLVx0XHRcdFx0ICogdGhlIGN1cnJlbnQgc3RydWN0IG5ldFxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0LyogRW50cmllcyB3aXRob3V0IGRhdGEgcG9pbnRlciBhcmUgZ2xvYmFsO1xuLVx0XHRcdFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0dGFibGVbaV0ubW9kZSBcdTAwMjY9IH4wMjIyO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAodGFibGVbaV0uZXh0cmEyIFx1MDAzZT0gKHZvaWQgKilcdTAwMjZpbml0X25ldC5pcHY0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0YWJsZVtpXS5leHRyYTIgXHUwMDNjICh2b2lkICopKFx1MDAyNmluaXRfbmV0LmlwdjQgKyAxKSlcbi1cdFx0XHRcdHRhYmxlW2ldLmV4dHJhMiArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXHUwMDI2aW5pdF9uZXQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2VpcHY0LmlwdjRfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2lwdjRcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuaW5kZXggNThmYWYxZGRkMmIxNS4uYWI3YTAxMDI5ZDQ5MCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG4rKysgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuQEAgLTE0MSw3ICsxNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyB4ZnJtNF9wb2xpY3lfYWZpbmZvID0ge1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCJ4ZnJtNF9nY190aHJlc2hcIixcbiBcdFx0LmRhdGEgICAgICAgICAgID0gXHUwMDI2aW5pdF9uZXQueGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaCxcbkBAIC0xNTEsMTggKzE1MSwzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoeGZybTRfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSxcbitcdFx0XHRHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoO1xuK1xuK1x0cmV0dXJuIHRhYmxlO1xuK31cbitcbitzdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7XG4gXG4gXHR0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHhmcm00X3BvbGljeV90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2lwdjRcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jXG5pbmRleCBlZmIyMzgwN2EwMjYyLi5hOTViMDM1MTgyNGYzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaWNtcC5jXG4rKysgYi9uZXQvaXB2Ni9pY21wLmNcbkBAIC0xMzc0LDcgKzEzNzQsNyBAQCBFWFBPUlRfU1lNQk9MKGljbXB2Nl9lcnJfY29udmVydCk7XG4gc3RhdGljIHUzMiBpY21wdjZfZXJyb3JzX2V4dGVuc2lvbl9tYXNrX2FsbCA9XG4gXHRHRU5NQVNLX1U4KElDTVBfRVJSX0VYVF9DT1VOVCAtIDEsIDApO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJyYXRlbGltaXRcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pY21wdjZfdGltZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uYjgzM2E2NDAwYzk0NCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC02NTU1LDcgKzY1NTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3lzY3RsX3J0Y2FjaGVfZmx1c2goY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9XHRcIm1heF9zaXplXCIsXG4gXHRcdC5kYXRhXHRcdD1cdFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXG5pbmRleCBkMmNkMzNlMjY5OGQ1Li4xYTBhMzZkY2RhYmMxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcbisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXG5AQCAtNjEsNyArNjEsNyBAQCBwcm9jX3J0Nl9tdWx0aXBhdGhfaGFzaF9maWVsZHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgdm9pZCAqYlxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwiYmluZHY2b25seVwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmJpbmR2Nm9ubHksXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuY1xuaW5kZXggM2I3NDk0NzVmNmVkNi4uNWVjMDYzY2I0YWE0MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG4rKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuY1xuQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcInhmcm02X2djX3RocmVzaFwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0Lnhmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2gsXG5AQCAtMTk3LDE4ICsxOTcsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnhmcm02X3BvbGljeV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1xuK1x0dGFibGUgPSBrbWVtZHVwKHhmcm02X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksXG4rXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRhYmxlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDtcbitcbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4rc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyO1xuIFxuIFx0dGFibGUgPSB4ZnJtNl9wb2xpY3lfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuLVx0XHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZih4ZnJtNl9wb2xpY3lfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGFibGUgPSB4ZnJtNl9wb2xpY3lfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDtcbiBcdH1cbiBcbiBcdGhkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcIm5ldC9pcHY2XCIsIHRhYmxlLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuaW5kZXggYmUyOTUzYzdkNzAyZS4uZjRmMmQ4MjE5MmQ1NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5AQCAtNjM5LDcgKzYzOSw3IEBAIGVudW0gbmZfY3Rfc3lzY3RsX2luZGV4IHtcbiBcdE5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuIFx0W05GX1NZU0NUTF9DVF9NQVhdID0ge1xuIFx0XHQucHJvY25hbWVcdD0gXCJuZl9jb25udHJhY2tfbWF4XCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2bmZfY29ubnRyYWNrX21heCxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbmluZGV4IDJkODkwZGQwNGZmODkuLjRlMWVlZjFiYTBmMTUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuQEAgLTU0LDcgKzU0LDcgQEAgaW50IG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTtcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibmZfaG9va3NfbHd0dW5uZWxcIixcbiBcdFx0LmRhdGFcdFx0PSBOVUxMLFxuQEAgLTY2LDggKzY2LDggQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7XG4gXG4gc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7XG4tXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiBcdHRhYmxlID0gbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zeXNjdGwuYyBiL25ldC9zY3RwL3N5c2N0bC5jXG5pbmRleCBmY2E4NDA0ODRlYmY3Li4yYjk0YzIxMTQyN2RlIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc3lzY3RsLmNcbisrKyBiL25ldC9zY3RwL3N5c2N0bC5jXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7XG4gI2RlZmluZSBTQ1RQX1BGX1JFVFJBTlNfSURYICAgIDJcbiAjZGVmaW5lIFNDVFBfUFNfUkVUUkFOU19JRFggICAgM1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc2N0cF9uZXRfdGFibGVbXSA9IHtcbiBcdFtTQ1RQX1JUT19NSU5fSURYXSA9IHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwicnRvX21pblwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnNjdHAucnRvX21pbixcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19zeXNjdGwuYyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5pbmRleCBiMWVmZWQ1NDYyNDM1Li4wOWRhZDQ4MzM3ZjYxIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbisrKyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5AQCAtOTcsNyArOTcsNyBAQCBzdGF0aWMgaW50IHByb2Nfc21jX2hzX2N0cmwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZSAgICAgICA9IFwiYXV0b2Nvcmtpbmdfc2l6ZVwiLFxuIFx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZpbml0X25ldC5zbWMuc3lzY3RsX2F1dG9jb3JraW5nX3NpemUsXG5AQCAtMTk1LDE0ICsxOTUsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XG4gI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi9cbiB9O1xuIFxuLWludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1x0aW50IGk7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRhYmxlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkrKylcbitcdFx0dGFibGVbaV0uZGF0YSArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXHUwMDI2aW5pdF9uZXQ7XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK2ludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4gXHR0YWJsZSA9IHNtY190YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19TTUNfSFNfQ1RSTF9CUEYpXG4gXHRcdHN0cnVjdCBzbWNfaHNfY3RybCAqY3RybDtcbiBcbkBAIC0yMTQsMTIgKzIyOSw5IEBAIGludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIFxuLVx0XHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzbWNfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGFibGUgPSBzbWNfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkrKylcbi1cdFx0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2VzbWMuc21jX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcIm5ldC9zbWNcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmNcbmluZGV4IDE5ZTgwNDgyNDFiYWMuLjA3Zjg0MzRkNDI1OGMgMTAwNjQ0XG4tLS0gYS9uZXQvc3lzY3RsX25ldC5jXG4rKysgYi9uZXQvc3lzY3RsX25ldC5jXG5AQCAtMTE0LDE2ICsxMTQsMTcgQEAgX19pbml0IGludCBuZXRfc3lzY3RsX2luaXQodm9pZClcbiBcdGdvdG8gb3V0O1xuIH1cbiBcbi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6XG4rLyogUmV0dXJuIGVycm9yIHdoZW4gc3lzY3RscyBmb3Igbm9uLWluaXQgbmV0bnMgYXJlIHVuc2FmZSBieSB2ZXJpZnlpbmc6XG4gICogMSkgYmVpbmcgcmVhZC1vbmx5LCBvclxuICAqIDIpIGhhdmluZyBhIGRhdGEgcG9pbnRlciB3aGljaCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZ2xvYmFsIGtlcm5lbC9tb2R1bGVcbiAgKiAgICBkYXRhIHNlZ21lbnQsIGFuZCByYXRoZXIgaW50byB0aGUgaGVhcCB3aGVyZSBhIHBlci1uZXQgb2JqZWN0IHdhc1xuICAqICAgIGFsbG9jYXRlZC5cbiAgKi9cbi1zdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdCAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbitzdGF0aWMgaW50IGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbitcdFx0XHRcdCAgc2l6ZV90IHRhYmxlX3NpemUpXG4ge1xuLVx0c3RydWN0IGN0bF90YWJsZSAqZW50O1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqZW50O1xuIFxuIFx0cHJfZGVidWcoXCJSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xcblwiLCBuZXQsIHBhdGgpO1xuIFx0ZW50ID0gdGFibGU7XG5AQCAtMTQ5LDI0ICsxNTAsMjQgQEAgc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4gXHRcdGVsc2VcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0LyogSWYgaXQgaXMgd3JpdGFibGUgYW5kIHBvaW50cyB0byBrZXJuZWwvbW9kdWxlIGdsb2JhbFxuLVx0XHQgKiBkYXRhLCB0aGVuIGl0J3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLlxuLVx0XHQgKi9cbitcdFx0LyogV2FybiBvbiBuZXRucyBsZWFrLiAqL1xuIFx0XHRXQVJOKDEsIFwic3lzY3RsICVzLyVzOiBkYXRhIHBvaW50cyB0byAlcyBnbG9iYWwgZGF0YTogJXBzXFxuXCIsXG4tXHRcdCAgICAgcGF0aCwgZW50LVx1MDAzZXByb2NuYW1lLCB3aGVyZSwgZW50LVx1MDAzZWRhdGEpO1xuK1x0XHRcdHBhdGgsIGVudC1cdTAwM2Vwcm9jbmFtZSwgd2hlcmUsIGVudC1cdTAwM2VkYXRhKTtcbiBcbi1cdFx0LyogTWFrZSBpdCBcInNhZmVcIiBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqL1xuLVx0XHRlbnQtXHUwMDNlbW9kZSBcdTAwMjY9IH4wMjIyO1xuK1x0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbitcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiBcdFx0XHRcdFx0XHRzaXplX3QgdGFibGVfc2l6ZSlcbiB7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbi1cdFx0ZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTtcbitcdFx0aWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gX19yZWdpc3Rlcl9zeXNjdGxfdGFibGUoXHUwMDI2bmV0LVx1MDAzZXN5c2N0bHMsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggZTAyZWQ2ZTM5NTVjMC4uNDc2NjBkNTcyNmJiZCAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4rKysgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTEzLDcgKzEzLDcgQEBcbiBcbiAjaW5jbHVkZSBcImFmX3VuaXguaFwiXG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibWF4X2RncmFtX3FsZW5cIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuQEAgLTIzLDE4ICsyMywyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4taW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4rXHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuK1xuK1x0cmV0dXJuIHRhYmxlO1xuK31cbitcbitpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4gXHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0gdW5peF90YWJsZTtcbiBcdH0gZWxzZSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHVuaXhfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2V1bnguY3RsID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L3VuaXhcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li5jYWViZWY3M2VhNThkIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODk5LDcgKzI4OTksNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibnNfbW9kZVwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXG5AQCAtMjkyNSwyMCArMjkyNSwzMSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp2c29ja190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuK1x0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5tb2RlO1xuK1x0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuK1x0dGFibGVbMl0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5nMmhfZmFsbGJhY2s7XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1xuIFx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuIFx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xuIFx0fSBlbHNlIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGFibGUgPSB2c29ja190YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5tb2RlO1xuLVx0XHR0YWJsZVsxXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGU7XG4tXHRcdHRhYmxlWzJdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvdnNvY2tcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbmluZGV4IGNhMDAzZThhMDM3NjAuLjM1NzE1MmE1MGZhZjEgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG4rKysgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG5AQCAtMTMsNyArMTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9pbml0IF9feGZybV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwieGZybV9hZXZlbnRfZXRpbWVcIixcbiBcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1MzIpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6NDIuMjc2OTAxMTIyWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTEzNTYxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3lzY3RsIFRhYmxlIFJlZ2lzdHJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyBuZXR3b3JrIHN5c2N0bCB0YWJsZXMgZ2V0IHJlZ2lzdGVyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIGNoYW5naW5nIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byB3b3JrIHdpdGggYSBgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqYCBpbnN0ZWFkIG9mIGEgcGxhaW4gb25lLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkncmUgdHJ5aW5nIHRvIGVuZm9yY2Ugc29tZSBpbW11dGFiaWxpdHkgb24gdGhlc2UgdGFibGVzLiBUaGV5J3ZlIGFsc28gZ29uZSB0aHJvdWdoIGFuZCBtYWRlIHZhcmlvdXMgYHN0cnVjdCBjdGxfdGFibGVgIGRlZmluaXRpb25zIGBjb25zdGAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgZHVwbGljYXRpb24gc3RyYXRlZ3kgZm9yIG5ldyBuZXR3b3JrIG5hbWVzcGFjZXMuIEl0J3MgdXNpbmcgYGttZW1kdXBgIHRvIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlYC5cblxuQWxyaWdodCwgYGttZW1kdXBgLi4uIGl0IGFsbG9jYXRlcyBtZW1vcnkgYW5kIHRoZW4gY29waWVzIGRhdGEuIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGlzLiBBaCwgaGVyZSdzIHRoZSBgbmV0bnNfY29yZV90YWJsZV9kdXBgIGZ1bmN0aW9uOlxuXG5gYGBjXG5zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqbmV0bnNfY29yZV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxue1xuXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG5cdHN0cnVjdCBjdGxfdGFibGUgKnRibDtcblx0aW50IGk7XG5cblx0dGJsID0ga21lbWR1cChuZXRuc19jb3JlX3RhYmxlLCBzaXplb2YobmV0bnNfY29yZV90YWJsZSksIEdGUF9LRVJORUwpO1xuXHRpZiAoIXRibClcblx0XHRyZXR1cm4gTlVMTDtcblxuXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcblx0XHRpZiAodGJsW2ldLmRhdGEgPT0gXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxuXHRcdFx0YnJlYWs7XG5cblx0XHR0YmxbaV0uZGF0YSArPSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG5cdH1cblx0Zm9yICg7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICsraSlcblx0XHR0YmxbaV0ubW9kZSBcdTAwMjY9IH4wMjIyO1xuXG5cdHJldHVybiB0Ymw7XG59XG5gYGBcblxuT2theSwgc28gdGhpcyBpcyBqdXN0IHJlZmFjdG9yaW5nIHRoZSBkdXBsaWNhdGlvbiBpbnRvIGEgZGVkaWNhdGVkIGZ1bmN0aW9uIGFuZCBlbmZvcmNpbmcgdGhlIGBjb25zdGAgb24gdGhlIG9yaWdpbmFsIHRlbXBsYXRlLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgbWFraW5nIHN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gV2l0aCBga21lbWR1cGAsIGl0IGNvcGllcyBgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpYCBieXRlcy4gU2luY2UgYG5ldG5zX2NvcmVfdGFibGVgIGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIGFueSBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBhdXRvbWF0aWNhbGx5IHplcm9lZCBvdXQgYnkgdGhlIGNvbXBpbGVyLiBUaGF0IG1lYW5zIHRoZSBkdXBsaWNhdGVkIHRhYmxlIGlzICpmdWxseSBpbml0aWFsaXplZCogd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGJlaW5nIGludHJvZHVjZWQgaGVyZS4gVGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyB0byBlbmZvcmNlIGBjb25zdGAgb24gdGhlc2Ugc3RhdGljIHRlbXBsYXRlcyBhbmQgbW92ZSB0aGUgZHVwbGljYXRpb24gbG9naWMgYXJvdW5kLlxuXG5BaCwgYW5kIHRoZXJlJ3MgYSBiZWhhdmlvciBjaGFuZ2Ugd2l0aCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgd2hpY2ggdXNlZCB0bzpcblxuYGBgY1xuLVx0XHQvKiBNYWtlIGl0IFwic2FmZVwiIGJ5IGRyb3BwaW5nIHdyaXRhYmxlIHBlcm1zICovXG4tXHRcdGVudC1cdTAwM2Vtb2RlIFx1MDAyNj0gfjAyMjI7XG5gYGBcblxuQW5kIG5vdyBpdCBkb2VzOlxuXG5gYGBjXG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuYGBgXG5cblNvLCBpbnN0ZWFkIG9mIHNpbGVudGx5IGRyb3BwaW5nIHdyaXRlIHBlcm1pc3Npb25zIG9uIGFuIHVuc2FmZSBzeXNjdGwsIGl0IG5vdyAqZmFpbHMqIHRoZSByZWdpc3RyYXRpb24uIFRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UsIGJ1dCBhZ2FpbiwgZG9lc24ndCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJ1dCBga21lbWR1cGAgYWxsb2NhdGVzIGFuZCBjb3BpZXMuIFRoZSBzb3VyY2UgaXMgYSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlLiBTdGF0aWMgZ2xvYmFscyBhcmUgKnplcm8taW5pdGlhbGl6ZWQqLiBTbywgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZC5cblxuU28uLi5ubyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIHJlZmFjdG9ycyBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uLiBJdCBtYWtlcyB0aGUgc3RhdGljIHRlbXBsYXRlcyBgY29uc3RgIGFuZCB1c2VzIGBrbWVtZHVwYCB0byBkdXBsaWNhdGUgdGhlbS4gU2luY2UgdGhlIHRlbXBsYXRlcyBhcmUgc3RhdGljLCB0aGV5J3JlIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvZWQgb3V0IGJ5IHRoZSBjb21waWxlcikuIGBrbWVtZHVwYCBjb3BpZXMgdGhpcyBpbml0aWFsaXplZCBkYXRhLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBpbnZvbHZlZCBpbiBjb250cm9sIGZsb3cgdGhhdCBJIGNhbiBzZWUuIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgYW55IG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3lzY3RsIHRhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwOSwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNTo1Ni4zOTA0NzMzMzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 14:30:48 +0000 UTC FinishedAt: 2026-08-10 14:35:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "SYSCTL", "UNIX", "SMC", "VSOCKETS", "XFRM_USER", "LWTUNNEL", "NF_CONNTRACK", "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "SYSCTL", "UNIX", "SMC", "VSOCKETS", "XFRM_USER", "LWTUNNEL", "NF_CONNTRACK", "IP_SCTP" ], "series_id": "3e8c1afd-2831-4c22-a956-433cd7f0f47a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "register_net_sysctl_sz", "smc_sysctl_net_init", "unix_sysctl_register" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeiYjMzQ7LAogICAgJiMzNDtzbWNfc3lzY3RsX25ldF9pbml0JiMzNDssCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHRhYmxlIHJlZ2lzdHJhdGlvbiBieSBtYWtpbmcgdGhlIHN0YXRpYyB0ZW1wbGF0ZSB0YWJsZXMgYGNvbnN0YCBhbmQgbW92aW5nIHRoZSBkdXBsaWNhdGlvbiBsb2dpYyBpbnRvIGRlZGljYXRlZCBgX2R1cGAgZnVuY3Rpb25zLiBUaGUgZHVwbGljYXRlZCB0YWJsZXMgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbWR1cCgpYCwgd2hpY2ggY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdGljIGdsb2JhbCB0ZW1wbGF0ZXMuIFNpbmNlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGluIEMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgKGluY2x1ZGluZyBhbnkgc3RydWN0IHBhZGRpbmcpLCB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRhYmxlcyBhcmUgY29tcGxldGVseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBtZW1vcnkgbGVha3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIG9uIHRoZSBhbGxvY2F0ZWQgdGFibGVzKSB3aWxsIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCByZWdpc3RyYXRpb24gZm9yIG5vbi1pbml0IG5ldHdvcmsgbmFtZXNwYWNlcywgY2hhbmdpbmcgaG93IHN5c2N0bCB0YWJsZXMgYXJlIGR1cGxpY2F0ZWQgYW5kIHZhbGlkYXRlZC4gSXQgaW50cm9kdWNlcyBhIHN0cmljdCBjaGVjayBpbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgdGhhdCByZXR1cm5zIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHBlcm1pc3Npb25zLCB3aGljaCBjYW4gY2F1c2UgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdG8gZmFpbCBpZiBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkLiBGdXp6aW5nIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDNmMjViMjUzNWY4MTY0MjNiZTg3ZmIzZTRjZjE2NGFmZGMzZGJlYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuaW5kZXggNTAxYWYxOTk5ZmU4My4uZTVlZTY3M2I5ZmNmOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5AQCAtNTI1LDEyICYjNDM7NTI1LDEzIEBAIHN0cnVjdCBjdGxfdGFibGU7XG4gI2lmZGVmIENPTkZJR19TWVNDVExcbiBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpO1xuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xuJiM0MztcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZV90IHRhYmxlX3NpemUpO1xuIHZvaWQgdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcbi1cdGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbiYjNDM7XHRjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbmluZGV4IGI1MDg2MThiZmMxMjMuLmViMzVkYTM1NTZmNGEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0bnNfY29yZV90YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3Jwc19kZWZhdWx0X21hc2tcJiMzNDssXG5AQCAtNzg3LDI2ICYjNDM7Nzg3LDM4IEBAIHN0YXRpYyBpbnQgX19pbml0IGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKGNoYXIgKnN0cilcbiB9XG4gX19zZXR1cChcJiMzNDtmYl90dW5uZWxzPVwmIzM0OywgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApO1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpuZXRuc19jb3JlX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpO1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGJsO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHR0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0YmwpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdGlmICh0YmxbaV0uZGF0YSA9PSBcdTAwMjZzeXNjdGxfd21lbV9tYXgpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHRibFtpXS5kYXRhICYjNDM7PSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG4mIzQzO1x0fVxuJiM0MztcdGZvciAoOyBpIFx1MDAzYyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdHRibFtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0Ymw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsO1xuIFxuIFx0dGJsID0gbmV0bnNfY29yZV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuLVx0XHR0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdHRibCA9IG5ldG5zX2NvcmVfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICh0YmwgPT0gTlVMTClcbiBcdFx0XHRnb3RvIGVycl9kdXA7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7XG4tXHRcdFx0aWYgKHRibFtpXS5kYXRhID09IFx1MDAyNnN5c2N0bF93bWVtX21heClcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdHRibFtpXS5kYXRhICYjNDM7PSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG4tXHRcdH1cbi1cdFx0Zm9yICg7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKVxuLVx0XHRcdHRibFtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNlY29yZS5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9jb3JlXCYjMzQ7LCB0YmwsIHRhYmxlX3NpemUpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuY1xuaW5kZXggNDdkZWQwZjYwN2Q0Yi4uYTkwYmU1N2M2M2JlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2RldmluZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZGV2aW5ldC5jXG5AQCAtMjc5Niw3ICYjNDM7Mjc5Niw3IEBAIHN0YXRpYyB2b2lkIGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IGluX2RldmljZSAqaWRldilcbiBcdG5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtXHUwMDNlYXJwX3Bhcm1zKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2lwX2ZvcndhcmRcJiMzNDssXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aXB2NF9kZXZjb25mLmRhdGFbXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuaW5kZXggY2ExMTgwZGJhMWRlYS4uMmYwMzYzYmNhMmE4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuQEAgLTYyNCw3ICYjNDM7NjI0LDcgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt0Y3BfbWF4X3R3X2J1Y2tldHNcJiMzNDssXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2NC50Y3BfZGVhdGhfcm93LnN5c2N0bF9tYXhfdHdfYnVja2V0cyxcbkBAIC0xNjU0LDM1ICYjNDM7MTY1NCw0NSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICppcHY0X25ldF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShpcHY0X25ldF90YWJsZSk7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0dGFibGUgPSBrbWVtZHVwKGlwdjRfbmV0X3RhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodGFibGVbaV0uZGF0YSkge1xuJiM0MztcdFx0XHQvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvXG4mIzQzO1x0XHRcdCAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXRcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcbiYjNDM7XHRcdFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHRhYmxlW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh0YWJsZVtpXS5leHRyYTIgXHUwMDNlPSAodm9pZCAqKVx1MDAyNmluaXRfbmV0LmlwdjQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGFibGVbaV0uZXh0cmEyIFx1MDAzYyAodm9pZCAqKShcdTAwMjZpbml0X25ldC5pcHY0ICYjNDM7IDEpKVxuJiM0MztcdFx0XHR0YWJsZVtpXS5leHRyYTIgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiBcdHRhYmxlID0gaXB2NF9uZXRfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuLVx0XHRpbnQgaTtcbi1cbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdHRhYmxlID0gaXB2NF9uZXRfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcbi1cdFx0XHRcdC8qIFVwZGF0ZSB0aGUgdmFyaWFibGVzIHRvIHBvaW50IGludG9cbi1cdFx0XHRcdCAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXRcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0dGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHQvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7XG4tXHRcdFx0XHQgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBuc1xuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR0YWJsZVtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICh0YWJsZVtpXS5leHRyYTIgXHUwMDNlPSAodm9pZCAqKVx1MDAyNmluaXRfbmV0LmlwdjQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHRhYmxlW2ldLmV4dHJhMiBcdTAwM2MgKHZvaWQgKikoXHUwMDI2aW5pdF9uZXQuaXB2NCAmIzQzOyAxKSlcbi1cdFx0XHRcdHRhYmxlW2ldLmV4dHJhMiAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHR9XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNlaXB2NC5pcHY0X2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvaXB2NFwmIzM0OywgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuaW5kZXggNThmYWYxZGRkMmIxNS4uYWI3YTAxMDI5ZDQ5MCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuQEAgLTE0MSw3ICYjNDM7MTQxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbyA9IHtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcJiMzNDt4ZnJtNF9nY190aHJlc2hcJiMzNDssXG4gXHRcdC5kYXRhICAgICAgICAgICA9IFx1MDAyNmluaXRfbmV0Lnhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2gsXG5AQCAtMTUxLDE4ICYjNDM7MTUxLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4mIzQzO1xuJiM0MztcdHRhYmxlID0ga21lbWR1cCh4ZnJtNF9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLFxuJiM0MztcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbiBcbiBcdHRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHR0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9pcHY0XCYjMzQ7LCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmNcbmluZGV4IGVmYjIzODA3YTAyNjIuLmE5NWIwMzUxODI0ZjMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pY21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2ljbXAuY1xuQEAgLTEzNzQsNyAmIzQzOzEzNzQsNyBAQCBFWFBPUlRfU1lNQk9MKGljbXB2Nl9lcnJfY29udmVydCk7XG4gc3RhdGljIHUzMiBpY21wdjZfZXJyb3JzX2V4dGVuc2lvbl9tYXNrX2FsbCA9XG4gXHRHRU5NQVNLX1U4KElDTVBfRVJSX0VYVF9DT1VOVCAtIDEsIDApO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X2ljbXBfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3JhdGVsaW1pdFwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pY21wdjZfdGltZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uYjgzM2E2NDAwYzk0NCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC02NTU1LDcgJiM0Mzs2NTU1LDcgQEAgc3RhdGljIGludCBpcHY2X3N5c2N0bF9ydGNhY2hlX2ZsdXNoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD1cdFwmIzM0O21heF9zaXplXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9XHRcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuY1xuaW5kZXggZDJjZDMzZTI2OThkNS4uMWEwYTM2ZGNkYWJjMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuY1xuQEAgLTYxLDcgJiM0Mzs2MSw3IEBAIHByb2NfcnQ2X211bHRpcGF0aF9oYXNoX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCB2b2lkICpiXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2JpbmR2Nm9ubHlcJiMzNDssXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2Ni5zeXNjdGwuYmluZHY2b25seSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5pbmRleCAzYjc0OTQ3NWY2ZWQ2Li41ZWMwNjNjYjRhYTQzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5AQCAtMTg3LDcgJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCYjMzQ7eGZybTZfZ2NfdGhyZXNoXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0Lnhmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2gsXG5AQCAtMTk3LDE4ICYjNDM7MTk3LDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNl9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTZfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4mIzQzO1xuJiM0MztcdHRhYmxlID0ga21lbWR1cCh4ZnJtNl9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNl9wb2xpY3lfdGFibGUpLFxuJiM0MztcdFx0XHRHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbiBcbiBcdHRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHR0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9pcHY2XCYjMzQ7LCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbmluZGV4IGJlMjk1M2M3ZDcwMmUuLmY0ZjJkODIxOTJkNTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuQEAgLTYzOSw3ICYjNDM7NjM5LDcgQEAgZW51bSBuZl9jdF9zeXNjdGxfaW5kZXgge1xuIFx0TkZfU1lTQ1RMX0NUX0xBU1RfU1lTQ1RMLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuIFx0W05GX1NZU0NUTF9DVF9NQVhdID0ge1xuIFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bmZfY29ubnRyYWNrX21heFwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZl9jb25udHJhY2tfbWF4LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuaW5kZXggMmQ4OTBkZDA0ZmY4OS4uNGUxZWVmMWJhMGYxNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXG5AQCAtNTQsNyAmIzQzOzU0LDcgQEAgaW50IG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTtcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtuZl9ob29rc19sd3R1bm5lbFwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBOVUxMLFxuQEAgLTY2LDggJiM0Mzs2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuIFxuIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmNcbmluZGV4IGZjYTg0MDQ4NGViZjcuLjJiOTRjMjExNDI3ZGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zeXNjdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3lzY3RsLmNcbkBAIC05Miw3ICYjNDM7OTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7XG4gI2RlZmluZSBTQ1RQX1BGX1JFVFJBTlNfSURYICAgIDJcbiAjZGVmaW5lIFNDVFBfUFNfUkVUUkFOU19JRFggICAgM1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XG4gXHRbU0NUUF9SVE9fTUlOX0lEWF0gPSB7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtydG9fbWluXCYjMzQ7LFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnNjdHAucnRvX21pbixcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19zeXNjdGwuYyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5pbmRleCBiMWVmZWQ1NDYyNDM1Li4wOWRhZDQ4MzM3ZjYxIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5AQCAtOTcsNyAmIzQzOzk3LDcgQEAgc3RhdGljIGludCBwcm9jX3NtY19oc19jdHJsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNtY190YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCYjMzQ7YXV0b2Nvcmtpbmdfc2l6ZVwmIzM0OyxcbiBcdFx0LmRhdGEgICAgICAgICAgID0gXHUwMDI2aW5pdF9uZXQuc21jLnN5c2N0bF9hdXRvY29ya2luZ19zaXplLFxuQEAgLTE5NSwxNCAmIzQzOzE5NSwyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIH07XG4gXG4taW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHR0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0YWJsZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBzbWNfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuLVx0XHRpbnQgaTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU01DX0hTX0NUUkxfQlBGKVxuIFx0XHRzdHJ1Y3Qgc21jX2hzX2N0cmwgKmN0cmw7XG4gXG5AQCAtMjE0LDEyICYjNDM7MjI5LDkgQEAgaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXG4gXG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0dGFibGUgPSBzbWNfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdHRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2VzbWMuc21jX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvc21jXCYjMzQ7LCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuY1xuaW5kZXggMTllODA0ODI0MWJhYy4uMDdmODQzNGQ0MjU4YyAxMDA2NDRcbi0tLSBhL25ldC9zeXNjdGxfbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zeXNjdGxfbmV0LmNcbkBAIC0xMTQsMTYgJiM0MzsxMTQsMTcgQEAgX19pbml0IGludCBuZXRfc3lzY3RsX2luaXQodm9pZClcbiBcdGdvdG8gb3V0O1xuIH1cbiBcbi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6XG4mIzQzOy8qIFJldHVybiBlcnJvciB3aGVuIHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSB1bnNhZmUgYnkgdmVyaWZ5aW5nOlxuICAqIDEpIGJlaW5nIHJlYWQtb25seSwgb3JcbiAgKiAyKSBoYXZpbmcgYSBkYXRhIHBvaW50ZXIgd2hpY2ggcG9pbnRzIG91dHNpZGUgb2YgdGhlIGdsb2JhbCBrZXJuZWwvbW9kdWxlXG4gICogICAgZGF0YSBzZWdtZW50LCBhbmQgcmF0aGVyIGludG8gdGhlIGhlYXAgd2hlcmUgYSBwZXItbmV0IG9iamVjdCB3YXNcbiAgKiAgICBhbGxvY2F0ZWQuXG4gICovXG4tc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCB0YWJsZV9zaXplKVxuIHtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKmVudDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xcblwmIzM0OywgbmV0LCBwYXRoKTtcbiBcdGVudCA9IHRhYmxlO1xuQEAgLTE0OSwyNCAmIzQzOzE1MCwyNCBAQCBzdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbiBcdFx0ZWxzZVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBJZiBpdCBpcyB3cml0YWJsZSBhbmQgcG9pbnRzIHRvIGtlcm5lbC9tb2R1bGUgZ2xvYmFsXG4tXHRcdCAqIGRhdGEsIHRoZW4gaXQmIzM5O3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLlxuLVx0XHQgKi9cbiYjNDM7XHRcdC8qIFdhcm4gb24gbmV0bnMgbGVhay4gKi9cbiBcdFx0V0FSTigxLCBcJiMzNDtzeXNjdGwgJXMvJXM6IGRhdGEgcG9pbnRzIHRvICVzIGdsb2JhbCBkYXRhOiAlcHNcXG5cJiMzNDssXG4tXHRcdCAgICAgcGF0aCwgZW50LVx1MDAzZXByb2NuYW1lLCB3aGVyZSwgZW50LVx1MDAzZWRhdGEpO1xuJiM0MztcdFx0XHRwYXRoLCBlbnQtXHUwMDNlcHJvY25hbWUsIHdoZXJlLCBlbnQtXHUwMDNlZGF0YSk7XG4gXG4tXHRcdC8qIE1ha2UgaXQgXCYjMzQ7c2FmZVwmIzM0OyBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqL1xuLVx0XHRlbnQtXHUwMDNlbW9kZSBcdTAwMjY9IH4wMjIyO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4gXHRcdFx0XHRcdFx0c2l6ZV90IHRhYmxlX3NpemUpXG4ge1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG4tXHRcdGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gX19yZWdpc3Rlcl9zeXNjdGxfdGFibGUoXHUwMDI2bmV0LVx1MDAzZXN5c2N0bHMsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggZTAyZWQ2ZTM5NTVjMC4uNDc2NjBkNTcyNmJiZCAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTEzLDcgJiM0MzsxMyw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YWZfdW5peC5oXCYjMzQ7XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDttYXhfZGdyYW1fcWxlblwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuQEAgLTIzLDE4ICYjNDM7MjMsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLWludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiYjNDM7XHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRhYmxlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiYjNDM7XG4gXHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0gdW5peF90YWJsZTtcbiBcdH0gZWxzZSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0dGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNldW54LmN0bCA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvdW5peFwmIzM0OywgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li5jYWViZWY3M2VhNThkIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODk5LDcgJiM0MzsyODk5LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bnNfbW9kZVwmIzM0OyxcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC52c29jay5tb2RlLFxuQEAgLTI5MjUsMjAgJiM0MzsyOTI1LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp2c29ja190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuJiM0MztcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0YWJsZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4mIzQzO1x0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuJiM0MztcdHRhYmxlWzJdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGFibGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4mIzQzO1xuIFx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuIFx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xuIFx0fSBlbHNlIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdHRhYmxlID0gdnNvY2tfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2subW9kZTtcbi1cdFx0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuLVx0XHR0YWJsZVsyXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjaztcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2V2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC92c29ja1wmIzM0OywgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbmluZGV4IGNhMDAzZThhMDM3NjAuLjM1NzE1MmE1MGZhZjEgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG5AQCAtMTMsNyAmIzQzOzEzLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfaW5pdCBfX3hmcm1fc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7eGZybV9hZXZlbnRfZXRpbWVcJiMzNDssXG4gXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodTMyKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7LAogICAgJiMzNDtVTklYJiMzNDssCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7TFdUVU5ORUwmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6JiMzNDssCiAgICAmIzM0O3NtY19zeXNjdGxfbmV0X2luaXQmIzM0OywKICAgICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHJlZ2lzdHJhdGlvbiBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLCBjaGFuZ2luZyBob3cgc3lzY3RsIHRhYmxlcyBhcmUgZHVwbGljYXRlZCBhbmQgdmFsaWRhdGVkLiBJdCBpbnRyb2R1Y2VzIGEgc3RyaWN0IGNoZWNrIGluIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB0aGF0IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBtb2RpZnlpbmcgcGVybWlzc2lvbnMsIHdoaWNoIGNhbiBjYXVzZSBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiB0byBmYWlsIGlmIHN5c2N0bHMgYXJlIG1pc2NvbmZpZ3VyZWQuIEZ1enppbmcgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwM2YyNWIyNTM1ZjgxNjQyM2JlODdmYjNlNGNmMTY0YWZkYzNkYmViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTQ6MzM6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggNTAxYWYxOTk5ZmU4My4uZTVlZTY3M2I5ZmNmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtNTI1LDEyICYjNDM7NTI1LDEzIEBAIHN0cnVjdCBjdGxfdGFibGU7CiAjaWZkZWYgQ09ORklHX1NZU0NUTAogaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKTsKIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCwKLQkJCQkJICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpOwomIzQzOwkJCQkJCWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAomIzQzOwkJCQkJCXNpemVfdCB0YWJsZV9zaXplKTsKIHZvaWQgdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwKLQljb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpCiYjNDM7CWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggYjUwODYxOGJmYzEyMy4uZWIzNWRhMzU1NmY0YSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTY3OCw3ICYjNDM7Njc4LDcgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0bnNfY29yZV90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpCiAJewogCQkucHJvY25hbWUJPSAmIzM0O3Jwc19kZWZhdWx0X21hc2smIzM0OywKQEAgLTc4NywyNiAmIzQzOzc4NywzOCBAQCBzdGF0aWMgaW50IF9faW5pdCBmYl90dW5uZWxzX29ubHlfZm9yX2luaXRfbmV0X3N5c2N0bF9zZXR1cChjaGFyICpzdHIpCiB9CiBfX3NldHVwKCYjMzQ7ZmJfdHVubmVscz0mIzM0OywgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApOwogCi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpuZXRuc19jb3JlX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRibDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CXRibCA9IGttZW1kdXAobmV0bnNfY29yZV90YWJsZSwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YmwpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlpZiAodGJsW2ldLmRhdGEgPT0gJmFtcDtzeXNjdGxfd21lbV9tYXgpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQl0YmxbaV0uZGF0YSAmIzQzOz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CX0KJiM0MzsJZm9yICg7IGkgJmx0OyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSkKJiM0MzsJCXRibFtpXS5tb2RlICZhbXA7PSB+MDIyMjsKJiM0MzsKJiM0MzsJcmV0dXJuIHRibDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShuZXRuc19jb3JlX3RhYmxlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsOwogCiAJdGJsID0gbmV0bnNfY29yZV90YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7Ci0JCWludCBpOwotCQl0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRibCA9IG5ldG5zX2NvcmVfdGFibGVfZHVwKG5ldCk7CiAJCWlmICh0YmwgPT0gTlVMTCkKIAkJCWdvdG8gZXJyX2R1cDsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpIHsKLQkJCWlmICh0YmxbaV0uZGF0YSA9PSAmYW1wO3N5c2N0bF93bWVtX21heCkKLQkJCQlicmVhazsKLQotCQkJdGJsW2ldLmRhdGEgJiM0Mzs9IChjaGFyICopbmV0IC0gKGNoYXIgKikmYW1wO2luaXRfbmV0OwotCQl9Ci0JCWZvciAoOyBpICZsdDsgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpCi0JCQl0YmxbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CiAJfQogCiAJbmV0LSZndDtjb3JlLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvY29yZSYjMzQ7LCB0YmwsIHRhYmxlX3NpemUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDQ3ZGVkMGY2MDdkNGIuLmE5MGJlNTdjNjNiZTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTI3OTYsNyAmIzQzOzI3OTYsNyBAQCBzdGF0aWMgdm9pZCBkZXZpbmV0X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpCiAJbmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIoaWRldi0mZ3Q7YXJwX3Bhcm1zKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBjdGxfZm9yd2FyZF9lbnRyeVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtpcF9mb3J3YXJkJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aXB2NF9kZXZjb25mLmRhdGFbCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IGNhMTE4MGRiYTFkZWEuLjJmMDM2M2JjYTJhODggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC02MjQsNyAmIzQzOzYyNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDt0Y3BfbWF4X3R3X2J1Y2tldHMmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5pcHY0LnRjcF9kZWF0aF9yb3cuc3lzY3RsX21heF90d19idWNrZXRzLApAQCAtMTY1NCwzNSAmIzQzOzE2NTQsNDUgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqaXB2NF9uZXRfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKGlwdjRfbmV0X3RhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0YWJsZVtpXS5kYXRhKSB7CiYjNDM7CQkJLyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50bwomIzQzOwkJCSAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXQKJiM0MzsJCQkgKi8KJiM0MzsJCQl0YWJsZVtpXS5kYXRhICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogRW50cmllcyB3aXRob3V0IGRhdGEgcG9pbnRlciBhcmUgZ2xvYmFsOwomIzQzOwkJCSAqIE1ha2UgdGhlbSByZWFkLW9ubHkgaW4gbm9uLWluaXRfbmV0IG5zCiYjNDM7CQkJICovCiYjNDM7CQkJdGFibGVbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CiYjNDM7CQl9CiYjNDM7CQlpZiAodGFibGVbaV0uZXh0cmEyICZndDs9ICh2b2lkICopJmFtcDtpbml0X25ldC5pcHY0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0YWJsZVtpXS5leHRyYTIgJmx0OyAodm9pZCAqKSgmYW1wO2luaXRfbmV0LmlwdjQgJiM0MzsgMSkpCiYjNDM7CQkJdGFibGVbaV0uZXh0cmEyICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpOwomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAogCXRhYmxlID0gaXB2NF9uZXRfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQlpbnQgaTsKLQotCQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSBpcHY0X25ldF90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCWZvciAoaSA9IDA7IGkgJmx0OyB0YWJsZV9zaXplOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHRhYmxlW2ldLmRhdGEpIHsKLQkJCQkvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvCi0JCQkJICogdGhlIGN1cnJlbnQgc3RydWN0IG5ldAotCQkJCSAqLwotCQkJCXRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKikmYW1wO2luaXRfbmV0OwotCQkJfSBlbHNlIHsKLQkJCQkvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7Ci0JCQkJICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnMKLQkJCQkgKi8KLQkJCQl0YWJsZVtpXS5tb2RlICZhbXA7PSB+MDIyMjsKLQkJCX0KLQkJCWlmICh0YWJsZVtpXS5leHRyYTIgJmd0Oz0gKHZvaWQgKikmYW1wO2luaXRfbmV0LmlwdjQgJmFtcDsmYW1wOwotCQkJICAgIHRhYmxlW2ldLmV4dHJhMiAmbHQ7ICh2b2lkICopKCZhbXA7aW5pdF9uZXQuaXB2NCAmIzQzOyAxKSkKLQkJCQl0YWJsZVtpXS5leHRyYTIgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKikmYW1wO2luaXRfbmV0OwotCQl9CiAJfQogCiAJbmV0LSZndDtpcHY0LmlwdjRfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L2lwdjQmIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDU4ZmFmMWRkZDJiMTUuLmFiN2EwMTAyOWQ0OTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0xNDEsNyAmIzQzOzE0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHhmcm00X3BvbGljeV9hZmluZm8gPSB7CiB9OwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O3hmcm00X2djX3RocmVzaCYjMzQ7LAogCQkuZGF0YSAgICAgICAgICAgPSAmYW1wO2luaXRfbmV0Lnhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2gsCkBAIC0xNTEsMTggJiM0MzsxNTEsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHhmcm00X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm00X3BvbGljeV90YWJsZSksCiYjNDM7CQkJR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKIAogCXRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKLQkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQl0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7eGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaDsKIAl9CiAKIAloZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvaXB2NCYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCBlZmIyMzgwN2EwMjYyLi5hOTViMDM1MTgyNGYzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaWNtcC5jCkBAIC0xMzc0LDcgJiM0MzsxMzc0LDcgQEAgRVhQT1JUX1NZTUJPTChpY21wdjZfZXJyX2NvbnZlcnQpOwogc3RhdGljIHUzMiBpY21wdjZfZXJyb3JzX2V4dGVuc2lvbl9tYXNrX2FsbCA9CiAJR0VOTUFTS19VOChJQ01QX0VSUl9FWFRfQ09VTlQgLSAxLCAwKTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O3JhdGVsaW1pdCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2luaXRfbmV0LmlwdjYuc3lzY3RsLmljbXB2Nl90aW1lLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNTk2OGNlNWFkMTUwOC4uYjgzM2E2NDAwYzk0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC02NTU1LDcgJiM0Mzs2NTU1LDcgQEAgc3RhdGljIGludCBpcHY2X3N5c2N0bF9ydGNhY2hlX2ZsdXNoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3JvdXRlX3RhYmxlX3RlbXBsYXRlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0JJiMzNDttYXhfc2l6ZSYjMzQ7LAogCQkuZGF0YQkJPQkmYW1wO2luaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKaW5kZXggZDJjZDMzZTI2OThkNS4uMWEwYTM2ZGNkYWJjMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKQEAgLTYxLDcgJiM0Mzs2MSw3IEBAIHByb2NfcnQ2X211bHRpcGF0aF9oYXNoX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCB2b2lkICpiCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7YmluZHY2b25seSYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2luaXRfbmV0LmlwdjYuc3lzY3RsLmJpbmR2Nm9ubHksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDNiNzQ5NDc1ZjZlZDYuLjVlYzA2M2NiNGFhNDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0xODcsNyAmIzQzOzE4Nyw3IEBAIHN0YXRpYyB2b2lkIHhmcm02X3BvbGljeV9maW5pKHZvaWQpCiB9CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZSAgICAgICA9ICYjMzQ7eGZybTZfZ2NfdGhyZXNoJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQueGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCwKQEAgLTE5NywxOCAmIzQzOzE5NywzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnhmcm02X3BvbGljeV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwomIzQzOwomIzQzOwl0YWJsZSA9IGttZW1kdXAoeGZybTZfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwKJiM0MzsJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3hmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2g7CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyOwogCiAJdGFibGUgPSB4ZnJtNl9wb2xpY3lfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZih4ZnJtNl9wb2xpY3lfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlX2R1cChuZXQpOwogCQlpZiAoIXRhYmxlKQogCQkJZ290byBlcnJfYWxsb2M7Ci0KLQkJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoOwogCX0KIAogCWhkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC9pcHY2JiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IGJlMjk1M2M3ZDcwMmUuLmY0ZjJkODIxOTJkNTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTYzOSw3ICYjNDM7NjM5LDcgQEAgZW51bSBuZl9jdF9zeXNjdGxfaW5kZXggewogCU5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0gewogCVtORl9TWVNDVExfQ1RfTUFYXSA9IHsKIAkJLnByb2NuYW1lCT0gJiMzNDtuZl9jb25udHJhY2tfbWF4JiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7bmZfY29ubnRyYWNrX21heCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYwppbmRleCAyZDg5MGRkMDRmZjg5Li40ZTFlZWYxYmEwZjE1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jCkBAIC01NCw3ICYjNDM7NTQsNyBAQCBpbnQgbmZfaG9va3NfbHd0dW5uZWxfc3lzY3RsX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O25mX2hvb2tzX2x3dHVubmVsJiMzNDssCiAJCS5kYXRhCQk9IE5VTEwsCkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHsKIAogc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKLQlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAogCXRhYmxlID0gbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmMKaW5kZXggZmNhODQwNDg0ZWJmNy4uMmI5NGMyMTE0MjdkZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc3lzY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3lzY3RsLmMKQEAgLTkyLDcgJiM0Mzs5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfdGFibGVbXSA9IHsKICNkZWZpbmUgU0NUUF9QRl9SRVRSQU5TX0lEWCAgICAyCiAjZGVmaW5lIFNDVFBfUFNfUkVUUkFOU19JRFggICAgMwogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7CiAJW1NDVFBfUlRPX01JTl9JRFhdID0gewogCQkucHJvY25hbWUJPSAmIzM0O3J0b19taW4mIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5zY3RwLnJ0b19taW4sCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19zeXNjdGwuYyBiL25ldC9zbWMvc21jX3N5c2N0bC5jCmluZGV4IGIxZWZlZDU0NjI0MzUuLjA5ZGFkNDgzMzdmNjEgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX3N5c2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3N5c2N0bC5jCkBAIC05Nyw3ICYjNDM7OTcsNyBAQCBzdGF0aWMgaW50IHByb2Nfc21jX2hzX2N0cmwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsCiB9CiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqLwogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZSAgICAgICA9ICYjMzQ7YXV0b2Nvcmtpbmdfc2l6ZSYjMzQ7LAogCQkuZGF0YSAgICAgICAgICAgPSAmYW1wO2luaXRfbmV0LnNtYy5zeXNjdGxfYXV0b2Nvcmtpbmdfc2l6ZSwKQEAgLTE5NSwxNCAmIzQzOzE5NSwyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHsKICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovCiB9OwogCi1pbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqc21jX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHNtY190YWJsZSk7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwl0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KQomIzQzOwkJdGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKIAl0YWJsZSA9IHNtY190YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7Ci0JCWludCBpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX1NNQ19IU19DVFJMX0JQRikKIAkJc3RydWN0IHNtY19oc19jdHJsICpjdHJsOwogCkBAIC0yMTQsMTIgJiM0MzsyMjksOSBAQCBpbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqLwogCi0JCXRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSBzbWNfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspCi0JCQl0YWJsZVtpXS5kYXRhICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKIAl9CiAKIAluZXQtJmd0O3NtYy5zbWNfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L3NtYyYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC9zeXNjdGxfbmV0LmMgYi9uZXQvc3lzY3RsX25ldC5jCmluZGV4IDE5ZTgwNDgyNDFiYWMuLjA3Zjg0MzRkNDI1OGMgMTAwNjQ0Ci0tLSBhL25ldC9zeXNjdGxfbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N5c2N0bF9uZXQuYwpAQCAtMTE0LDE2ICYjNDM7MTE0LDE3IEBAIF9faW5pdCBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpCiAJZ290byBvdXQ7CiB9CiAKLS8qIFZlcmlmeSB0aGF0IHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSBzYWZlIGJ5IGVpdGhlcjoKJiM0MzsvKiBSZXR1cm4gZXJyb3Igd2hlbiBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgdW5zYWZlIGJ5IHZlcmlmeWluZzoKICAqIDEpIGJlaW5nIHJlYWQtb25seSwgb3IKICAqIDIpIGhhdmluZyBhIGRhdGEgcG9pbnRlciB3aGljaCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZ2xvYmFsIGtlcm5lbC9tb2R1bGUKICAqICAgIGRhdGEgc2VnbWVudCwgYW5kIHJhdGhlciBpbnRvIHRoZSBoZWFwIHdoZXJlIGEgcGVyLW5ldCBvYmplY3Qgd2FzCiAgKiAgICBhbGxvY2F0ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLAotCQkJCSAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSkKJiM0MztzdGF0aWMgaW50IGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAomIzQzOwkJCQkgIHNpemVfdCB0YWJsZV9zaXplKQogewotCXN0cnVjdCBjdGxfdGFibGUgKmVudDsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqZW50OwogCiAJcHJfZGVidWcoJiMzNDtSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xuJiMzNDssIG5ldCwgcGF0aCk7CiAJZW50ID0gdGFibGU7CkBAIC0xNDksMjQgJiM0MzsxNTAsMjQgQEAgc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsCiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCi0JCS8qIElmIGl0IGlzIHdyaXRhYmxlIGFuZCBwb2ludHMgdG8ga2VybmVsL21vZHVsZSBnbG9iYWwKLQkJICogZGF0YSwgdGhlbiBpdCYjMzk7cyBwcm9iYWJseSBhIG5ldG5zIGxlYWsuCi0JCSAqLwomIzQzOwkJLyogV2FybiBvbiBuZXRucyBsZWFrLiAqLwogCQlXQVJOKDEsICYjMzQ7c3lzY3RsICVzLyVzOiBkYXRhIHBvaW50cyB0byAlcyBnbG9iYWwgZGF0YTogJXBzXG4mIzM0OywKLQkJICAgICBwYXRoLCBlbnQtJmd0O3Byb2NuYW1lLCB3aGVyZSwgZW50LSZndDtkYXRhKTsKJiM0MzsJCQlwYXRoLCBlbnQtJmd0O3Byb2NuYW1lLCB3aGVyZSwgZW50LSZndDtkYXRhKTsKIAotCQkvKiBNYWtlIGl0ICYjMzQ7c2FmZSYjMzQ7IGJ5IGRyb3BwaW5nIHdyaXRhYmxlIHBlcm1zICovCi0JCWVudC0mZ3Q7bW9kZSAmYW1wOz0gfjAyMjI7CiYjNDM7CQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQljb25zdCBjaGFyICpwYXRoLAotCQkJCQkJc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiYjNDM7CQkJCQkJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCQkJCQlzaXplX3QgdGFibGVfc2l6ZSkKIHsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKQotCQllbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpOwomIzQzOwkJaWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gX19yZWdpc3Rlcl9zeXNjdGxfdGFibGUoJmFtcDtuZXQtJmd0O3N5c2N0bHMsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTsKIH0KZGlmZiAtLWdpdCBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jIGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKaW5kZXggZTAyZWQ2ZTM5NTVjMC4uNDc2NjBkNTcyNmJiZCAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMKQEAgLTEzLDcgJiM0MzsxMyw3IEBACiAKICNpbmNsdWRlICYjMzQ7YWZfdW5peC5oJiMzNDsKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7bWF4X2RncmFtX3FsZW4mIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLApAQCAtMjMsMTggJiM0MzsyMywyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLWludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCiYjNDM7CXRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRhYmxlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIHRhYmxlOwomIzQzO30KJiM0MzsKJiM0MztpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKIAlpZiAobmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKIAkJdGFibGUgPSB1bml4X3RhYmxlOwogCX0gZWxzZSB7Ci0JCXRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpOwogCQlpZiAoIXRhYmxlKQogCQkJZ290byBlcnJfYWxsb2M7Ci0KLQkJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuOwogCX0KIAogCW5ldC0mZ3Q7dW54LmN0bCA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC91bml4JiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLmNhZWJlZjczZWE1OGQgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTI4OTksNyAmIzQzOzI4OTksNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O25zX21vZGUmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC52c29jay5tb2RlLApAQCAtMjkyNSwyMCAmIzQzOzI5MjUsMzEgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHsKIAl9LAogfTsKIAotc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnZzb2NrX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLm1vZGU7CiYjNDM7CXRhYmxlWzFdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2suY2hpbGRfbnNfbW9kZTsKJiM0MzsJdGFibGVbMl0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5nMmhfZmFsbGJhY2s7CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKIAlpZiAobmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKIAkJdGFibGUgPSB2c29ja190YWJsZTsKIAl9IGVsc2UgewotCQl0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSB2c29ja190YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2subW9kZTsKLQkJdGFibGVbMV0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5jaGlsZF9uc19tb2RlOwotCQl0YWJsZVsyXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLmcyaF9mYWxsYmFjazsKIAl9CiAKIAluZXQtJmd0O3Zzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvdnNvY2smIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jIGIvbmV0L3hmcm0veGZybV9zeXNjdGwuYwppbmRleCBjYTAwM2U4YTAzNzYwLi4zNTcxNTJhNTBmYWYxIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmMKQEAgLTEzLDcgJiM0MzsxMyw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2luaXQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIH0KIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O3hmcm1fYWV2ZW50X2V0aW1lJiMzNDssCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHUzMiksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBTeXNjdGwgUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgcmV3b3JraW5nIGhvdyBuZXR3b3JrIHN5c2N0bHMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBzZWVtcyBwcmV0dHkgc2lnbmlmaWNhbnQuIFRoZXkmIzM5O3JlIGNoYW5naW5nIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byB1c2UgYSBgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqYCwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHNhZmV0eSwgYW5kIHRoZXkmIzM5O3ZlIGFsdGVyZWQgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygc2lsZW50bHkgZHJvcHBpbmcgd3JpdGUgcGVybWlzc2lvbnMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBwb3RlbnRpYWwgcG9pbnQgZm9yIGJyZWFrYWdlLgoKVGhlIGJpZyBwaWN0dXJlIGlzIHRoYXQgdGhleSYjMzk7dmUgcmVmYWN0b3JlZCBob3cgc3lzY3RsIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGFuZCBtb2RpZmllZCBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLiBUaGV5JiMzOTt2ZSBtb3ZlZCB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYCpfZHVwYCBmdW5jdGlvbnMgKGUuZy4sIGBuZXRuc19jb3JlX3RhYmxlX2R1cGAsIGBpcHY0X25ldF90YWJsZV9kdXBgKSB3aGljaCBpbXByb3ZlcyByZWFkYWJpbGl0eS4gVGhpcyBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQgY2hhbmdlcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgd2hpY2ggaXMgY3JpdGljYWwuCgpUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgcHJldHR5IGNsZWFyOiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgbm93IHJldHVybnMgYW4gYC1FQUNDRVNgIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHRoZSB0YWJsZSwgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB3aWxsIGZhaWwgaWYgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIGRvZXMuIFRoYXQsIGNvdXBsZWQgd2l0aCB0aGUgY2hhbmdlIGluIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBhbGxvY2F0ZWQvaW5pdGlhbGl6ZWQgaW4gbmV3IG5ldG5zLCBtZWFucyB0aGVyZSYjMzk7cyBhIGRlZmluaXRlIHN1cmZhY2UgYXJlYSBmb3IgcmVncmVzc2lvbnMuCgpUaGlzIHNjcmVhbXMgJiMzNDtmdXp6aW5nIHRhcmdldC4mIzM0OyBUaGUgY2hhbmdlcyBhZmZlY3QgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24sIHdoaWNoIGFyZSBib3RoIGNydWNpYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGJlc3QgY2FuZGlkYXRlcyBmb3IgdGFyZ2V0aW5nLiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgaXMgcHJvYmFibHkgdGhlIG1haW4gb25lLCBhbHRob3VnaCBpdCBtaWdodCBiZSBjYWxsZWQgdG9vIG9mdGVuLiBUaGUgYCpfZHVwYCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBzbyBJIGNhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgdGhlbS4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCwgd2hpY2ggYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcmUgdGhlIGAqX25ldF9pbml0YCBmdW5jdGlvbnMuIFRob3NlIGdldCBjYWxsZWQgd2hlbiBhIG5ldyBuZXR3b3JrIG5hbWVzcGFjZSBpcyBjcmVhdGVkLiBGdW5jdGlvbnMgbGlrZSBgc3lzY3RsX2NvcmVfbmV0X2luaXRgLCBgaXB2NF9zeXNjdGxfaW5pdF9uZXRgLCBgeGZybTRfbmV0X3N5c2N0bF9pbml0YCwgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAsIGBuZl9sd3R1bm5lbF9uZXRfaW5pdGAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYW5kIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIHN0YW5kIG91dC4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgb2Z0ZW4gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIGNhbGxlZCDigJMgbGlrZWx5IGR1cmluZyBuZXRucyBjcmVhdGlvbi4gU28sIGZ1enppbmcgdGhlIG5ldG5zIGNyZWF0aW9uIHBhdGggaXMgdGhlIHdheSB0byBnbyBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZXkmIzM5O3ZlIGNoYW5nZWQgYWxsIHRoZXNlIGAqX25ldF9pbml0YCBmdW5jdGlvbnM6IGBzeXNjdGxfY29yZV9uZXRfaW5pdGAsIGBpcHY0X3N5c2N0bF9pbml0X25ldGAsIGB4ZnJtNF9uZXRfc3lzY3RsX2luaXRgLCBgeGZybTZfbmV0X3N5c2N0bF9pbml0YCwgYG5mX2x3dHVubmVsX25ldF9pbml0YCwgYHNtY19zeXNjdGxfbmV0X2luaXRgLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAuIE9rYXksIGFuZCBhbHNvIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCAod2hpY2ggSSBjYW4mIzM5O3QgY2FsbCBkaXJlY3RseSkgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQuIFNvIHRoZSBtYWluIG9uZXMgdG8gbG9vayBhdCBhcmUgYCpfbmV0X2luaXRgLgoKTGV0IG1lIHNlZS4uLiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgKmlzKiBleHBvcnRlZCBmcm9tIGBuZXQvc3lzY3RsX25ldC5jYC4gSSBuZWVkIHRvIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4gT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYG5ldC9zeXNjdGxfbmV0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3lzY3RsX25ldC5jPTE2Mz1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3N5c2N0bF9uZXQuYy0xNzMtfVxubmV0L3N5c2N0bF9uZXQuYzoxNzQ6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfbmV0X3N5c2N0bF9zeik7XG5uZXQvc3lzY3RsX25ldC5jLTE3NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgYW5kIFJlbGF0ZWQgS2VybmVsIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCAqaXMqIGV4cG9ydGVkIOKAkyBnb29kLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEkgbmVlZCBgQ09ORklHX1NZU0NUTGAsIGBDT05GSUdfTkVUYCwgYW5kIGBDT05GSUdfTkVUX05TYC4gQW5kLCBkZXBlbmRpbmcgb24gdGhlIHN1YnN5c3RlbXMsIGBDT05GSUdfU01DYCwgYENPTkZJR19YRlJNYCwgYENPTkZJR19VTklYYCwgYENPTkZJR19WU09DS0VUU2AsIGFuZCBgQ09ORklHX0xXVFVOTkVMYCBhbHNvIGNvbWUgaW50byBwbGF5LgoKTGV0IG1lIGp1c3QgbGlzdCB0aG9zZSBvdXQgdG8gaGF2ZSB0aGVtIGNsZWFybHk6CiogICBgTkVUX05TYAoqICAgYFNZU0NUTGAKKiAgIGBTTUNgCiogICBgWEZSTWAKKiAgIGBWU09DS0VUU2AKCk5vdywgaXMgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXM/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgY2FsbGVkIHdoZW5ldmVyIGEgbmV0d29yayBuYW1lc3BhY2UgaXMgY3JlYXRlZCwgYW5kIGl0IGFwcGVhcnMgdG8gYmUgY2VudHJhbCB0byByZWdpc3RlcmluZyBzeXNjdGwgZW50cmllcyBmb3IgZWFjaCBuZXR3b3JrIHN1YnN5c3RlbS4gRXhjZWxsZW50IGZvY3VzLgoKQmVzaWRlcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGxldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGltcG9ydGFudCwgYW5kIHRoZXNlIG90aGVyIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VmdWwgaW4gdGhlIG5leHQgcm91bmQ6IGBzeXNjdGxfY29yZV9uZXRfaW5pdGAsIGBpcHY0X3N5c2N0bF9pbml0X25ldGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHNtY19zeXNjdGxfbmV0X2luaXRgLgoKTmV4dCwgSSBzaG91bGQgY2hlY2sgYG5ldC9zeXNjdGxfbmV0LmNgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCwgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBzYWZlIHN5c2N0bCBzeXN0ZW0gaXMgZW5zdXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnN1cmVfc2FmZV9uZXRfc3lzY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zeXNjdGxfbmV0LmM9OTU9X19pbml0IGludCBuZXRfc3lzY3RsX2luaXQodm9pZClcbi0tXG5uZXQvc3lzY3RsX25ldC5jLTEyMi0gKi9cbm5ldC9zeXNjdGxfbmV0LmM6MTIzOnN0YXRpYyBpbnQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG5uZXQvc3lzY3RsX25ldC5jLTEyNC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4tLVxubmV0L3N5c2N0bF9uZXQuYz0xNjM9c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zeXNjdGxfbmV0LmMtMTY4LVx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG5uZXQvc3lzY3RsX25ldC5jOjE2OTpcdFx0aWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpXG5uZXQvc3lzY3RsX25ldC5jLTE3MC1cdFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE5ldG5zIENyZWF0aW9uIEZhaWx1cmVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2F1c2luZyBtZSB0byByZS1ldmFsdWF0ZSBob3cgd2UgaGFuZGxlIG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCDigJMgaXQmIzM5O3Mgbm93IHJldHVybmluZyBhbiBlcnJvciwgd2hpY2gsIGluIHR1cm4sIGNhdXNlcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgdG8gcmV0dXJuIE5VTEwuIFRoYXQmIzM5O3MgYSBkaXJlY3QgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXRucyBjcmVhdGlvbiBhcmUgY29uY2VybmluZy4gSXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmVzIGlmIGFueSBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkIG9yIHZpb2xhdGUgb3VyIHNhZmV0eSBydWxlcywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBzeXNjdGwgdGFibGUgZHVwbGljYXRpb24uCgpNeSBmb2N1cyBpcyBzaGlmdGluZyB0byBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCwgb2J2aW91c2x5LCBidXQgYWxzbyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3lzY3RsIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBpbmNsdWRpbmcgYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHhmcm00X25ldF9zeXNjdGxfaW5pdGAsIGB4ZnJtNl9uZXRfc3lzY3RsX2luaXRgLCBgbmZfbHd0dW5uZWxfbmV0X2luaXRgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyYC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGhvb2tzIGludG8gdGhlIG5ldCBuYW1lc3BhY2UmIzM5O3Mgc3lzY3RsIHNldHVwLgoKVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGlzIHdoZXRoZXIgYHN5c2N0bF9jb3JlX25ldF9pbml0YCBpcyBzdGF0aWMgb3IgZ2xvYmFsLCBzbyBJIGNhbiBlc3RhYmxpc2ggaG93IGZhciByZWFjaGluZyBpdHMgYWZmZWN0cy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBtaWdodCBsZWFkIHRvIGFuIGVhcmx5IGV4aXQgZHVyaW5nIG5ldG5zIGNyZWF0aW9uIGR1ZSB0byBhIE5VTEwgcmV0dXJuIGZyb20gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJJiMzOTttIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBzdGFjaywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGVycm9yIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c2N0bF9jb3JlX25ldF9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTY4MT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNzM5LVx0fSxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjc0MDpcdC8qIHN5c2N0bF9jb3JlX25ldF9pbml0KCkgd2lsbCBzZXQgdGhlIHZhbHVlcyBhZnRlciB0aGlzXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy03NDEtXHQgKiB0byByZWFkb25seSBpbiBuZXR3b3JrIG5hbWVzcGFjZXNcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz03OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy04MTEtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo4MTI6c3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTgxMy17XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9ODUwPXN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgc3lzY3RsX2NvcmVfb3BzID0ge1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODUxOlx0LmluaXQgPSBzeXNjdGxfY29yZV9uZXRfaW5pdCxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTg1Mi1cdC5leGl0ID0gc3lzY3RsX2NvcmVfbmV0X2V4aXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipTdGF0aWMgRnVuY3Rpb25zIGluIEZvY3VzU3ltYm9sczogQSBRdWljayBSZXZpZXcqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBUaGUgZ29hbCBpcyB0byBrZWVwIGl0IGNsZWFuLCBmb2N1c2VkLCBhbmQgaWRlYWxseSwgYXZvaWQgaW5jbHVkaW5nIHN0YXRpYyBmdW5jdGlvbnMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlbiYjMzk7dCBleHRlcm5hbGx5IHZpc2libGUsIHNvIGluY2x1ZGluZyB0aGVtIGRvZXNuJiMzOTt0IHJlYWxseSBzZXJ2ZSBhIHB1cnBvc2UgaW4gYSBzeW1ib2wgdGFibGUsIGFuZCBjb3VsZCBsZWFkIHRvIHVubmVjZXNzYXJ5IGJsb2F0LgoKQnV0IHRoZW4gSSBzZWUgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJdCYjMzk7cyBleHBvcnRlZCwgd2hpY2ggdGhyb3dzIGEgd3JlbmNoIGluIHRoaXMgJiMzNDtubyBzdGF0aWNzJiMzNDsgYXBwcm9hY2guIEl0JiMzOTtzICpzdXBwb3NlZCogdG8gYmUgaW4gdGhpcyB0aGluZywgYmVjYXVzZSBpdCYjMzk7cyBub24tc3RhdGljIGFuZCB2aXNpYmxlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLgoKTm93LCB3aGF0IGFib3V0IGB1bml4X3N5c2N0bF9yZWdpc3RlcmA/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGl0cyBhdHRyaWJ1dGVzLiBJcyB0aGF0IHN0YXRpYywgdG9vPyBJZiBzbywgd2UmIzM5O3JlIGNvbnNpc3RlbnQ7IGlmIG5vdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBwb2ludCB0byBjb25zaWRlciBpbiBtYWtpbmcgYSBjaGFuZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBpbiBlYWNoIGNhdGVnb3J5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF9zeXNjdGxfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTM4MDY9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODEwLVx0bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4gPSAxMDtcbm5ldC91bml4L2FmX3VuaXguYzozODExOlx0aWYgKHVuaXhfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXG5uZXQvdW5peC9hZl91bml4LmMtMzgxMi1cdFx0Z290byBvdXQ7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5oPTM3PWxvbmcgdW5peF9vdXRxX2xlbihzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbm5ldC91bml4L2FmX3VuaXguaC00MC0jaWZkZWYgQ09ORklHX1NZU0NUTFxubmV0L3VuaXgvYWZfdW5peC5oOjQxOmludCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3VuaXgvYWZfdW5peC5oLTQyLXZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3VuaXgvYWZfdW5peC5oLTQzLSNlbHNlXG5uZXQvdW5peC9hZl91bml4Lmg6NDQ6c3RhdGljIGlubGluZSBpbnQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3VuaXgvYWZfdW5peC5oLTQ1LXtcbi0tXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYz0yNj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdW5peF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jLTM4LVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmM6Mzk6aW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFN5c2N0bCBSZWdpc3RyYXRpb24qKgoKSG1tLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGlzbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IHByb21wdHMgYSBxdWVzdGlvbi4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBhbmFsb2dvdXMgaW4gdGhlIGB2c29ja2Agc3Vic3lzdGVtLiBXaGF0JiMzOTtzIHRoZSBzY29wZSBvZiB0aGUgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24/IElzIGl0IGFsc28gbm9uLXN0YXRpYywgb3IgaXMgaXQgaGFuZGxlZCBkaWZmZXJlbnRseT8gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHN5c2N0bCBpbnRlcmZhY2VzIGFyZSBleHBvc2VkIGFuZCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlZmFjdG9yaW5nIG9yIG1vZHVsYXJpdHkgY29uY2VybnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBpcyBjb25zaXN0ZW50IGFjcm9zcyB0aGVzZSByZWxhdGVkIGFyZWFzLiBMZXQgbWUgbG9vayBpbnRvIHRoYXQgaW1tZWRpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX3N5c2N0bF9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdnNvY2tfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk0Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTQzOnN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5NDQte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTkxPXN0YXRpYyBfX25ldF9pbml0IGludCB2c29ja19zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTk0LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5OTU6XHRpZiAodnNvY2tfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk5Ni1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFN0YXRpYyBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlIG9yIGRhdGEgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsbHkgKnN0YXRpYyouIFRoZXJlJiMzOTtzIGEgY2VydGFpbiBpbW1vYmlsaXR5IG9yIGZpeGVkIG5hdHVyZSB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IHN0cmlraW5nLiBUaGF0IGluaXRpYWwgYXNzZXNzbWVudCBoZWxwcyBtZSBmb2N1cy4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGNoYXJ0aW5nIG91dCB3aGVyZSB0byBsb29rIGZvciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyAmIzM0O3N0YXRpYyYjMzQ7IGNoYXJhY3RlcmlzdGljLiBXaGF0IGxpbWl0YXRpb25zIGRvZXMgaXQgaW1wb3NlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBvciBkeW5hbWljIGNvbmZpZ3VyYXRpb24/IElzIGl0IHRydWx5IHN0YXRpYyBhY3Jvc3MgaXRzIGxpZmVjeWNsZSwgb3IgZG9lcyBpdCB1bmRlcmdvIHNvbWUgaW5pdGlhbGl6YXRpb24gdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdmFyaWFiaWxpdHk/CgpOb3csIHRoZSBtZW50aW9uIG9mIGBzbWNfc3lzY3RsX25ldF9pbml0YC4uLiBteSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3N5c2N0bF9uZXRfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTM0MTE9c3RhdGljIF9fbmV0X2luaXQgaW50IHNtY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zNDE0LVxubmV0L3NtYy9hZl9zbWMuYzozNDE1Olx0cmMgPSBzbWNfc3lzY3RsX25ldF9pbml0KG5ldCk7XG5uZXQvc21jL2FmX3NtYy5jLTM0MTYtXHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuYy0yMTMtXG5uZXQvc21jL3NtY19zeXNjdGwuYzoyMTQ6aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc21jL3NtY19zeXNjdGwuYy0yMTUte1xuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5oLTE3LVxubmV0L3NtYy9zbWNfc3lzY3RsLmg6MTg6aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmgtMTktdm9pZCBfX25ldF9leGl0IHNtY19zeXNjdGxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KTtcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuaC0yMi1cbm5ldC9zbWMvc21jX3N5c2N0bC5oOjIzOnN0YXRpYyBpbmxpbmUgaW50IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3NtYy9zbWNfc3lzY3RsLmgtMjQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA3MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTm9uLVN0YXRpYyBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSAqbm90KiBzdGF0aWMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBkeW5hbWljLCBzb21ldGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2luZyB1bmRlcmZvb3QsIGFuZCB0aGF0IGhhcyBhbGwgc29ydHMgb2YgaW1wbGljYXRpb25zIGZvciB0aHJlYWQgc2FmZXR5LCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgb3ZlcmFsbCBwcmVkaWN0YWJpbGl0eS4gR290dGEga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLiBNeSBjb25jZXJuIGlzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBub3QgZml4ZWQsIHRoYXQgdGhlcmUgaXMgY29uc3RhbnQgY2hhbmdlIHdpdGhpbiB0aGUgc3RydWN0dXJlLgoKVGhlbiwgdGhlIG1pbmQganVtcHMgdG8gYSBzcGVjaWZpYyBwb2ludDogV2hhdCBhYm91dCBgbmZfbHd0dW5uZWxfbmV0X2luaXRgPyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIGFyZWEsIGFuZCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGNvbnNpZGVyIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhhdCBmdW5jdGlvbi4gV2hhdCBpcyBpdCByZXNwb25zaWJsZSBmb3I/IERvZXMgaXQgaG9sZCB0aGUga2V5IHRvIHRoZSBkeW5hbWljIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nPyBJcyB0aGVyZSBzb21lIGluaXRpYWxpemF0aW9uIHdvcmsgYmVpbmcgZG9uZSB0aGVyZSB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGlzPyBJdCYjMzk7cyB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCB0byBleGFtaW5lIGZyb20gaGVyZS4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIHNvIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbm9uLXN0YXRpYyBzdHJ1Y3R1cmUsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfbHd0dW5uZWxfbmV0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jPTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYy02Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYzo2NzpzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jLTY4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgbmZfbHd0dW5uZWxfbmV0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYzoxMDc6XHQuaW5pdCA9IG5mX2x3dHVubmVsX25ldF9pbml0LFxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jLTEwOC1cdC5leGl0ID0gbmZfbHd0dW5uZWxfbmV0X2V4aXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjMyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBhIEtleSBRdWVzdGlvbioqCgpSaWdodCwgdGhpcyBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGJlZ3MgdGhlIHF1ZXN0aW9uOiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZSBgeGZybTRfbmV0X3N5c2N0bF9pbml0YD8gSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgYXJlYSBvZiBpbnRlcmVzdCBoZXJlLCBhbmQgdGhhdCBwYXJ0aWN1bGFyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFsd2F5cyBqdW1wcyBvdXQgYXQgbWUgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3Qgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gU3RhdGljIGFueXRoaW5nIGNvdWxkIGJlIGEgY29uZmlnIG9wdGlvbiwgb3IgbWF5YmUgc29tZXRoaW5nIHN0YXRpY2FsbHkgYm91bmQgYXQgYnVpbGR0aW1lIGFuZCBJJiMzOTttIHRyeWluZyB0byBhc2NlcnRhaW4gd2hhdCB0aGF0ICYjMzQ7c3RhdGljbmVzcyYjMzQ7IGFjdHVhbGx5IGltcGxpZXMuIFRoZSByZWxhdGlvbnNoaXAgdG8gYHhmcm00X25ldF9zeXNjdGxfaW5pdGAgaXMgbXkgcHJpbWFyeSB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9uZXRfc3lzY3RsX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQveGZybTRfcG9saWN5LmM9MTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0xNjctXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzoxNjg6c3RhdGljIF9fbmV0X2luaXQgaW50IHhmcm00X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0xNjkte1xuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTE5NT1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHhmcm00X25ldF9zeXNjdGxfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMjA3LSNlbHNlIC8qIENPTkZJR19TWVNDVEwgKi9cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jOjIwODpzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMjA5LXtcbi0tXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYz0yMTg9c3RhdGljIGludCBfX25ldF9pbml0IHhmcm00X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0yMjctXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzoyMjg6XHRyZXQgPSB4ZnJtNF9uZXRfc3lzY3RsX2luaXQobmV0KTtcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTIyOS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBc3Nlc3NtZW50IG9mIGEgU3RhdGljIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgc2l0dWF0aW9uIGlzIGVzc2VudGlhbGx5IHN0YXRpYy4gTm90aGluZyBkeW5hbWljLiBJdCYjMzk7cyBhIHNuYXBzaG90LCBhIGZpeGVkIHN0YXRlLiBUaGVuLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3Q6IGBpcHY0X3N5c2N0bF9pbml0X25ldGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZnVuY3Rpb24gd2l0aGluIHRoaXMgY29udGV4dC4gQ291bGQgdGhlIGN1cnJlbnQgc3RhdGUgcmVsYXRlIHRvIG9yIGJlIGluZmx1ZW5jZWQgYnkgaG93IHRoZSBJUHY0IHN5c2N0bCBzZXR0aW5ncyBhcmUgaW5pdGlhbGl6ZWQgYXQgdGhlIG5ldHdvcmsgbGV2ZWw/IEkmIzM5O20gY3VyaW91cyBpZiB0aGlzIHN0YXRpYyBjaGFyYWN0ZXJpc3RpYyBpcyBhIGRpcmVjdCByZXN1bHQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMsIGEgc3RhdGljIGRlZmF1bHQgY29uZmlndXJhdGlvbiBiZWluZyBwcmVzZXJ2ZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBvbiB0aGF0IGZyb250LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY0X3N5c2N0bF9pbml0X25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0xNjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICppcHY0X25ldF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTE2ODUtXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxNjg2OnN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNjg3LXtcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0xNzMwPXN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2NF9zeXNjdGxfb3BzID0ge1xubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTczMTpcdC5pbml0ID0gaXB2NF9zeXNjdGxfaW5pdF9uZXQsXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNzMyLVx0LmV4aXQgPSBpcHY0X3N5c2N0bF9leGl0X25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NzgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgU3lzY3RsIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RhdGljIG92ZXJhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZG9pbmcgc29tZXRoaW5nIGR5bmFtaWMuIEZyb20gdGhlIGluaXRpYWwgc2NhbiwgaXQgbG9va3MgbGlrZSBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgc21jX3N5c2N0bF9uZXRfaW5pdGAgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uIHNpbmNlIHRoZXkmIzM5O3JlIHRoZSBub24tc3RhdGljIG9uZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCwgb3IgcGVyaGFwcyBldmVuIG5vbi1zdGF0aWMsIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gYGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXJgLCBgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXBgLCBhbmQgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAgYXJlIGFsbCBzdGF0aWMsIHNvIHRoZXkgYXJlIG5vdCBhcyBjcml0aWNhbCBpbiB0aGlzIGNvbnRleHQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGluIGBuZXQvc3lzY3RsX25ldC5jYC4gWWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB3aGljaCBtYWtlcyBpdCBhIGxpa2VseSBrZXkgcG9pbnQgb2YgZW50cnkuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIGluIGBuZXQvc3lzY3RsX25ldC5jYCBpcyBpbnZvbHZlZCBoZXJlLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIFJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgYnkgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLgoKU28sIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBzZWVtcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZS4gSWYgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMsIHRoZW4gbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgdGhlIHdheSB0byBkbyBpdCwgYmVjYXVzZSB0aGlzIGNvZGUgaXMgY2FsbGVkIGR1cmluZyB0aGF0IHByb2Nlc3MuIFNvLCBjb21tYW5kcyBsaWtlIGB1bnNoYXJlKENMT05FX05FV05FVClgIHdvdWxkIGJlIGlkZWFsIGZvciB0cmlnZ2VyaW5nIHRoaXMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBjb25maWdzIG5lZWQgdG8gYmUgZW5hYmxlZDogYE5FVF9OU2AsIGBTWVNDVExgLCBgVU5JWGAsIGFuZCBgU01DYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgTkVUX05TYCBpcyBhIHZhbGlkIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9OUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTQ1MT1jb25maWcgUElEX05TXG4tLVxuaW5pdC9LY29uZmlnLTE0NTgtXG5pbml0L0tjb25maWc6MTQ1OTpjb25maWcgTkVUX05TXG5pbml0L0tjb25maWctMTQ2MC1cdGJvb2wgXCYjMzQ7TmV0d29yayBuYW1lc3BhY2VcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG4tLVxubmV0L0tjb25maWcuZGVidWctMTEtXG5uZXQvS2NvbmZpZy5kZWJ1ZzoxMjpjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIHJlZmNvdW50IHRyYWNraW5nXCYjMzQ7XG4tLVxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcbm5ldC9uc2gvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzMwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAmYW1wOyBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBpdGVtcyBoZXJlLiBJIHNlZSB0aGF0IGBORVRfTlNgIGlzIGEgY29uZmlnIG9wdGlvbiwgZGVmaW5pdGVseS4gQW5kIGBTWVNDVExgLCB5ZXAsIHRoYXQmIzM5O3MgYW5vdGhlciBvbmUuIFdlIGNhbiBhZGQgYFVOSVhgIGFuZCBgU01DYCB0byB0aGUgbGlzdC4gTm93LCBzaW5jZSBgU01DYCBpcyBhIHJlbGF0aXZlbHkgY29tcGxleCBvcHRpb24sIEkgd2FudCB0byBxdWlja2x5IHZlcmlmeSBpZiBpdCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVtZW50cy4gSXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBhIGNvbmZpZ3VyYXRpb24gaXRlbSBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnPTE0Nj1jb25maWcgSTJDX1NQSV9TTUMxX1VDT0RFX1BBVENIXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZy0xNTAtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnOjE1MTpjb25maWcgU01DX1VDT0RFX1BBVENIXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7U01DIHJlbG9jYXRpb24gcGF0Y2hcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9TTVNDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWctMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc6MjI6Y29uZmlnIFNNQzkxWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7U01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipDb25maWd1cmF0aW9uIERlZXAgRGl2ZTogU01DICZhbXA7IFZTT0NLRVRTKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyByaWdodC4gVGhlIGBTTUNgIGVudHJ5LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIGVsZW1lbnQuIEdvdCBpdC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGl2b3QgYW5kIGRlbHZlIGludG8gdGhlIGBWU09DS0VUU2Agc2V0dGluZ3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0IHRoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2UgYXNwZWN0cyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZTT0NLRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZy01LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTYzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqT2theSwgTGV0JiMzOTtzIEdldCBUaGlzIFN0cmFpZ2h0KioKClJpZ2h0LCBzbyBgVlNPQ0tFVFNgIGlzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgZ290IGl0LiBObyBuZWVkIHRvIHNlY29uZC1ndWVzcyB0aGF0LiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byBgWEZSTWAuIFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2UgaW4gdGhpcyBwdXp6bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBhbGwgc3F1YXJlZCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDc1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqWEZSTSBDb25maWd1cmF0aW9uIENoZWNrKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgd2F5IHRvIGdvIGZvciBlbmFibGluZyBYRlJNLiBUaGF0IG1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLiBOb3csIGJlZm9yZSBJIGp1bXAgdG9vIGZhciBkb3duIHRoYXQgcmFiYml0IGhvbGUsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgb24gdGhlIGBMV1RVTk5FTGAgc3VwcG9ydC4gR290dGEgbWFrZSBzdXJlIHRob3NlIHR1bm5lbHMgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExXVFVOTkVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ0Mz1zb3VyY2UgXCYjMzQ7bmV0L2lmZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00NDQtXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXG5uZXQvS2NvbmZpZy00NDYtXHRib29sIFwmIzM0O05ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy00NTItXG5uZXQvS2NvbmZpZzo0NTM6Y29uZmlnIExXVFVOTkVMX0JQRlxubmV0L0tjb25maWctNDU0LVx0Ym9vbCBcJiMzNDtFeGVjdXRlIEJQRiBwcm9ncmFtIGFzIHJvdXRlIG5leHRob3AgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzUzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHllcCwgdGhhdCBsb29rcyBsaWtlIGFuIGBMV1RVTk5FTGAgY29uZmlndXJhdGlvbiwgbm8gcXVlc3Rpb24gYWJvdXQgaXQuIE5vdywgZ2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIG1pZ2h0IGJlIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBgTkZfQ09OTlRSQUNLYCBpcyBiZWhhdmluZyBpbiByZWxhdGlvbiB0byB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBmbG93aW5nIGFzIEkgZXhwZWN0IGl0IHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9MjY9ZW5kaWYgIyBORl9UQUJMRVNfQlJJREdFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyODpjb25maWcgTkZfQ09OTlRSQUNLX0JSSURHRVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0lQdjQvSVBWNiBicmlkZ2UgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI3OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgTkZfQ09OTlRSQUNLYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQgZXhhY3RseSB0aGF0IGNvbmZpZyBvcHRpb24gaXMgZm9yLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBuZXR3b3JrIGZpbHRlcmluZyBpbmZyYXN0cnVjdHVyZSwgdGhhdCBtdWNoIEkmIzM5O20gc3VyZSBvZi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBTQ1RQYCBoYW5kbGluZyB0byBzZWUgaWYgdGhhdCBpbnRlcmFjdHMgd2l0aCBvciBpcyBhZmZlY3RlZCBieSB0aGUgYE5GX0NPTk5UUkFDS2Agc2V0dXAuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgYXMgaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TQ1RQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDkxCgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDE0ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgU3lzY3RsIFJlZ2lzdHJhdGlvbiBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYElQX1NDVFBgIGp1bXBzIG91dCBhcyBvbmUgb2YgdGhlIGNvbmZpZ3MgaW52b2x2ZWQuICBMZXQmIzM5O3Mgc2VlLCB0aGUgZnVsbCBsaXN0IGlzOiBgTkVUX05TYCwgYFNZU0NUTGAsIGBVTklYYCwgYFNNQ2AsIGBWU09DS0VUU2AsIGBYRlJNX1VTRVJgLCBgTFdUVU5ORUxgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBJUF9TQ1RQYC4gIFRoYXQgZ2l2ZXMgdXMgYSBzY29wZS4KCkkmIzM5O20ga2V5aW5nIGluIG9uIGEgZmV3IHN5bWJvbHMsIHNwZWNpZmljYWxseSBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgc21jX3N5c2N0bF9uZXRfaW5pdGAuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgdXNlZCBhbmQgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZC4gVGhlIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24sIEkgbm90aWNlLCBpcyBjb25kaXRpb25hbGx5IHN0YXRpYyBpbmxpbmUsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBDT05GSUdfU1lTQ1RMYCBpcyBkZWZpbmVkLiBCdXQgZXZlbiB3aGVuIGl0ICppcyogc2V0LCB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIG5vbi1zdGF0aWMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgc21jX3N5c2N0bF9uZXRfaW5pdGAgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBhcmUgYWxzbyBub24tc3RhdGljOyB5ZXMsIGBzbWNfc3lzY3RsX25ldF9pbml0YCBpcyBkZWZpbmVkIGluIGBuZXQvc21jL3NtY19zeXNjdGwuY2AgYW5kIGlzIG5vbi1zdGF0aWMsIHNvIGJvdGggYXJlIG5vbi1zdGF0aWMuCgpOb3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIG5vbi1zdGF0aWMgYW5kIHdlIG5lZWQgdG8gY29uc2lkZXI/IEkgc2VlIGBuZl9ob29rc19sd3R1bm5lbF9zeXNjdGxfaGFuZGxlcmAgaXMgZXhwb3J0ZWQsIGJ1dCBpdCBzZWVtcyB0aGF0IGZ1bmN0aW9uIGp1c3QgY2hhbmdlcyBhIGBjdGxfdGFibGVgIHRvIGBjb25zdGAgYW5kIGRvZXNuJiMzOTt0IGFmZmVjdCBuZXRucyBjcmVhdGlvbi4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IHRhYmxlcyBhcmUgZGVjbGFyZWQ6CmBgYGMKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewpgYGAKYW5kCmBgYGMKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7Ci0Jc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CmBgYApJdCBsb29rcyBsaWtlIGl0IGlzbiYjMzk7dCBkdXBsaWNhdGluZyB0aGUgdGFibGUgZm9yIGx3dHVubmVsIGJlY2F1c2UgbHd0dW5uZWwgc3lzY3RscyBkb24mIzM5O3QgaGF2ZSBwZXItbmV0bnMgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuCgpMZXQmIzM5O3Mgc2VlOiBgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlYCBoYXMgYC5kYXRhID0gTlVMTGAuICBTbyBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgd2lsbCBjaGVjayB0aGF0LCBhbmQgc2luY2UgaXQgaXMgYE5VTExgLCBpdCBzaG91bGQgcGFzcyB0aGlzIGNoZWNrOgpgYGBjCgkJaWYgKGVudC0mZ3Q7ZGF0YSA9PSBOVUxMKQoJCQljb250aW51ZTsKYGBgCk9rYXksIHNvIHRoYXQmIzM5O3Mgc2FmZS4gV2hhdCBhYm91dCBvdGhlciB0YWJsZXM/CgpJIHNlZSB0aGF0IGBuZl9jdF9zeXNjdGxfdGFibGVgLCBgeGZybV90YWJsZWAsIGBpcHY2X3RhYmxlX3RlbXBsYXRlYCwgYGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVgLCBgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlYCwgYW5kIGBjdGxfZm9yd2FyZF9lbnRyeWAgYXJlIGFsbCBqdXN0IG1hZGUgYGNvbnN0YC4KClNvLCB0aGUgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHhmcm00X25ldF9zeXNjdGxfaW5pdGAsIGB4ZnJtNl9uZXRfc3lzY3RsX2luaXRgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgLCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAsIGFuZCBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAuCgpOb3csIHRoZSBtYWluIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYW5kIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAuCgpMZXQmIzM5O3MgY29uZmlybTogIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBpcyB0aGUga2V5IEFQSSBmb3IgcmVnaXN0ZXJpbmcgbmV0d29yayBzeXNjdGxzLiAgVGhhdCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWU6IHllcywgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJJiMzOTttIGdvaW5nIHRvIGZ1enogdGhpcyEKCk5vdywgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKnJlcXVpcmVkKj8gSSYjMzk7dmUgZ290IGBDT05GSUdfU1lTQ1RMYCwgYENPTkZJR19ORVRfTlNgLCBgQ09ORklHX05FVGAsIGBDT05GSUdfVU5JWGAsIGBDT05GSUdfU01DYCwgYENPTkZJR19WU09DS0VUU2AsIGBDT05GSUdfWEZSTV9VU0VSYCwgYENPTkZJR19MV1RVTk5FTGAsIGBDT05GSUdfTkZfQ09OTlRSQUNLYCwgYW5kIGBDT05GSUdfSVBfU0NUUGAuIE9rYXksIGxldCYjMzk7cyBkb2N1bWVudCBhbGwgb2YgdGhpcyBmb3IgdGhlIGZ1enplci4KCmBgYGpzb24KewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfbmV0X3N5c2N0bF9zeiYjMzQ7LAogICAgJiMzNDtzbWNfc3lzY3RsX25ldF9pbml0JiMzNDssCiAgICAmIzM0O3VuaXhfc3lzY3RsX3JlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCByZWdpc3RyYXRpb24gZm9yIG5vbi1pbml0IG5ldHdvcmsgbmFtZXNwYWNlcywgY2hhbmdpbmcgaG93IHN5c2N0bCB0YWJsZXMgYXJlIGR1cGxpY2F0ZWQgYW5kIHZhbGlkYXRlZC4gSXQgaW50cm9kdWNlcyBhIHN0cmljdCBjaGVjayBpbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgdGhhdCByZXR1cm5zIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHBlcm1pc3Npb25zLCB3aGljaCBjYW4gY2F1c2UgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdG8gZmFpbCBpZiBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkLiBGdXp6aW5nIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfTlMmIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtMV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX25ldF9zeXNjdGxfc3omIzM0OywKICAgICYjMzQ7c21jX3N5c2N0bF9uZXRfaW5pdCYjMzQ7LAogICAgJiMzNDt1bml4X3N5c2N0bF9yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBzeXNjdGwgcmVnaXN0cmF0aW9uIGZvciBub24taW5pdCBuZXR3b3JrIG5hbWVzcGFjZXMsIGNoYW5naW5nIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBkdXBsaWNhdGVkIGFuZCB2YWxpZGF0ZWQuIEl0IGludHJvZHVjZXMgYSBzdHJpY3QgY2hlY2sgaW4gYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRoYXQgcmV0dXJucyBhbiBlcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5IG1vZGlmeWluZyBwZXJtaXNzaW9ucywgd2hpY2ggY2FuIGNhdXNlIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIHRvIGZhaWwgaWYgc3lzY3RscyBhcmUgbWlzY29uZmlndXJlZC4gRnV6emluZyBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiBhbmQgc3lzY3RsIHJlZ2lzdHJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uIGJ5IG1ha2luZyB0aGUgc3RhdGljIHRlbXBsYXRlIHRhYmxlcyBgY29uc3RgIGFuZCBtb3ZpbmcgdGhlIGR1cGxpY2F0aW9uIGxvZ2ljIGludG8gZGVkaWNhdGVkIGBfZHVwYCBmdW5jdGlvbnMuIFRoZSBkdXBsaWNhdGVkIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHVzaW5nIGBrbWVtZHVwKClgLCB3aGljaCBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGF0aWMgZ2xvYmFsIHRlbXBsYXRlcy4gU2luY2Ugc3RhdGljIGdsb2JhbCB2YXJpYWJsZXMgaW4gQyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCAoaW5jbHVkaW5nIGFueSBzdHJ1Y3QgcGFkZGluZyksIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGFibGVzIGFyZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG1lbW9yeSBsZWFrcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgb24gdGhlIGFsbG9jYXRlZCB0YWJsZXMpIHdpbGwgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDNmMjViMjUzNWY4MTY0MjNiZTg3ZmIzZTRjZjE2NGFmZGMzZGJlYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCmluZGV4IDUwMWFmMTk5OWZlODMuLmU1ZWU2NzNiOWZjZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKQEAgLTUyNSwxMiAmIzQzOzUyNSwxMyBAQCBzdHJ1Y3QgY3RsX3RhYmxlOwogI2lmZGVmIENPTkZJR19TWVNDVEwKIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCk7CiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsCi0JCQkJCSAgICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKTsKJiM0MzsJCQkJCQljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJCQlzaXplX3QgdGFibGVfc2l6ZSk7CiB2b2lkIHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsCi0JY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKQomIzQzOwljb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IGI1MDg2MThiZmMxMjMuLmViMzVkYTM1NTZmNGEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC02NzgsNyAmIzQzOzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKQogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtycHNfZGVmYXVsdF9tYXNrJiMzNDssCkBAIC03ODcsMjYgJiM0Mzs3ODcsMzggQEAgc3RhdGljIGludCBfX2luaXQgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXAoY2hhciAqc3RyKQogfQogX19zZXR1cCgmIzM0O2ZiX3R1bm5lbHM9JiMzNDssIGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKTsKIAotc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqbmV0bnNfY29yZV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShuZXRuc19jb3JlX3RhYmxlKTsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwl0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGJsKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJaWYgKHRibFtpXS5kYXRhID09ICZhbXA7c3lzY3RsX3dtZW1fbWF4KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJdGJsW2ldLmRhdGEgJiM0Mzs9IChjaGFyICopbmV0IC0gKGNoYXIgKikmYW1wO2luaXRfbmV0OwomIzQzOwl9CiYjNDM7CWZvciAoOyBpICZsdDsgdGFibGVfc2l6ZTsgJiM0MzsmIzQzO2kpCiYjNDM7CQl0YmxbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CiYjNDM7CiYjNDM7CXJldHVybiB0Ymw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibDsKIAogCXRibCA9IG5ldG5zX2NvcmVfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQlpbnQgaTsKLQkJdGJsID0ga21lbWR1cCh0YmwsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQl0YmwgPSBuZXRuc19jb3JlX3RhYmxlX2R1cChuZXQpOwogCQlpZiAodGJsID09IE5VTEwpCiAJCQlnb3RvIGVycl9kdXA7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7Ci0JCQlpZiAodGJsW2ldLmRhdGEgPT0gJmFtcDtzeXNjdGxfd21lbV9tYXgpCi0JCQkJYnJlYWs7Ci0KLQkJCXRibFtpXS5kYXRhICYjNDM7PSAoY2hhciAqKW5ldCAtIChjaGFyICopJmFtcDtpbml0X25ldDsKLQkJfQotCQlmb3IgKDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKQotCQkJdGJsW2ldLm1vZGUgJmFtcDs9IH4wMjIyOwogCX0KIAogCW5ldC0mZ3Q7Y29yZS5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L2NvcmUmIzM0OywgdGJsLCB0YWJsZV9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA0N2RlZDBmNjA3ZDRiLi5hOTBiZTU3YzYzYmUxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0yNzk2LDcgJiM0MzsyNzk2LDcgQEAgc3RhdGljIHZvaWQgZGV2aW5ldF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KQogCW5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtJmd0O2FycF9wYXJtcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7aXBfZm9yd2FyZCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2lwdjRfZGV2Y29uZi5kYXRhWwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCBjYTExODBkYmExZGVhLi4yZjAzNjNiY2EyYTg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtNjI0LDcgJiM0Mzs2MjQsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7dGNwX21heF90d19idWNrZXRzJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQuaXB2NC50Y3BfZGVhdGhfcm93LnN5c2N0bF9tYXhfdHdfYnVja2V0cywKQEAgLTE2NTQsMzUgJiM0MzsxNjU0LDQ1IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmlwdjRfbmV0X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CXRhYmxlID0ga21lbWR1cChpcHY0X25ldF90YWJsZSwgc2l6ZW9mKGlwdjRfbmV0X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGFibGVbaV0uZGF0YSkgewomIzQzOwkJCS8qIFVwZGF0ZSB0aGUgdmFyaWFibGVzIHRvIHBvaW50IGludG8KJiM0MzsJCQkgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0CiYjNDM7CQkJICovCiYjNDM7CQkJdGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDsKJiM0MzsJCQkgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBucwomIzQzOwkJCSAqLwomIzQzOwkJCXRhYmxlW2ldLm1vZGUgJmFtcDs9IH4wMjIyOwomIzQzOwkJfQomIzQzOwkJaWYgKHRhYmxlW2ldLmV4dHJhMiAmZ3Q7PSAodm9pZCAqKSZhbXA7aW5pdF9uZXQuaXB2NCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGFibGVbaV0uZXh0cmEyICZsdDsgKHZvaWQgKikoJmFtcDtpbml0X25ldC5pcHY0ICYjNDM7IDEpKQomIzQzOwkJCXRhYmxlW2ldLmV4dHJhMiAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHRhYmxlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKIAl0YWJsZSA9IGlwdjRfbmV0X3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKLQkJaW50IGk7Ci0KLQkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gaXB2NF9uZXRfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFibGVfc2l6ZTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmICh0YWJsZVtpXS5kYXRhKSB7Ci0JCQkJLyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50bwotCQkJCSAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXQKLQkJCQkgKi8KLQkJCQl0YWJsZVtpXS5kYXRhICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogRW50cmllcyB3aXRob3V0IGRhdGEgcG9pbnRlciBhcmUgZ2xvYmFsOwotCQkJCSAqIE1ha2UgdGhlbSByZWFkLW9ubHkgaW4gbm9uLWluaXRfbmV0IG5zCi0JCQkJICovCi0JCQkJdGFibGVbaV0ubW9kZSAmYW1wOz0gfjAyMjI7Ci0JCQl9Ci0JCQlpZiAodGFibGVbaV0uZXh0cmEyICZndDs9ICh2b2lkICopJmFtcDtpbml0X25ldC5pcHY0ICZhbXA7JmFtcDsKLQkJCSAgICB0YWJsZVtpXS5leHRyYTIgJmx0OyAodm9pZCAqKSgmYW1wO2luaXRfbmV0LmlwdjQgJiM0MzsgMSkpCi0JCQkJdGFibGVbaV0uZXh0cmEyICYjNDM7PSAodm9pZCAqKW5ldCAtICh2b2lkICopJmFtcDtpbml0X25ldDsKLQkJfQogCX0KIAogCW5ldC0mZ3Q7aXB2NC5pcHY0X2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC9pcHY0JiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwppbmRleCA1OGZhZjFkZGQyYjE1Li5hYjdhMDEwMjlkNDkwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwpAQCAtMTQxLDcgJiM0MzsxNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyB4ZnJtNF9wb2xpY3lfYWZpbmZvID0gewogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lICAgICAgID0gJiMzNDt4ZnJtNF9nY190aHJlc2gmIzM0OywKIAkJLmRhdGEgICAgICAgICAgID0gJmFtcDtpbml0X25ldC54ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoLApAQCAtMTUxLDE4ICYjNDM7MTUxLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0gewogCX0sCiB9OwogCi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CiYjNDM7CXRhYmxlID0ga21lbWR1cCh4ZnJtNF9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLAomIzQzOwkJCUdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRhYmxlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7eGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRhYmxlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7CiAKIAl0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7Ci0JCXRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHhmcm00X3BvbGljeV90YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwkJdGFibGUgPSB4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3hmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7CiAJfQogCiAJaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L2lwdjQmIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggZWZiMjM4MDdhMDI2Mi4uYTk1YjAzNTE4MjRmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtMTM3NCw3ICYjNDM7MTM3NCw3IEBAIEVYUE9SVF9TWU1CT0woaWNtcHY2X2Vycl9jb252ZXJ0KTsKIHN0YXRpYyB1MzIgaWNtcHY2X2Vycm9yc19leHRlbnNpb25fbWFza19hbGwgPQogCUdFTk1BU0tfVTgoSUNNUF9FUlJfRVhUX0NPVU5UIC0gMSwgMCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtyYXRlbGltaXQmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5pcHY2LnN5c2N0bC5pY21wdjZfdGltZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDU5NjhjZTVhZDE1MDguLmI4MzNhNjQwMGM5NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtNjU1NSw3ICYjNDM7NjU1NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zeXNjdGxfcnRjYWNoZV9mbHVzaChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9CSYjMzQ7bWF4X3NpemUmIzM0OywKIAkJLmRhdGEJCT0JJmFtcDtpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemUsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCmluZGV4IGQyY2QzM2UyNjk4ZDUuLjFhMGEzNmRjZGFiYzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC02MSw3ICYjNDM7NjEsNyBAQCBwcm9jX3J0Nl9tdWx0aXBhdGhfaGFzaF9maWVsZHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgdm9pZCAqYgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O2JpbmR2Nm9ubHkmIzM0OywKIAkJLmRhdGEJCT0gJmFtcDtpbml0X25ldC5pcHY2LnN5c2N0bC5iaW5kdjZvbmx5LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCAzYjc0OTQ3NWY2ZWQ2Li41ZWMwNjNjYjRhYTQzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTg3LDcgJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKQogfQogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O3hmcm02X2djX3RocmVzaCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO2luaXRfbmV0Lnhmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2gsCkBAIC0xOTcsMTggJiM0MzsxOTcsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNl9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNl9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHhmcm02X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksCiYjNDM7CQkJR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNl9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKIAogCXRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlOwogCWlmICghbmV0X2VxKG5ldCwgJmFtcDtpbml0X25ldCkpIHsKLQkJdGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQl0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7eGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDsKIAl9CiAKIAloZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvaXB2NiYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBiZTI5NTNjN2Q3MDJlLi5mNGYyZDgyMTkyZDU0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC02MzksNyAmIzQzOzYzOSw3IEBAIGVudW0gbmZfY3Rfc3lzY3RsX2luZGV4IHsKIAlORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHsKIAlbTkZfU1lTQ1RMX0NUX01BWF0gPSB7CiAJCS5wcm9jbmFtZQk9ICYjMzQ7bmZfY29ubnRyYWNrX21heCYjMzQ7LAogCQkuZGF0YQkJPSAmYW1wO25mX2Nvbm50cmFja19tYXgsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMKaW5kZXggMmQ4OTBkZDA0ZmY4OS4uNGUxZWVmMWJhMGYxNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYwpAQCAtNTQsNyAmIzQzOzU0LDcgQEAgaW50IG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9ob29rc19sd3R1bm5lbF9zeXNjdGxfaGFuZGxlcik7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtuZl9ob29rc19sd3R1bm5lbCYjMzQ7LAogCQkuZGF0YQkJPSBOVUxMLApAQCAtNjYsOCAmIzQzOzY2LDggQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7CiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7Ci0Jc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKIAl0YWJsZSA9IG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zeXNjdGwuYyBiL25ldC9zY3RwL3N5c2N0bC5jCmluZGV4IGZjYTg0MDQ4NGViZjcuLjJiOTRjMjExNDI3ZGUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3N5c2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3N5c2N0bC5jCkBAIC05Miw3ICYjNDM7OTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7CiAjZGVmaW5lIFNDVFBfUEZfUkVUUkFOU19JRFggICAgMgogI2RlZmluZSBTQ1RQX1BTX1JFVFJBTlNfSURYICAgIDMKIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc2N0cF9uZXRfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0gewogCVtTQ1RQX1JUT19NSU5fSURYXSA9IHsKIAkJLnByb2NuYW1lCT0gJiMzNDtydG9fbWluJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQuc2N0cC5ydG9fbWluLApkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfc3lzY3RsLmMgYi9uZXQvc21jL3NtY19zeXNjdGwuYwppbmRleCBiMWVmZWQ1NDYyNDM1Li4wOWRhZDQ4MzM3ZjYxIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19zeXNjdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19zeXNjdGwuYwpAQCAtOTcsNyAmIzQzOzk3LDcgQEAgc3RhdGljIGludCBwcm9jX3NtY19oc19jdHJsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAogfQogI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi8KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O2F1dG9jb3JraW5nX3NpemUmIzM0OywKIAkJLmRhdGEgICAgICAgICAgID0gJmFtcDtpbml0X25ldC5zbWMuc3lzY3RsX2F1dG9jb3JraW5nX3NpemUsCkBAIC0xOTUsMTQgJiM0MzsxOTUsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7CiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqLwogfTsKIAotaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnNtY190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJdGFibGUgPSBrbWVtZHVwKHNtY190YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRhYmxlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0YWJsZV9zaXplOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRhYmxlW2ldLmRhdGEgJiM0Mzs9ICh2b2lkICopbmV0IC0gKHZvaWQgKikmYW1wO2luaXRfbmV0OwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO2ludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHNtY190YWJsZSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCiAJdGFibGUgPSBzbWNfdGFibGU7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkgewotCQlpbnQgaTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19TTUNfSFNfQ1RSTF9CUEYpCiAJCXN0cnVjdCBzbWNfaHNfY3RybCAqY3RybDsKIApAQCAtMjE0LDEyICYjNDM7MjI5LDkgQEAgaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJCXJjdV9yZWFkX3VubG9jaygpOwogI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi8KIAotCQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzbWNfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gc21jX3RhYmxlX2R1cChuZXQpOwogCQlpZiAoIXRhYmxlKQogCQkJZ290byBlcnJfYWxsb2M7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7IGkmIzQzOyYjNDM7KQotCQkJdGFibGVbaV0uZGF0YSAmIzQzOz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKSZhbXA7aW5pdF9uZXQ7CiAJfQogCiAJbmV0LSZndDtzbWMuc21jX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCAmIzM0O25ldC9zbWMmIzM0OywgdGFibGUsCmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuYwppbmRleCAxOWU4MDQ4MjQxYmFjLi4wN2Y4NDM0ZDQyNThjIDEwMDY0NAotLS0gYS9uZXQvc3lzY3RsX25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zeXNjdGxfbmV0LmMKQEAgLTExNCwxNiAmIzQzOzExNCwxNyBAQCBfX2luaXQgaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKQogCWdvdG8gb3V0OwogfQogCi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6CiYjNDM7LyogUmV0dXJuIGVycm9yIHdoZW4gc3lzY3RscyBmb3Igbm9uLWluaXQgbmV0bnMgYXJlIHVuc2FmZSBieSB2ZXJpZnlpbmc6CiAgKiAxKSBiZWluZyByZWFkLW9ubHksIG9yCiAgKiAyKSBoYXZpbmcgYSBkYXRhIHBvaW50ZXIgd2hpY2ggcG9pbnRzIG91dHNpZGUgb2YgdGhlIGdsb2JhbCBrZXJuZWwvbW9kdWxlCiAgKiAgICBkYXRhIHNlZ21lbnQsIGFuZCByYXRoZXIgaW50byB0aGUgaGVhcCB3aGVyZSBhIHBlci1uZXQgb2JqZWN0IHdhcwogICogICAgYWxsb2NhdGVkLgogICovCi1zdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCwKLQkJCQkgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpCiYjNDM7c3RhdGljIGludCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJICBzaXplX3QgdGFibGVfc2l6ZSkKIHsKLQlzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmVudDsKIAogCXByX2RlYnVnKCYjMzQ7UmVnaXN0ZXJpbmcgbmV0IHN5c2N0bCAobmV0ICVwKTogJXNcbiYjMzQ7LCBuZXQsIHBhdGgpOwogCWVudCA9IHRhYmxlOwpAQCAtMTQ5LDI0ICYjNDM7MTUwLDI0IEBAIHN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLAogCQllbHNlCiAJCQljb250aW51ZTsKIAotCQkvKiBJZiBpdCBpcyB3cml0YWJsZSBhbmQgcG9pbnRzIHRvIGtlcm5lbC9tb2R1bGUgZ2xvYmFsCi0JCSAqIGRhdGEsIHRoZW4gaXQmIzM5O3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLgotCQkgKi8KJiM0MzsJCS8qIFdhcm4gb24gbmV0bnMgbGVhay4gKi8KIAkJV0FSTigxLCAmIzM0O3N5c2N0bCAlcy8lczogZGF0YSBwb2ludHMgdG8gJXMgZ2xvYmFsIGRhdGE6ICVwc1xuJiMzNDssCi0JCSAgICAgcGF0aCwgZW50LSZndDtwcm9jbmFtZSwgd2hlcmUsIGVudC0mZ3Q7ZGF0YSk7CiYjNDM7CQkJcGF0aCwgZW50LSZndDtwcm9jbmFtZSwgd2hlcmUsIGVudC0mZ3Q7ZGF0YSk7CiAKLQkJLyogTWFrZSBpdCAmIzM0O3NhZmUmIzM0OyBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqLwotCQllbnQtJmd0O21vZGUgJmFtcDs9IH4wMjIyOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJY29uc3QgY2hhciAqcGF0aCwKLQkJCQkJCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAomIzQzOwkJCQkJCWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQkJCQkJc2l6ZV90IHRhYmxlX3NpemUpCiB7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkKLQkJZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTsKJiM0MzsJCWlmIChlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpKQomIzQzOwkJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIF9fcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKCZhbXA7bmV0LSZndDtzeXNjdGxzLCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCmluZGV4IGUwMmVkNmUzOTU1YzAuLjQ3NjYwZDU3MjZiYmQgMTAwNjQ0Ci0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jCkBAIC0xMyw3ICYjNDM7MTMsNyBAQAogCiAjaW5jbHVkZSAmIzM0O2FmX3VuaXguaCYjMzQ7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAmIzM0O21heF9kZ3JhbV9xbGVuJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQudW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbiwKQEAgLTIzLDE4ICYjNDM7MjMsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0gewogCX0sCiB9OwogCi1pbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAomIzQzOwl0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF0YWJsZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3VueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47CiYjNDM7CiYjNDM7CXJldHVybiB0YWJsZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CiAJaWYgKG5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0gdW5peF90YWJsZTsKIAl9IGVsc2UgewotCQl0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTsKIAkJaWYgKCF0YWJsZSkKIAkJCWdvdG8gZXJyX2FsbG9jOwotCi0JCXRhYmxlWzBdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjsKIAl9CiAKIAluZXQtJmd0O3VueC5jdGwgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgJiMzNDtuZXQvdW5peCYjMzQ7LCB0YWJsZSwKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCA2MjJkYmQwNDY3OTk0Li5jYWViZWY3M2VhNThkIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0yODk5LDcgJiM0MzsyODk5LDcgQEAgc3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDtuc19tb2RlJiMzNDssCiAJCS5kYXRhCQk9ICZhbXA7aW5pdF9uZXQudnNvY2subW9kZSwKQEAgLTI5MjUsMjAgJiM0MzsyOTI1LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7CiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp2c29ja190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCiYjNDM7CXRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdGFibGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdGFibGVbMF0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5tb2RlOwomIzQzOwl0YWJsZVsxXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLmNoaWxkX25zX21vZGU7CiYjNDM7CXRhYmxlWzJdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2suZzJoX2ZhbGxiYWNrOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiYjNDM7CiAJaWYgKG5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKSB7CiAJCXRhYmxlID0gdnNvY2tfdGFibGU7CiAJfSBlbHNlIHsKLQkJdGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCXRhYmxlID0gdnNvY2tfdGFibGVfZHVwKG5ldCk7CiAJCWlmICghdGFibGUpCiAJCQlnb3RvIGVycl9hbGxvYzsKLQotCQl0YWJsZVswXS5kYXRhID0gJmFtcDtuZXQtJmd0O3Zzb2NrLm1vZGU7Ci0JCXRhYmxlWzFdLmRhdGEgPSAmYW1wO25ldC0mZ3Q7dnNvY2suY2hpbGRfbnNfbW9kZTsKLQkJdGFibGVbMl0uZGF0YSA9ICZhbXA7bmV0LSZndDt2c29jay5nMmhfZmFsbGJhY2s7CiAJfQogCiAJbmV0LSZndDt2c29jay5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsICYjMzQ7bmV0L3Zzb2NrJiMzNDssIHRhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmMKaW5kZXggY2EwMDNlOGEwMzc2MC4uMzU3MTUyYTUwZmFmMSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jCkBAIC0xMyw3ICYjNDM7MTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9pbml0IF9feGZybV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB9CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtX3RhYmxlW10gPSB7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gJiMzNDt4ZnJtX2FldmVudF9ldGltZSYjMzQ7LAogCQkubWF4bGVuCQk9IHNpemVvZih1MzIpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwOQoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA4MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXNjdGwgVGFibGUgUmVnaXN0cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyBuZXR3b3JrIHN5c2N0bCB0YWJsZXMgZ2V0IHJlZ2lzdGVyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIGNoYW5naW5nIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byB3b3JrIHdpdGggYSBgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqYCBpbnN0ZWFkIG9mIGEgcGxhaW4gb25lLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkmIzM5O3JlIHRyeWluZyB0byBlbmZvcmNlIHNvbWUgaW1tdXRhYmlsaXR5IG9uIHRoZXNlIHRhYmxlcy4gVGhleSYjMzk7dmUgYWxzbyBnb25lIHRocm91Z2ggYW5kIG1hZGUgdmFyaW91cyBgc3RydWN0IGN0bF90YWJsZWAgZGVmaW5pdGlvbnMgYGNvbnN0YC4gVGhlIGtleSBoZXJlIGlzIHRoZSBkdXBsaWNhdGlvbiBzdHJhdGVneSBmb3IgbmV3IG5ldHdvcmsgbmFtZXNwYWNlcy4gSXQmIzM5O3MgdXNpbmcgYGttZW1kdXBgIHRvIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlYC4KCkFscmlnaHQsIGBrbWVtZHVwYC4uLiBpdCBhbGxvY2F0ZXMgbWVtb3J5IGFuZCB0aGVuIGNvcGllcyBkYXRhLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGlzLiBBaCwgaGVyZSYjMzk7cyB0aGUgYG5ldG5zX2NvcmVfdGFibGVfZHVwYCBmdW5jdGlvbjoKCmBgYGMKc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldCkKewoJc2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpOwoJc3RydWN0IGN0bF90YWJsZSAqdGJsOwoJaW50IGk7CgoJdGJsID0ga21lbWR1cChuZXRuc19jb3JlX3RhYmxlLCBzaXplb2YobmV0bnNfY29yZV90YWJsZSksIEdGUF9LRVJORUwpOwoJaWYgKCF0YmwpCgkJcmV0dXJuIE5VTEw7CgoJZm9yIChpID0gMDsgaSAmbHQ7IHRhYmxlX3NpemU7ICYjNDM7JiM0MztpKSB7CgkJaWYgKHRibFtpXS5kYXRhID09ICZhbXA7c3lzY3RsX3dtZW1fbWF4KQoJCQlicmVhazsKCgkJdGJsW2ldLmRhdGEgJiM0Mzs9IChjaGFyICopbmV0IC0gKGNoYXIgKikmYW1wO2luaXRfbmV0OwoJfQoJZm9yICg7IGkgJmx0OyB0YWJsZV9zaXplOyAmIzQzOyYjNDM7aSkKCQl0YmxbaV0ubW9kZSAmYW1wOz0gfjAyMjI7CgoJcmV0dXJuIHRibDsKfQpgYGAKCk9rYXksIHNvIHRoaXMgaXMganVzdCByZWZhY3RvcmluZyB0aGUgZHVwbGljYXRpb24gaW50byBhIGRlZGljYXRlZCBmdW5jdGlvbiBhbmQgZW5mb3JjaW5nIHRoZSBgY29uc3RgIG9uIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIG1ha2luZyBzdXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFdpdGggYGttZW1kdXBgLCBpdCBjb3BpZXMgYHNpemVvZihuZXRuc19jb3JlX3RhYmxlKWAgYnl0ZXMuIFNpbmNlIGBuZXRuc19jb3JlX3RhYmxlYCBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLCBhbnkgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgYXV0b21hdGljYWxseSB6ZXJvZWQgb3V0IGJ5IHRoZSBjb21waWxlci4gVGhhdCBtZWFucyB0aGUgZHVwbGljYXRlZCB0YWJsZSBpcyAqZnVsbHkgaW5pdGlhbGl6ZWQqIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIGhlcmUuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgdG8gZW5mb3JjZSBgY29uc3RgIG9uIHRoZXNlIHN0YXRpYyB0ZW1wbGF0ZXMgYW5kIG1vdmUgdGhlIGR1cGxpY2F0aW9uIGxvZ2ljIGFyb3VuZC4KCkFoLCBhbmQgdGhlcmUmIzM5O3MgYSBiZWhhdmlvciBjaGFuZ2Ugd2l0aCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgd2hpY2ggdXNlZCB0bzoKCmBgYGMKLQkJLyogTWFrZSBpdCAmIzM0O3NhZmUmIzM0OyBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqLwotCQllbnQtJmd0O21vZGUgJmFtcDs9IH4wMjIyOwpgYGAKCkFuZCBub3cgaXQgZG9lczoKCmBgYGMKJiM0MzsJCXJldHVybiAtRUFDQ0VTOwpgYGAKClNvLCBpbnN0ZWFkIG9mIHNpbGVudGx5IGRyb3BwaW5nIHdyaXRlIHBlcm1pc3Npb25zIG9uIGFuIHVuc2FmZSBzeXNjdGwsIGl0IG5vdyAqZmFpbHMqIHRoZSByZWdpc3RyYXRpb24uIFRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UsIGJ1dCBhZ2FpbiwgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYnV0IGBrbWVtZHVwYCBhbGxvY2F0ZXMgYW5kIGNvcGllcy4gVGhlIHNvdXJjZSBpcyBhIHN0YXRpYyBnbG9iYWwgdmFyaWFibGUuIFN0YXRpYyBnbG9iYWxzIGFyZSAqemVyby1pbml0aWFsaXplZCouIFNvLCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkLgoKU28uLi5ubyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIHJlZmFjdG9ycyBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uLiBJdCBtYWtlcyB0aGUgc3RhdGljIHRlbXBsYXRlcyBgY29uc3RgIGFuZCB1c2VzIGBrbWVtZHVwYCB0byBkdXBsaWNhdGUgdGhlbS4gU2luY2UgdGhlIHRlbXBsYXRlcyBhcmUgc3RhdGljLCB0aGV5JiMzOTtyZSBmdWxseSBpbml0aWFsaXplZCAoemVyb2VkIG91dCBieSB0aGUgY29tcGlsZXIpLiBga21lbWR1cGAgY29waWVzIHRoaXMgaW5pdGlhbGl6ZWQgZGF0YS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgaW52b2x2ZWQgaW4gY29udHJvbCBmbG93IHRoYXQgSSBjYW4gc2VlLiBLQVNBTiB3aWxsIGJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIGFueSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN5c2N0bCB0YWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHRhYmxlIHJlZ2lzdHJhdGlvbiBieSBtYWtpbmcgdGhlIHN0YXRpYyB0ZW1wbGF0ZSB0YWJsZXMgYGNvbnN0YCBhbmQgbW92aW5nIHRoZSBkdXBsaWNhdGlvbiBsb2dpYyBpbnRvIGRlZGljYXRlZCBgX2R1cGAgZnVuY3Rpb25zLiBUaGUgZHVwbGljYXRlZCB0YWJsZXMgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbWR1cCgpYCwgd2hpY2ggY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdGljIGdsb2JhbCB0ZW1wbGF0ZXMuIFNpbmNlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGluIEMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgKGluY2x1ZGluZyBhbnkgc3RydWN0IHBhZGRpbmcpLCB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRhYmxlcyBhcmUgY29tcGxldGVseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBtZW1vcnkgbGVha3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIG9uIHRoZSBhbGxvY2F0ZWQgdGFibGVzKSB3aWxsIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjI3Ljc2Njg3ODIzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODYyMzYzMzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiVU5JWFwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJMV1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnaXN0ZXJfbmV0X3N5c2N0bF9zelwiLFxuICAgIFwic21jX3N5c2N0bF9uZXRfaW5pdFwiLFxuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCByZWdpc3RyYXRpb24gZm9yIG5vbi1pbml0IG5ldHdvcmsgbmFtZXNwYWNlcywgY2hhbmdpbmcgaG93IHN5c2N0bCB0YWJsZXMgYXJlIGR1cGxpY2F0ZWQgYW5kIHZhbGlkYXRlZC4gSXQgaW50cm9kdWNlcyBhIHN0cmljdCBjaGVjayBpbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgdGhhdCByZXR1cm5zIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHBlcm1pc3Npb25zLCB3aGljaCBjYW4gY2F1c2UgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gdG8gZmFpbCBpZiBzeXNjdGxzIGFyZSBtaXNjb25maWd1cmVkLiBGdXp6aW5nIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozMzoyNy43NjY4ODIxMjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDE5OTQwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwM2YyNWIyNTM1ZjgxNjQyM2JlODdmYjNlNGNmMTY0YWZkYzNkYmViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxcbmluZGV4IDUwMWFmMTk5OWZlODMuLmU1ZWU2NzNiOWZjZjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXFxuQEAgLTUyNSwxMiArNTI1LDEzIEBAIHN0cnVjdCBjdGxfdGFibGU7XFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCk7XFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgc2l6ZV90IHRhYmxlX3NpemUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IHRhYmxlX3NpemUpO1xcbiB2b2lkIHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXFxuLVxcdGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcXG4rXFx0Y29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5pbmRleCBiNTA4NjE4YmZjMTIzLi5lYjM1ZGEzNTU2ZjRhIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXFxuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5AQCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJycHNfZGVmYXVsdF9tYXNrXFxcIixcXG5AQCAtNzg3LDI2ICs3ODcsMzggQEAgc3RhdGljIGludCBfX2luaXQgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXAoY2hhciAqc3RyKVxcbiB9XFxuIF9fc2V0dXAoXFxcImZiX3R1bm5lbHM9XFxcIiwgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApO1xcbiBcXG4tc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XFxuIFxcdHN0cnVjdCBjdGxfdGFibGUgKnRibDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHR0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGJsKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcXG4rXFx0XFx0aWYgKHRibFtpXS5kYXRhID09IFxcdTAwMjZzeXNjdGxfd21lbV9tYXgpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0dGJsW2ldLmRhdGEgKz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKVxcdTAwMjZpbml0X25ldDtcXG4rXFx0fVxcbitcXHRmb3IgKDsgaSBcXHUwMDNjIHRhYmxlX3NpemU7ICsraSlcXG4rXFx0XFx0dGJsW2ldLm1vZGUgXFx1MDAyNj0gfjAyMjI7XFxuK1xcbitcXHRyZXR1cm4gdGJsO1xcbit9XFxuK1xcbitzdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShuZXRuc19jb3JlX3RhYmxlKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsO1xcbiBcXG4gXFx0dGJsID0gbmV0bnNfY29yZV90YWJsZTtcXG4gXFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuLVxcdFxcdGludCBpO1xcbi1cXHRcXHR0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0dGJsID0gbmV0bnNfY29yZV90YWJsZV9kdXAobmV0KTtcXG4gXFx0XFx0aWYgKHRibCA9PSBOVUxMKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9kdXA7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGFibGVfc2l6ZTsgKytpKSB7XFxuLVxcdFxcdFxcdGlmICh0YmxbaV0uZGF0YSA9PSBcXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdHRibFtpXS5kYXRhICs9IChjaGFyICopbmV0IC0gKGNoYXIgKilcXHUwMDI2aW5pdF9uZXQ7XFxuLVxcdFxcdH1cXG4tXFx0XFx0Zm9yICg7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyArK2kpXFxuLVxcdFxcdFxcdHRibFtpXS5tb2RlIFxcdTAwMjY9IH4wMjIyO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZWNvcmUuc3lzY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcXFwibmV0L2NvcmVcXFwiLCB0YmwsIHRhYmxlX3NpemUpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmNcXG5pbmRleCA0N2RlZDBmNjA3ZDRiLi5hOTBiZTU3YzYzYmUxIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2RldmluZXQuY1xcbisrKyBiL25ldC9pcHY0L2RldmluZXQuY1xcbkBAIC0yNzk2LDcgKzI3OTYsNyBAQCBzdGF0aWMgdm9pZCBkZXZpbmV0X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpXFxuIFxcdG5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtXFx1MDAzZWFycF9wYXJtcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiaXBfZm9yd2FyZFxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aXB2NF9kZXZjb25mLmRhdGFbXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmNcXG5pbmRleCBjYTExODBkYmExZGVhLi4yZjAzNjNiY2EyYTg4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXFxuKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmNcXG5AQCAtNjI0LDcgKzYyNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwidGNwX21heF90d19idWNrZXRzXFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5pcHY0LnRjcF9kZWF0aF9yb3cuc3lzY3RsX21heF90d19idWNrZXRzLFxcbkBAIC0xNjU0LDM1ICsxNjU0LDQ1IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqaXB2NF9uZXRfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHR0YWJsZSA9IGttZW1kdXAoaXB2NF9uZXRfdGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRhYmxlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcXG4rXFx0XFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcXG4rXFx0XFx0XFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xcbitcXHRcXHRcXHQgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcXHUwMDI2aW5pdF9uZXQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcXG4rXFx0XFx0XFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHRhYmxlW2ldLm1vZGUgXFx1MDAyNj0gfjAyMjI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHRhYmxlW2ldLmV4dHJhMiBcXHUwMDNlPSAodm9pZCAqKVxcdTAwMjZpbml0X25ldC5pcHY0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0YWJsZVtpXS5leHRyYTIgXFx1MDAzYyAodm9pZCAqKShcXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxcbitcXHRcXHRcXHR0YWJsZVtpXS5leHRyYTIgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVxcdTAwMjZpbml0X25ldDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdGFibGU7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbiBcXHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlO1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4tXFx0XFx0aW50IGk7XFxuLVxcbi1cXHRcXHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xcbitcXHRcXHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlX2R1cChuZXQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4tXFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcXG4tXFx0XFx0XFx0XFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xcbi1cXHRcXHRcXHRcXHQgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0XFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcXHUwMDI2aW5pdF9uZXQ7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcXG4tXFx0XFx0XFx0XFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHRhYmxlW2ldLm1vZGUgXFx1MDAyNj0gfjAyMjI7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKHRhYmxlW2ldLmV4dHJhMiBcXHUwMDNlPSAodm9pZCAqKVxcdTAwMjZpbml0X25ldC5pcHY0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICB0YWJsZVtpXS5leHRyYTIgXFx1MDAzYyAodm9pZCAqKShcXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxcbi1cXHRcXHRcXHRcXHR0YWJsZVtpXS5leHRyYTIgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVxcdTAwMjZpbml0X25ldDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZWlwdjQuaXB2NF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9pcHY0XFxcIiwgdGFibGUsXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmNcXG5pbmRleCA1OGZhZjFkZGQyYjE1Li5hYjdhMDEwMjlkNDkwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXFxuKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmNcXG5AQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHhmcm00X3BvbGljeV9hZmluZm8gPSB7XFxuIH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lICAgICAgID0gXFxcInhmcm00X2djX3RocmVzaFxcXCIsXFxuIFxcdFxcdC5kYXRhICAgICAgICAgICA9IFxcdTAwMjZpbml0X25ldC54ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoLFxcbkBAIC0xNTEsMTggKzE1MSwzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuIHtcXG4gXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuK1xcbitcXHR0YWJsZSA9IGttZW1kdXAoeGZybTRfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSxcXG4rXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGFibGUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XFxuK1xcbitcXHRyZXR1cm4gdGFibGU7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyO1xcbiBcXG4gXFx0dGFibGUgPSB4ZnJtNF9wb2xpY3lfdGFibGU7XFxuIFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSkge1xcbi1cXHRcXHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0dGFibGUgPSB4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKG5ldCk7XFxuIFxcdFxcdGlmICghdGFibGUpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbi1cXG4tXFx0XFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XFxuIFxcdH1cXG4gXFxuIFxcdGhkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcXFwibmV0L2lwdjRcXFwiLCB0YWJsZSxcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jXFxuaW5kZXggZWZiMjM4MDdhMDI2Mi4uYTk1YjAzNTE4MjRmMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pY21wLmNcXG4rKysgYi9uZXQvaXB2Ni9pY21wLmNcXG5AQCAtMTM3NCw3ICsxMzc0LDcgQEAgRVhQT1JUX1NZTUJPTChpY21wdjZfZXJyX2NvbnZlcnQpO1xcbiBzdGF0aWMgdTMyIGljbXB2Nl9lcnJvcnNfZXh0ZW5zaW9uX21hc2tfYWxsID1cXG4gXFx0R0VOTUFTS19VOChJQ01QX0VSUl9FWFRfQ09VTlQgLSAxLCAwKTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X2ljbXBfdGFibGVfdGVtcGxhdGVbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJyYXRlbGltaXRcXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmljbXB2Nl90aW1lLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xcbmluZGV4IDU5NjhjZTVhZDE1MDguLmI4MzNhNjQwMGM5NDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcXG5AQCAtNjU1NSw3ICs2NTU1LDcgQEAgc3RhdGljIGludCBpcHY2X3N5c2N0bF9ydGNhY2hlX2ZsdXNoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY2X3JvdXRlX3RhYmxlX3RlbXBsYXRlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PVxcdFxcXCJtYXhfc2l6ZVxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PVxcdFxcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemUsXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcXG5pbmRleCBkMmNkMzNlMjY5OGQ1Li4xYTBhMzZkY2RhYmMxIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXFxuKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcXG5AQCAtNjEsNyArNjEsNyBAQCBwcm9jX3J0Nl9tdWx0aXBhdGhfaGFzaF9maWVsZHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgdm9pZCAqYlxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJiaW5kdjZvbmx5XFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5iaW5kdjZvbmx5LFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXFxuaW5kZXggM2I3NDk0NzVmNmVkNi4uNWVjMDYzY2I0YWE0MyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuY1xcbisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXFxuQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lICAgICAgID0gXFxcInhmcm02X2djX3RocmVzaFxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQueGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCxcXG5AQCAtMTk3LDE4ICsxOTcsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnhmcm02X3BvbGljeV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbitcXG4rXFx0dGFibGUgPSBrbWVtZHVwKHhmcm02X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksXFxuK1xcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRhYmxlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xcbitcXG4rXFx0cmV0dXJuIHRhYmxlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcXG4gXFxuIFxcdHRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlO1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4tXFx0XFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdHRhYmxlID0geGZybTZfcG9saWN5X3RhYmxlX2R1cChuZXQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4tXFxuLVxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xcbiBcXHR9XFxuIFxcbiBcXHRoZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9pcHY2XFxcIiwgdGFibGUsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xcbmluZGV4IGJlMjk1M2M3ZDcwMmUuLmY0ZjJkODIxOTJkNTQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuQEAgLTYzOSw3ICs2MzksNyBAQCBlbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuIFxcdE5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcXG4gXFx0W05GX1NZU0NUTF9DVF9NQVhdID0ge1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfbWF4XFxcIixcXG4gXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZuZl9jb25udHJhY2tfbWF4LFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcXG5pbmRleCAyZDg5MGRkMDRmZjg5Li40ZTFlZWYxYmEwZjE1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xcbkBAIC01NCw3ICs1NCw3IEBAIGludCBuZl9ob29rc19sd3R1bm5lbF9zeXNjdGxfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9ob29rc19sd3R1bm5lbFxcXCIsXFxuIFxcdFxcdC5kYXRhXFx0XFx0PSBOVUxMLFxcbkBAIC02Niw4ICs2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xcbiBcXG4gc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcXG4tXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbiBcXHR0YWJsZSA9IG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZTtcXG4gXFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmNcXG5pbmRleCBmY2E4NDA0ODRlYmY3Li4yYjk0YzIxMTQyN2RlIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL3N5c2N0bC5jXFxuKysrIGIvbmV0L3NjdHAvc3lzY3RsLmNcXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7XFxuICNkZWZpbmUgU0NUUF9QRl9SRVRSQU5TX0lEWCAgICAyXFxuICNkZWZpbmUgU0NUUF9QU19SRVRSQU5TX0lEWCAgICAzXFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xcbiBcXHRbU0NUUF9SVE9fTUlOX0lEWF0gPSB7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInJ0b19taW5cXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnNjdHAucnRvX21pbixcXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfc3lzY3RsLmMgYi9uZXQvc21jL3NtY19zeXNjdGwuY1xcbmluZGV4IGIxZWZlZDU0NjI0MzUuLjA5ZGFkNDgzMzdmNjEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfc3lzY3RsLmNcXG4rKysgYi9uZXQvc21jL3NtY19zeXNjdGwuY1xcbkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNtY190YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZSAgICAgICA9IFxcXCJhdXRvY29ya2luZ19zaXplXFxcIixcXG4gXFx0XFx0LmRhdGEgICAgICAgICAgID0gXFx1MDAyNmluaXRfbmV0LnNtYy5zeXNjdGxfYXV0b2Nvcmtpbmdfc2l6ZSxcXG5AQCAtMTk1LDE0ICsxOTUsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XFxuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXFxuIH07XFxuIFxcbi1pbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnNtY190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHR0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGFibGUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRhYmxlX3NpemU7IGkrKylcXG4rXFx0XFx0dGFibGVbaV0uZGF0YSArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXFx1MDAyNmluaXRfbmV0O1xcbitcXG4rXFx0cmV0dXJuIHRhYmxlO1xcbit9XFxuK1xcbitpbnQgX19uZXRfaW5pdCBzbWNfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbiBcXHR0YWJsZSA9IHNtY190YWJsZTtcXG4gXFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuLVxcdFxcdGludCBpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU01DX0hTX0NUUkxfQlBGKVxcbiBcXHRcXHRzdHJ1Y3Qgc21jX2hzX2N0cmwgKmN0cmw7XFxuIFxcbkBAIC0yMTQsMTIgKzIyOSw5IEBAIGludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi9cXG4gXFxuLVxcdFxcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpO1xcbitcXHRcXHR0YWJsZSA9IHNtY190YWJsZV9kdXAobmV0KTtcXG4gXFx0XFx0aWYgKCF0YWJsZSlcXG4gXFx0XFx0XFx0Z290byBlcnJfYWxsb2M7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKVxcbi1cXHRcXHRcXHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcXHUwMDI2aW5pdF9uZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdG5ldC1cXHUwMDNlc21jLnNtY19oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9zbWNcXFwiLCB0YWJsZSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmNcXG5pbmRleCAxOWU4MDQ4MjQxYmFjLi4wN2Y4NDM0ZDQyNThjIDEwMDY0NFxcbi0tLSBhL25ldC9zeXNjdGxfbmV0LmNcXG4rKysgYi9uZXQvc3lzY3RsX25ldC5jXFxuQEAgLTExNCwxNiArMTE0LDE3IEBAIF9faW5pdCBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpXFxuIFxcdGdvdG8gb3V0O1xcbiB9XFxuIFxcbi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6XFxuKy8qIFJldHVybiBlcnJvciB3aGVuIHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSB1bnNhZmUgYnkgdmVyaWZ5aW5nOlxcbiAgKiAxKSBiZWluZyByZWFkLW9ubHksIG9yXFxuICAqIDIpIGhhdmluZyBhIGRhdGEgcG9pbnRlciB3aGljaCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZ2xvYmFsIGtlcm5lbC9tb2R1bGVcXG4gICogICAgZGF0YSBzZWdtZW50LCBhbmQgcmF0aGVyIGludG8gdGhlIGhlYXAgd2hlcmUgYSBwZXItbmV0IG9iamVjdCB3YXNcXG4gICogICAgYWxsb2NhdGVkLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcXG4rc3RhdGljIGludCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3QgdGFibGVfc2l6ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmVudDtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xcXFxuXFxcIiwgbmV0LCBwYXRoKTtcXG4gXFx0ZW50ID0gdGFibGU7XFxuQEAgLTE0OSwyNCArMTUwLDI0IEBAIHN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0LyogSWYgaXQgaXMgd3JpdGFibGUgYW5kIHBvaW50cyB0byBrZXJuZWwvbW9kdWxlIGdsb2JhbFxcbi1cXHRcXHQgKiBkYXRhLCB0aGVuIGl0J3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLlxcbi1cXHRcXHQgKi9cXG4rXFx0XFx0LyogV2FybiBvbiBuZXRucyBsZWFrLiAqL1xcbiBcXHRcXHRXQVJOKDEsIFxcXCJzeXNjdGwgJXMvJXM6IGRhdGEgcG9pbnRzIHRvICVzIGdsb2JhbCBkYXRhOiAlcHNcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgcGF0aCwgZW50LVxcdTAwM2Vwcm9jbmFtZSwgd2hlcmUsIGVudC1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdFxcdHBhdGgsIGVudC1cXHUwMDNlcHJvY25hbWUsIHdoZXJlLCBlbnQtXFx1MDAzZWRhdGEpO1xcbiBcXG4tXFx0XFx0LyogTWFrZSBpdCBcXFwic2FmZVxcXCIgYnkgZHJvcHBpbmcgd3JpdGFibGUgcGVybXMgKi9cXG4tXFx0XFx0ZW50LVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH4wMjIyO1xcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcGF0aCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzaXplX3QgdGFibGVfc2l6ZSlcXG4ge1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxuLVxcdFxcdGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7XFxuK1xcdFxcdGlmIChlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdHJldHVybiBfX3JlZ2lzdGVyX3N5c2N0bF90YWJsZShcXHUwMDI2bmV0LVxcdTAwM2VzeXNjdGxzLCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xcbmluZGV4IGUwMmVkNmUzOTU1YzAuLjQ3NjYwZDU3MjZiYmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcXG4rKysgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xcbkBAIC0xMyw3ICsxMyw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYWZfdW5peC5oXFxcIlxcbiBcXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwibWF4X2RncmFtX3FsZW5cXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXFxuQEAgLTIzLDE4ICsyMywyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1pbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuIHtcXG4gXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbitcXHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCF0YWJsZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcXG4rXFxuK1xcdHJldHVybiB0YWJsZTtcXG4rfVxcbitcXG4raW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbitcXG4gXFx0aWYgKG5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4gXFx0XFx0dGFibGUgPSB1bml4X3RhYmxlO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0dGFibGUgPSB1bml4X3RhYmxlX2R1cChuZXQpO1xcbiBcXHRcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9hbGxvYztcXG4tXFxuLVxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZXVueC5jdGwgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC91bml4XFxcIiwgdGFibGUsXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmNhZWJlZjczZWE1OGQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuQEAgLTI4OTksNyArMjg5OSw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm5zX21vZGVcXFwiLFxcbiBcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXFxuQEAgLTI5MjUsMjAgKzI5MjUsMzEgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdnNvY2tfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4gXFxuK1xcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdGFibGUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLm1vZGU7XFxuK1xcdHRhYmxlWzFdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xcbitcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xcbitcXG4rXFx0cmV0dXJuIHRhYmxlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbmV0X2luaXQgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcXG4rXFxuIFxcdGlmIChuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuIFxcdFxcdHRhYmxlID0gdnNvY2tfdGFibGU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHRhYmxlID0ga21lbWR1cCh2c29ja190YWJsZSwgc2l6ZW9mKHZzb2NrX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdHRhYmxlID0gdnNvY2tfdGFibGVfZHVwKG5ldCk7XFxuIFxcdFxcdGlmICghdGFibGUpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX2FsbG9jO1xcbi1cXG4tXFx0XFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZuZXQtXFx1MDAzZXZzb2NrLm1vZGU7XFxuLVxcdFxcdHRhYmxlWzFdLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xcbi1cXHRcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNm5ldC1cXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXQtXFx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC92c29ja1xcXCIsIHRhYmxlLFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jIGIvbmV0L3hmcm0veGZybV9zeXNjdGwuY1xcbmluZGV4IGNhMDAzZThhMDM3NjAuLjM1NzE1MmE1MGZhZjEgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9zeXNjdGwuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcXG5AQCAtMTMsNyArMTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9pbml0IF9feGZybV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHtcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInhmcm1fYWV2ZW50X2V0aW1lXFxcIixcXG4gXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHUzMiksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjI5LjA2OTQ0ODk4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMzIwNjk2OTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiVU5JWFwiLFxuICAgIFwiU01DXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJMV1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVnaXN0ZXJfbmV0X3N5c2N0bF9zelwiLFxuICAgIFwic21jX3N5c2N0bF9uZXRfaW5pdFwiLFxuICAgIFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbmV0d29yayBzeXNjdGwgcmVnaXN0cmF0aW9uIGZvciBub24taW5pdCBuZXR3b3JrIG5hbWVzcGFjZXMsIGNoYW5naW5nIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBkdXBsaWNhdGVkIGFuZCB2YWxpZGF0ZWQuIEl0IGludHJvZHVjZXMgYSBzdHJpY3QgY2hlY2sgaW4gYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRoYXQgcmV0dXJucyBhbiBlcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5IG1vZGlmeWluZyBwZXJtaXNzaW9ucywgd2hpY2ggY2FuIGNhdXNlIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIHRvIGZhaWwgaWYgc3lzY3RscyBhcmUgbWlzY29uZmlndXJlZC4gRnV6emluZyBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiBhbmQgc3lzY3RsIHJlZ2lzdHJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDNmMjViMjUzNWY4MTY0MjNiZTg3ZmIzZTRjZjE2NGFmZGMzZGJlYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE0OjMzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5pbmRleCA1MDFhZjE5OTlmZTgzLi5lNWVlNjczYjlmY2Y4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmhcbkBAIC01MjUsMTIgKzUyNSwxMyBAQCBzdHJ1Y3QgY3RsX3RhYmxlO1xuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKTtcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKTtcbitcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbitcdFx0XHRcdFx0XHRzaXplX3QgdGFibGVfc2l6ZSk7XG4gdm9pZCB1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlcik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LFxuLVx0Y29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuK1x0Y29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5pbmRleCBiNTA4NjE4YmZjMTIzLi5lYjM1ZGEzNTU2ZjRhIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5AQCAtNjc4LDcgKzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0bnNfY29yZV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlBTKVxuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJycHNfZGVmYXVsdF9tYXNrXCIsXG5AQCAtNzg3LDI2ICs3ODcsMzggQEAgc3RhdGljIGludCBfX2luaXQgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXAoY2hhciAqc3RyKVxuIH1cbiBfX3NldHVwKFwiZmJfdHVubmVscz1cIiwgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXApO1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKm5ldG5zX2NvcmVfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7XG4rXHRpbnQgaTtcbitcbitcdHRibCA9IGttZW1kdXAobmV0bnNfY29yZV90YWJsZSwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGJsKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICsraSkge1xuK1x0XHRpZiAodGJsW2ldLmRhdGEgPT0gXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR0YmxbaV0uZGF0YSArPSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG4rXHR9XG4rXHRmb3IgKDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgKytpKVxuK1x0XHR0YmxbaV0ubW9kZSBcdTAwMjY9IH4wMjIyO1xuK1xuK1x0cmV0dXJuIHRibDtcbit9XG4rXG4rc3RhdGljIF9fbmV0X2luaXQgaW50IHN5c2N0bF9jb3JlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7XG4gXG4gXHR0YmwgPSBuZXRuc19jb3JlX3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0aW50IGk7XG4tXHRcdHRibCA9IGttZW1kdXAodGJsLCBzaXplb2YobmV0bnNfY29yZV90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YmwgPSBuZXRuc19jb3JlX3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAodGJsID09IE5VTEwpXG4gXHRcdFx0Z290byBlcnJfZHVwO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcbi1cdFx0XHRpZiAodGJsW2ldLmRhdGEgPT0gXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0dGJsW2ldLmRhdGEgKz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHR9XG4tXHRcdGZvciAoOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpXG4tXHRcdFx0dGJsW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2Vjb3JlLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvY29yZVwiLCB0YmwsIHRhYmxlX3NpemUpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuY1xuaW5kZXggNDdkZWQwZjYwN2Q0Yi4uYTkwYmU1N2M2M2JlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2RldmluZXQuY1xuKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jXG5AQCAtMjc5Niw3ICsyNzk2LDcgQEAgc3RhdGljIHZvaWQgZGV2aW5ldF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgaW5fZGV2aWNlICppZGV2KVxuIFx0bmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIoaWRldi1cdTAwM2VhcnBfcGFybXMpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBjdGxfZm9yd2FyZF9lbnRyeVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF9mb3J3YXJkX2VudHJ5W10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcImlwX2ZvcndhcmRcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpcHY0X2RldmNvbmYuZGF0YVtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG5pbmRleCBjYTExODBkYmExZGVhLi4yZjAzNjNiY2EyYTg4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG5AQCAtNjI0LDcgKzYyNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcInRjcF9tYXhfdHdfYnVja2V0c1wiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmlwdjQudGNwX2RlYXRoX3Jvdy5zeXNjdGxfbWF4X3R3X2J1Y2tldHMsXG5AQCAtMTY1NCwzNSArMTY1NCw0NSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmlwdjRfbmV0X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1x0aW50IGk7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoaXB2NF9uZXRfdGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcbitcdFx0aWYgKHRhYmxlW2ldLmRhdGEpIHtcbitcdFx0XHQvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvXG4rXHRcdFx0ICogdGhlIGN1cnJlbnQgc3RydWN0IG5ldFxuK1x0XHRcdCAqL1xuK1x0XHRcdHRhYmxlW2ldLmRhdGEgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIEVudHJpZXMgd2l0aG91dCBkYXRhIHBvaW50ZXIgYXJlIGdsb2JhbDtcbitcdFx0XHQgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBuc1xuK1x0XHRcdCAqL1xuK1x0XHRcdHRhYmxlW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbitcdFx0fVxuK1x0XHRpZiAodGFibGVbaV0uZXh0cmEyIFx1MDAzZT0gKHZvaWQgKilcdTAwMjZpbml0X25ldC5pcHY0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGFibGVbaV0uZXh0cmEyIFx1MDAzYyAodm9pZCAqKShcdTAwMjZpbml0X25ldC5pcHY0ICsgMSkpXG4rXHRcdFx0dGFibGVbaV0uZXh0cmEyICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbitcdH1cbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4rc3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXB2NF9uZXRfdGFibGUpO1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4gXHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0aW50IGk7XG4tXG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGlwdjRfbmV0X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRhYmxlID0gaXB2NF9uZXRfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkrKykge1xuLVx0XHRcdGlmICh0YWJsZVtpXS5kYXRhKSB7XG4tXHRcdFx0XHQvKiBVcGRhdGUgdGhlIHZhcmlhYmxlcyB0byBwb2ludCBpbnRvXG4tXHRcdFx0XHQgKiB0aGUgY3VycmVudCBzdHJ1Y3QgbmV0XG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHRhYmxlW2ldLmRhdGEgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHQvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7XG4tXHRcdFx0XHQgKiBNYWtlIHRoZW0gcmVhZC1vbmx5IGluIG5vbi1pbml0X25ldCBuc1xuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR0YWJsZVtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICh0YWJsZVtpXS5leHRyYTIgXHUwMDNlPSAodm9pZCAqKVx1MDAyNmluaXRfbmV0LmlwdjQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHRhYmxlW2ldLmV4dHJhMiBcdTAwM2MgKHZvaWQgKikoXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxuLVx0XHRcdFx0dGFibGVbaV0uZXh0cmEyICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZWlwdjQuaXB2NF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvaXB2NFwiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG5pbmRleCA1OGZhZjFkZGQyYjE1Li5hYjdhMDEwMjlkNDkwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmNcbisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG5AQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHhmcm00X3BvbGljeV9hZmluZm8gPSB7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcInhmcm00X2djX3RocmVzaFwiLFxuIFx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZpbml0X25ldC54ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoLFxuQEAgLTE1MSwxOCArMTUxLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp4ZnJtNF9wb2xpY3lfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbitcbitcdHRhYmxlID0ga21lbWR1cCh4ZnJtNF9wb2xpY3lfdGFibGUsIHNpemVvZih4ZnJtNF9wb2xpY3lfdGFibGUpLFxuK1x0XHRcdEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK3N0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbiBcbiBcdHRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRhYmxlID0geGZybTRfcG9saWN5X3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybTRfZHN0X29wcy5nY190aHJlc2g7XG4gXHR9XG4gXG4gXHRoZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvaXB2NFwiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmNcbmluZGV4IGVmYjIzODA3YTAyNjIuLmE5NWIwMzUxODI0ZjMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pY21wLmNcbisrKyBiL25ldC9pcHY2L2ljbXAuY1xuQEAgLTEzNzQsNyArMTM3NCw3IEBAIEVYUE9SVF9TWU1CT0woaWNtcHY2X2Vycl9jb252ZXJ0KTtcbiBzdGF0aWMgdTMyIGljbXB2Nl9lcnJvcnNfZXh0ZW5zaW9uX21hc2tfYWxsID1cbiBcdEdFTk1BU0tfVTgoSUNNUF9FUlJfRVhUX0NPVU5UIC0gMSwgMCk7XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZVx0PSBcInJhdGVsaW1pdFwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmljbXB2Nl90aW1lLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA1OTY4Y2U1YWQxNTA4Li5iODMzYTY0MDBjOTQ0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTY1NTUsNyArNjU1NSw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zeXNjdGxfcnRjYWNoZV9mbHVzaChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3JvdXRlX3RhYmxlX3RlbXBsYXRlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD1cdFwibWF4X3NpemVcIixcbiBcdFx0LmRhdGFcdFx0PVx0XHUwMDI2aW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X21heF9zaXplLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcbmluZGV4IGQyY2QzM2UyNjk4ZDUuLjFhMGEzNmRjZGFiYzEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcbkBAIC02MSw3ICs2MSw3IEBAIHByb2NfcnQ2X211bHRpcGF0aF9oYXNoX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCB2b2lkICpiXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJiaW5kdjZvbmx5XCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2Ni5zeXNjdGwuYmluZHY2b25seSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5pbmRleCAzYjc0OTQ3NWY2ZWQ2Li41ZWMwNjNjYjRhYTQzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG5AQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyB2b2lkIHhmcm02X3BvbGljeV9maW5pKHZvaWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZSAgICAgICA9IFwieGZybTZfZ2NfdGhyZXNoXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQueGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCxcbkBAIC0xOTcsMTggKzE5NywzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTZfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoeGZybTZfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTZfcG9saWN5X3RhYmxlKSxcbitcdFx0XHRHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xuK1xuK1x0cmV0dXJuIHRhYmxlO1xuK31cbitcbitzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7XG4gXG4gXHR0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHhmcm02X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2lwdjZcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5pbmRleCBiZTI5NTNjN2Q3MDJlLi5mNGYyZDgyMTkyZDU0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbkBAIC02MzksNyArNjM5LDcgQEAgZW51bSBuZl9jdF9zeXNjdGxfaW5kZXgge1xuIFx0TkZfU1lTQ1RMX0NUX0xBU1RfU1lTQ1RMLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4gXHRbTkZfU1lTQ1RMX0NUX01BWF0gPSB7XG4gXHRcdC5wcm9jbmFtZVx0PSBcIm5mX2Nvbm50cmFja19tYXhcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZl9jb25udHJhY2tfbWF4LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuaW5kZXggMmQ4OTBkZDA0ZmY4OS4uNGUxZWVmMWJhMGYxNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jXG5AQCAtNTQsNyArNTQsNyBAQCBpbnQgbmZfaG9va3NfbHd0dW5uZWxfc3lzY3RsX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfaG9va3NfbHd0dW5uZWxfc3lzY3RsX2hhbmRsZXIpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJuZl9ob29rc19sd3R1bm5lbFwiLFxuIFx0XHQuZGF0YVx0XHQ9IE5VTEwsXG5AQCAtNjYsOCArNjYsOCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbiBcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmNcbmluZGV4IGZjYTg0MDQ4NGViZjcuLjJiOTRjMjExNDI3ZGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zeXNjdGwuY1xuKysrIGIvbmV0L3NjdHAvc3lzY3RsLmNcbkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfdGFibGVbXSA9IHtcbiAjZGVmaW5lIFNDVFBfUEZfUkVUUkFOU19JRFggICAgMlxuICNkZWZpbmUgU0NUUF9QU19SRVRSQU5TX0lEWCAgICAzXG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc2N0cF9uZXRfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xuIFx0W1NDVFBfUlRPX01JTl9JRFhdID0ge1xuIFx0XHQucHJvY25hbWVcdD0gXCJydG9fbWluXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuc2N0cC5ydG9fbWluLFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3N5c2N0bC5jIGIvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbmluZGV4IGIxZWZlZDU0NjI0MzUuLjA5ZGFkNDgzMzdmNjEgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19zeXNjdGwuY1xuKysrIGIvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi9cbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCJhdXRvY29ya2luZ19zaXplXCIsXG4gXHRcdC5kYXRhICAgICAgICAgICA9IFx1MDAyNmluaXRfbmV0LnNtYy5zeXNjdGxfYXV0b2Nvcmtpbmdfc2l6ZSxcbkBAIC0xOTUsMTQgKzE5NSwyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzbWNfdGFibGVbXSA9IHtcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIH07XG4gXG4taW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnNtY190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXHRpbnQgaTtcbitcbitcdHRhYmxlID0ga21lbWR1cChzbWNfdGFibGUsIHNpemVvZihzbWNfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKVxuK1x0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbitcbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4raW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHNtY190YWJsZSk7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiBcdHRhYmxlID0gc21jX3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbi1cdFx0aW50IGk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1NNQ19IU19DVFJMX0JQRilcbiBcdFx0c3RydWN0IHNtY19oc19jdHJsICpjdHJsO1xuIFxuQEAgLTIxNCwxMiArMjI5LDkgQEAgaW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXG4gXG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHNtY190YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHNtY190YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKVxuLVx0XHRcdHRhYmxlW2ldLmRhdGEgKz0gKHZvaWQgKiluZXQgLSAodm9pZCAqKVx1MDAyNmluaXRfbmV0O1xuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZXNtYy5zbWNfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L3NtY1wiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuY1xuaW5kZXggMTllODA0ODI0MWJhYy4uMDdmODQzNGQ0MjU4YyAxMDA2NDRcbi0tLSBhL25ldC9zeXNjdGxfbmV0LmNcbisrKyBiL25ldC9zeXNjdGxfbmV0LmNcbkBAIC0xMTQsMTYgKzExNCwxNyBAQCBfX2luaXQgaW50IG5ldF9zeXNjdGxfaW5pdCh2b2lkKVxuIFx0Z290byBvdXQ7XG4gfVxuIFxuLS8qIFZlcmlmeSB0aGF0IHN5c2N0bHMgZm9yIG5vbi1pbml0IG5ldG5zIGFyZSBzYWZlIGJ5IGVpdGhlcjpcbisvKiBSZXR1cm4gZXJyb3Igd2hlbiBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgdW5zYWZlIGJ5IHZlcmlmeWluZzpcbiAgKiAxKSBiZWluZyByZWFkLW9ubHksIG9yXG4gICogMikgaGF2aW5nIGEgZGF0YSBwb2ludGVyIHdoaWNoIHBvaW50cyBvdXRzaWRlIG9mIHRoZSBnbG9iYWwga2VybmVsL21vZHVsZVxuICAqICAgIGRhdGEgc2VnbWVudCwgYW5kIHJhdGhlciBpbnRvIHRoZSBoZWFwIHdoZXJlIGEgcGVyLW5ldCBvYmplY3Qgd2FzXG4gICogICAgYWxsb2NhdGVkLlxuICAqL1xuLXN0YXRpYyB2b2lkIGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuLVx0XHRcdFx0ICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIHNpemVfdCB0YWJsZV9zaXplKVxuK3N0YXRpYyBpbnQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuK1x0XHRcdFx0ICBzaXplX3QgdGFibGVfc2l6ZSlcbiB7XG4tXHRzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICplbnQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIlJlZ2lzdGVyaW5nIG5ldCBzeXNjdGwgKG5ldCAlcCk6ICVzXFxuXCIsIG5ldCwgcGF0aCk7XG4gXHRlbnQgPSB0YWJsZTtcbkBAIC0xNDksMjQgKzE1MCwyNCBAQCBzdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbiBcdFx0ZWxzZVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBJZiBpdCBpcyB3cml0YWJsZSBhbmQgcG9pbnRzIHRvIGtlcm5lbC9tb2R1bGUgZ2xvYmFsXG4tXHRcdCAqIGRhdGEsIHRoZW4gaXQncyBwcm9iYWJseSBhIG5ldG5zIGxlYWsuXG4tXHRcdCAqL1xuK1x0XHQvKiBXYXJuIG9uIG5ldG5zIGxlYWsuICovXG4gXHRcdFdBUk4oMSwgXCJzeXNjdGwgJXMvJXM6IGRhdGEgcG9pbnRzIHRvICVzIGdsb2JhbCBkYXRhOiAlcHNcXG5cIixcbi1cdFx0ICAgICBwYXRoLCBlbnQtXHUwMDNlcHJvY25hbWUsIHdoZXJlLCBlbnQtXHUwMDNlZGF0YSk7XG4rXHRcdFx0cGF0aCwgZW50LVx1MDAzZXByb2NuYW1lLCB3aGVyZSwgZW50LVx1MDAzZWRhdGEpO1xuIFxuLVx0XHQvKiBNYWtlIGl0IFwic2FmZVwiIGJ5IGRyb3BwaW5nIHdyaXRhYmxlIHBlcm1zICovXG4tXHRcdGVudC1cdTAwM2Vtb2RlIFx1MDAyNj0gfjAyMjI7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRjb25zdCBjaGFyICpwYXRoLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuK1x0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuIFx0XHRcdFx0XHRcdHNpemVfdCB0YWJsZV9zaXplKVxuIHtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuLVx0XHRlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKG5ldCwgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpO1xuK1x0XHRpZiAoZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHJldHVybiBfX3JlZ2lzdGVyX3N5c2N0bF90YWJsZShcdTAwMjZuZXQtXHUwMDNlc3lzY3RscywgcGF0aCwgdGFibGUsIHRhYmxlX3NpemUpO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG5pbmRleCBlMDJlZDZlMzk1NWMwLi40NzY2MGQ1NzI2YmJkIDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmNcbisrKyBiL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG5AQCAtMTMsNyArMTMsNyBAQFxuIFxuICNpbmNsdWRlIFwiYWZfdW5peC5oXCJcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJtYXhfZGdyYW1fcWxlblwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW4sXG5AQCAtMjMsMTggKzIzLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1pbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnVuaXhfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbitcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXVueC5zeXNjdGxfbWF4X2RncmFtX3FsZW47XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK2ludCBfX25ldF9pbml0IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbitcbiBcdGlmIChuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbiBcdFx0dGFibGUgPSB1bml4X3RhYmxlO1xuIFx0fSBlbHNlIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHVuaXhfdGFibGUsIHNpemVvZih1bml4X3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdHRhYmxlID0gdW5peF90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZXVueC5jdGwgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvdW5peFwiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmNhZWJlZjczZWE1OGQgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTI4OTksNyArMjg5OSw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJuc19tb2RlXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcbkBAIC0yOTI1LDIwICsyOTI1LDMxIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnZzb2NrX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4rXHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0YWJsZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4rXHR0YWJsZVsxXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGU7XG4rXHR0YWJsZVsyXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmcyaF9mYWxsYmFjaztcbitcbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4rc3RhdGljIGludCBfX25ldF9pbml0IHZzb2NrX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4gXHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0gdnNvY2tfdGFibGU7XG4gXHR9IGVsc2Uge1xuLVx0XHR0YWJsZSA9IGttZW1kdXAodnNvY2tfdGFibGUsIHNpemVvZih2c29ja190YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHZzb2NrX3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLm1vZGU7XG4tXHRcdHRhYmxlWzFdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2suY2hpbGRfbnNfbW9kZTtcbi1cdFx0dGFibGVbMl0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5nMmhfZmFsbGJhY2s7XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNldnNvY2suc3lzY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcIm5ldC92c29ja1wiLCB0YWJsZSxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jIGIvbmV0L3hmcm0veGZybV9zeXNjdGwuY1xuaW5kZXggY2EwMDNlOGEwMzc2MC4uMzU3MTUyYTUwZmFmMSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbkBAIC0xMyw3ICsxMyw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2luaXQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJ4ZnJtX2FldmVudF9ldGltZVwiLFxuIFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHUzMiksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozMzoyOS4wNjk0NTAxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEwMjIyOTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFN5c2N0bCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZnVuZGFtZW50YWxseSByZXdvcmtpbmcgaG93IG5ldHdvcmsgc3lzY3RscyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbmV0d29yayBuYW1lc3BhY2VzLiBUaGlzIHNlZW1zIHByZXR0eSBzaWduaWZpY2FudC4gVGhleSdyZSBjaGFuZ2luZyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgdG8gdXNlIGEgYGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmAsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBzYWZldHksIGFuZCB0aGV5J3ZlIGFsdGVyZWQgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygc2lsZW50bHkgZHJvcHBpbmcgd3JpdGUgcGVybWlzc2lvbnMuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIHBvdGVudGlhbCBwb2ludCBmb3IgYnJlYWthZ2UuXG5cblRoZSBiaWcgcGljdHVyZSBpcyB0aGF0IHRoZXkndmUgcmVmYWN0b3JlZCBob3cgc3lzY3RsIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGFuZCBtb2RpZmllZCBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLiBUaGV5J3ZlIG1vdmVkIHRoZSBkdXBsaWNhdGlvbiBsb2dpYyBpbnRvIGRlZGljYXRlZCBgKl9kdXBgIGZ1bmN0aW9ucyAoZS5nLiwgYG5ldG5zX2NvcmVfdGFibGVfZHVwYCwgYGlwdjRfbmV0X3RhYmxlX2R1cGApIHdoaWNoIGltcHJvdmVzIHJlYWRhYmlsaXR5LiBUaGlzIGlzbid0IGp1c3QgY29zbWV0aWM7IGl0IGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5UaGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgcHJldHR5IGNsZWFyOiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgbm93IHJldHVybnMgYW4gYC1FQUNDRVNgIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbW9kaWZ5aW5nIHRoZSB0YWJsZSwgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB3aWxsIGZhaWwgaWYgYGVuc3VyZV9zYWZlX25ldF9zeXNjdGxgIGRvZXMuIFRoYXQsIGNvdXBsZWQgd2l0aCB0aGUgY2hhbmdlIGluIGhvdyBzeXNjdGwgdGFibGVzIGFyZSBhbGxvY2F0ZWQvaW5pdGlhbGl6ZWQgaW4gbmV3IG5ldG5zLCBtZWFucyB0aGVyZSdzIGEgZGVmaW5pdGUgc3VyZmFjZSBhcmVhIGZvciByZWdyZXNzaW9ucy5cblxuVGhpcyBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXQuXCIgVGhlIGNoYW5nZXMgYWZmZWN0IG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uLCB3aGljaCBhcmUgYm90aCBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBiZXN0IGNhbmRpZGF0ZXMgZm9yIHRhcmdldGluZy4gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIHByb2JhYmx5IHRoZSBtYWluIG9uZSwgYWx0aG91Z2ggaXQgbWlnaHQgYmUgY2FsbGVkIHRvbyBvZnRlbi4gVGhlIGAqX2R1cGAgZnVuY3Rpb25zIGFyZSBzdGF0aWMgc28gSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgdGhlbS4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydCwgd2hpY2ggYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LCBhcmUgdGhlIGAqX25ldF9pbml0YCBmdW5jdGlvbnMuIFRob3NlIGdldCBjYWxsZWQgd2hlbiBhIG5ldyBuZXR3b3JrIG5hbWVzcGFjZSBpcyBjcmVhdGVkLiBGdW5jdGlvbnMgbGlrZSBgc3lzY3RsX2NvcmVfbmV0X2luaXRgLCBgaXB2NF9zeXNjdGxfaW5pdF9uZXRgLCBgeGZybTRfbmV0X3N5c2N0bF9pbml0YCwgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAsIGBuZl9sd3R1bm5lbF9uZXRfaW5pdGAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYW5kIGB2c29ja19zeXNjdGxfcmVnaXN0ZXJgIHN0YW5kIG91dC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBvZnRlbiBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgaXMgY2FsbGVkIOKAkyBsaWtlbHkgZHVyaW5nIG5ldG5zIGNyZWF0aW9uLiBTbywgZnV6emluZyB0aGUgbmV0bnMgY3JlYXRpb24gcGF0aCBpcyB0aGUgd2F5IHRvIGdvIGhlcmUuIExldCdzIHNlZS4uLiB0aGV5J3ZlIGNoYW5nZWQgYWxsIHRoZXNlIGAqX25ldF9pbml0YCBmdW5jdGlvbnM6IGBzeXNjdGxfY29yZV9uZXRfaW5pdGAsIGBpcHY0X3N5c2N0bF9pbml0X25ldGAsIGB4ZnJtNF9uZXRfc3lzY3RsX2luaXRgLCBgeGZybTZfbmV0X3N5c2N0bF9pbml0YCwgYG5mX2x3dHVubmVsX25ldF9pbml0YCwgYHNtY19zeXNjdGxfbmV0X2luaXRgLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAuIE9rYXksIGFuZCBhbHNvIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCAod2hpY2ggSSBjYW4ndCBjYWxsIGRpcmVjdGx5KSBhbmQgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludC4gU28gdGhlIG1haW4gb25lcyB0byBsb29rIGF0IGFyZSBgKl9uZXRfaW5pdGAuXG5cbkxldCBtZSBzZWUuLi4gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgICppcyogZXhwb3J0ZWQgZnJvbSBgbmV0L3N5c2N0bF9uZXQuY2AuIEkgbmVlZCB0byBkaWcgaW50byBpdHMgaW1wbGVtZW50YXRpb24uIE9rYXksIGxldCdzIGxvb2sgYXQgYG5ldC9zeXNjdGxfbmV0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozMzo0MC4xNzE2ODI2NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NjQxMTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zeXNjdGxfbmV0LmM9MTYzPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zeXNjdGxfbmV0LmMtMTczLX1cXG5uZXQvc3lzY3RsX25ldC5jOjE3NDpFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KTtcXG5uZXQvc3lzY3RsX25ldC5jLTE3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzM6NDIuMTY4MTAwODMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyOTEyNjAxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGFuZCBSZWxhdGVkIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCAqaXMqIGV4cG9ydGVkIOKAkyBnb29kLiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgSSBuZWVkIGBDT05GSUdfU1lTQ1RMYCwgYENPTkZJR19ORVRgLCBhbmQgYENPTkZJR19ORVRfTlNgLiBBbmQsIGRlcGVuZGluZyBvbiB0aGUgc3Vic3lzdGVtcywgYENPTkZJR19TTUNgLCBgQ09ORklHX1hGUk1gLCBgQ09ORklHX1VOSVhgLCBgQ09ORklHX1ZTT0NLRVRTYCwgYW5kIGBDT05GSUdfTFdUVU5ORUxgIGFsc28gY29tZSBpbnRvIHBsYXkuXG5cbkxldCBtZSBqdXN0IGxpc3QgdGhvc2Ugb3V0IHRvIGhhdmUgdGhlbSBjbGVhcmx5OlxuKiAgIGBORVRfTlNgXG4qICAgYFNZU0NUTGBcbiogICBgU01DYFxuKiAgIGBYRlJNYFxuKiAgIGBWU09DS0VUU2BcblxuTm93LCBpcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgZnVydGhlciBhbmFseXNpcz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGNhbGxlZCB3aGVuZXZlciBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGNlbnRyYWwgdG8gcmVnaXN0ZXJpbmcgc3lzY3RsIGVudHJpZXMgZm9yIGVhY2ggbmV0d29yayBzdWJzeXN0ZW0uIEV4Y2VsbGVudCBmb2N1cy5cblxuQmVzaWRlcyBgcmVnaXN0ZXJfbmV0X3N5c2N0bF9zemAsIGxldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW1wb3J0YW50LCBhbmQgdGhlc2Ugb3RoZXIgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWZ1bCBpbiB0aGUgbmV4dCByb3VuZDogYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgc21jX3N5c2N0bF9uZXRfaW5pdGAuXG5cbk5leHQsIEkgc2hvdWxkIGNoZWNrIGBuZXQvc3lzY3RsX25ldC5jYCB0byBzZWUgaWYgSSBjYW4gZmluZCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc2FmZSBzeXNjdGwgc3lzdGVtIGlzIGVuc3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDUzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjU0LjQ1OTM2MzAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjczMzg2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5zdXJlX3NhZmVfbmV0X3N5c2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3lzY3RsX25ldC5jPTk1PV9faW5pdCBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc3lzY3RsX25ldC5jLTEyMi0gKi9cXG5uZXQvc3lzY3RsX25ldC5jOjEyMzpzdGF0aWMgaW50IGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxcbm5ldC9zeXNjdGxfbmV0LmMtMTI0LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvc3lzY3RsX25ldC5jPTE2Mz1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc3lzY3RsX25ldC5jLTE2OC1cXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxubmV0L3N5c2N0bF9uZXQuYzoxNjk6XFx0XFx0aWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpXFxubmV0L3N5c2N0bF9uZXQuYy0xNzAtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjMzOjU2LjA4NjcwODc2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTE5NjQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBOZXRucyBDcmVhdGlvbiBGYWlsdXJlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2F1c2luZyBtZSB0byByZS1ldmFsdWF0ZSBob3cgd2UgaGFuZGxlIG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCDigJMgaXQncyBub3cgcmV0dXJuaW5nIGFuIGVycm9yLCB3aGljaCwgaW4gdHVybiwgY2F1c2VzIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byByZXR1cm4gTlVMTC4gVGhhdCdzIGEgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0bnMgY3JlYXRpb24gYXJlIGNvbmNlcm5pbmcuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlcyBpZiBhbnkgc3lzY3RscyBhcmUgbWlzY29uZmlndXJlZCBvciB2aW9sYXRlIG91ciBzYWZldHkgcnVsZXMsIGFuZCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzY3RsIHRhYmxlIGR1cGxpY2F0aW9uLlxuXG5NeSBmb2N1cyBpcyBzaGlmdGluZyB0byBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCwgb2J2aW91c2x5LCBidXQgYWxzbyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3lzY3RsIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBpbmNsdWRpbmcgYHN5c2N0bF9jb3JlX25ldF9pbml0YCwgYGlwdjRfc3lzY3RsX2luaXRfbmV0YCwgYHhmcm00X25ldF9zeXNjdGxfaW5pdGAsIGB4ZnJtNl9uZXRfc3lzY3RsX2luaXRgLCBgbmZfbHd0dW5uZWxfbmV0X2luaXRgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGB1bml4X3N5c2N0bF9yZWdpc3RlcmAsIGFuZCBgdnNvY2tfc3lzY3RsX3JlZ2lzdGVyYC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGhvb2tzIGludG8gdGhlIG5ldCBuYW1lc3BhY2UncyBzeXNjdGwgc2V0dXAuXG5cblRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIHdoZXRoZXIgYHN5c2N0bF9jb3JlX25ldF9pbml0YCBpcyBzdGF0aWMgb3IgZ2xvYmFsLCBzbyBJIGNhbiBlc3RhYmxpc2ggaG93IGZhciByZWFjaGluZyBpdHMgYWZmZWN0cy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBtaWdodCBsZWFkIHRvIGFuIGVhcmx5IGV4aXQgZHVyaW5nIG5ldG5zIGNyZWF0aW9uIGR1ZSB0byBhIE5VTEwgcmV0dXJuIGZyb20gYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjYWxsIHN0YWNrLCBhbmQgSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBhbmFseXplIHRoZSBlcnJvciBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MDEuNzc4Njc2MTExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjA5NzcxMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3lzY3RsX2NvcmVfbmV0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NjgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTczOS1cXHR9LFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjc0MDpcXHQvKiBzeXNjdGxfY29yZV9uZXRfaW5pdCgpIHdpbGwgc2V0IHRoZSB2YWx1ZXMgYWZ0ZXIgdGhpc1xcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTc0MS1cXHQgKiB0byByZWFkb25seSBpbiBuZXR3b3JrIG5hbWVzcGFjZXNcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTc5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqbmV0bnNfY29yZV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODExLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjgxMjpzdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTgxMy17XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz04NTA9c3RhdGljIF9fbmV0X2luaXRkYXRhIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBzeXNjdGxfY29yZV9vcHMgPSB7XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6ODUxOlxcdC5pbml0ID0gc3lzY3RsX2NvcmVfbmV0X2luaXQsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtODUyLVxcdC5leGl0ID0gc3lzY3RsX2NvcmVfbmV0X2V4aXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjAzLjE5OTY1NzMwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzI3NjMwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKlN0YXRpYyBGdW5jdGlvbnMgaW4gRm9jdXNTeW1ib2xzOiBBIFF1aWNrIFJldmlldyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBGb2N1c1N5bWJvbHNgIHRoaW5nLiBUaGUgZ29hbCBpcyB0byBrZWVwIGl0IGNsZWFuLCBmb2N1c2VkLCBhbmQgaWRlYWxseSwgYXZvaWQgaW5jbHVkaW5nIHN0YXRpYyBmdW5jdGlvbnMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlbid0IGV4dGVybmFsbHkgdmlzaWJsZSwgc28gaW5jbHVkaW5nIHRoZW0gZG9lc24ndCByZWFsbHkgc2VydmUgYSBwdXJwb3NlIGluIGEgc3ltYm9sIHRhYmxlLCBhbmQgY291bGQgbGVhZCB0byB1bm5lY2Vzc2FyeSBibG9hdC5cblxuQnV0IHRoZW4gSSBzZWUgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLiBJdCdzIGV4cG9ydGVkLCB3aGljaCB0aHJvd3MgYSB3cmVuY2ggaW4gdGhpcyBcIm5vIHN0YXRpY3NcIiBhcHByb2FjaC4gSXQncyAqc3VwcG9zZWQqIHRvIGJlIGluIHRoaXMgdGhpbmcsIGJlY2F1c2UgaXQncyBub24tc3RhdGljIGFuZCB2aXNpYmxlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLlxuXG5Ob3csIHdoYXQgYWJvdXQgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYD8gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaXRzIGF0dHJpYnV0ZXMuIElzIHRoYXQgc3RhdGljLCB0b28/IElmIHNvLCB3ZSdyZSBjb25zaXN0ZW50OyBpZiBub3QsIHRoZXJlJ3MgYW5vdGhlciBwb2ludCB0byBjb25zaWRlciBpbiBtYWtpbmcgYSBjaGFuZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBpbiBlYWNoIGNhdGVnb3J5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDowNi43NzI0MjMyMTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTMzODU5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5peF9zeXNjdGxfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM4MDY9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTAtXFx0bmV0LVxcdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuID0gMTA7XFxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTE6XFx0aWYgKHVuaXhfc3lzY3RsX3JlZ2lzdGVyKG5ldCkpXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MTItXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4Lmg9Mzc9bG9uZyB1bml4X291dHFfbGVuKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmgtNDAtI2lmZGVmIENPTkZJR19TWVNDVExcXG5uZXQvdW5peC9hZl91bml4Lmg6NDE6aW50IHVuaXhfc3lzY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCk7XFxubmV0L3VuaXgvYWZfdW5peC5oLTQyLXZvaWQgdW5peF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpO1xcbm5ldC91bml4L2FmX3VuaXguaC00My0jZWxzZVxcbm5ldC91bml4L2FmX3VuaXguaDo0NDpzdGF0aWMgaW5saW5lIGludCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvYWZfdW5peC5oLTQ1LXtcXG4tLVxcbm5ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYy0zOC1cXG5uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYzozOTppbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMtNDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDowOC4yNjU4MTU5ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NzEzOTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTeXNjdGwgUmVnaXN0cmF0aW9uKipcblxuSG1tLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGlzbid0IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBwcm9tcHRzIGEgcXVlc3Rpb24uIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgYW5hbG9nb3VzIGluIHRoZSBgdnNvY2tgIHN1YnN5c3RlbS4gV2hhdCdzIHRoZSBzY29wZSBvZiB0aGUgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAgZnVuY3Rpb24/IElzIGl0IGFsc28gbm9uLXN0YXRpYywgb3IgaXMgaXQgaGFuZGxlZCBkaWZmZXJlbnRseT8gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHN5c2N0bCBpbnRlcmZhY2VzIGFyZSBleHBvc2VkIGFuZCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlZmFjdG9yaW5nIG9yIG1vZHVsYXJpdHkgY29uY2VybnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBpcyBjb25zaXN0ZW50IGFjcm9zcyB0aGVzZSByZWxhdGVkIGFyZWFzLiBMZXQgbWUgbG9vayBpbnRvIHRoYXQgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MTEuOTIyOTU4NTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5NzkzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX3N5c2N0bF9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjkyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdnNvY2tfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTQyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTQzOnN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTQ0LXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTkxPXN0YXRpYyBfX25ldF9pbml0IGludCB2c29ja19zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTQtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5OTU6XFx0aWYgKHZzb2NrX3N5c2N0bF9yZWdpc3RlcihuZXQpKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTk2LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDoxMy4zNzI3NTYwOTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMjE3MDcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFN0YXRpYyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgb3IgZGF0YSBzdHJ1Y3R1cmUgaXMgZnVuZGFtZW50YWxseSAqc3RhdGljKi4gVGhlcmUncyBhIGNlcnRhaW4gaW1tb2JpbGl0eSBvciBmaXhlZCBuYXR1cmUgdGhhdCdzIGltbWVkaWF0ZWx5IHN0cmlraW5nLiBUaGF0IGluaXRpYWwgYXNzZXNzbWVudCBoZWxwcyBtZSBmb2N1cy4gSSdtIGFscmVhZHkgbWVudGFsbHkgY2hhcnRpbmcgb3V0IHdoZXJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIFwic3RhdGljXCIgY2hhcmFjdGVyaXN0aWMuIFdoYXQgbGltaXRhdGlvbnMgZG9lcyBpdCBpbXBvc2U/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5IG9yIGR5bmFtaWMgY29uZmlndXJhdGlvbj8gSXMgaXQgdHJ1bHkgc3RhdGljIGFjcm9zcyBpdHMgbGlmZWN5Y2xlLCBvciBkb2VzIGl0IHVuZGVyZ28gc29tZSBpbml0aWFsaXphdGlvbiB0aGF0IGNvdWxkIGludHJvZHVjZSB2YXJpYWJpbGl0eT9cblxuTm93LCB0aGUgbWVudGlvbiBvZiBgc21jX3N5c2N0bF9uZXRfaW5pdGAuLi4gbXkgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHR1cm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MTcuODg0OTI5MjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NjMwNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19zeXNjdGxfbmV0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0zNDExPXN0YXRpYyBfX25ldF9pbml0IGludCBzbWNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zNDE0LVxcbm5ldC9zbWMvYWZfc21jLmM6MzQxNTpcXHRyYyA9IHNtY19zeXNjdGxfbmV0X2luaXQobmV0KTtcXG5uZXQvc21jL2FmX3NtYy5jLTM0MTYtXFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jLTIxMy1cXG5uZXQvc21jL3NtY19zeXNjdGwuYzoyMTQ6aW50IF9fbmV0X2luaXQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjE1LXtcXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5oLTE3LVxcbm5ldC9zbWMvc21jX3N5c2N0bC5oOjE4OmludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KTtcXG5uZXQvc21jL3NtY19zeXNjdGwuaC0xOS12b2lkIF9fbmV0X2V4aXQgc21jX3N5c2N0bF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpO1xcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmgtMjItXFxubmV0L3NtYy9zbWNfc3lzY3RsLmg6MjM6c3RhdGljIGlubGluZSBpbnQgc21jX3N5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NtYy9zbWNfc3lzY3RsLmgtMjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDoxOS4zMjE1NjQyMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5NDMyMzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOb24tU3RhdGljIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlLCBhbmQgaXQncyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYy4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBkeW5hbWljLCBzb21ldGhpbmcgdGhhdCdzIGNoYW5naW5nIHVuZGVyZm9vdCwgYW5kIHRoYXQgaGFzIGFsbCBzb3J0cyBvZiBpbXBsaWNhdGlvbnMgZm9yIHRocmVhZCBzYWZldHksIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBvdmVyYWxsIHByZWRpY3RhYmlsaXR5LiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuIE15IGNvbmNlcm4gaXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIG5vdCBmaXhlZCwgdGhhdCB0aGVyZSBpcyBjb25zdGFudCBjaGFuZ2Ugd2l0aGluIHRoZSBzdHJ1Y3R1cmUuXG5cblRoZW4sIHRoZSBtaW5kIGp1bXBzIHRvIGEgc3BlY2lmaWMgcG9pbnQ6IFdoYXQgYWJvdXQgYG5mX2x3dHVubmVsX25ldF9pbml0YD8gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIGFyZWEsIGFuZCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGNvbnNpZGVyIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhhdCBmdW5jdGlvbi4gV2hhdCBpcyBpdCByZXNwb25zaWJsZSBmb3I/IERvZXMgaXQgaG9sZCB0aGUga2V5IHRvIHRoZSBkeW5hbWljIGJlaGF2aW9yIEknbSBzZWVpbmc/IElzIHRoZXJlIHNvbWUgaW5pdGlhbGl6YXRpb24gd29yayBiZWluZyBkb25lIHRoZXJlIHRoYXQncyBjcml0aWNhbCB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhpcz8gSXQncyB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCB0byBleGFtaW5lIGZyb20gaGVyZS4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBub24tc3RhdGljIHN0cnVjdHVyZSwgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW1wbGljYXRpb25zIG9mIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA3MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjI1LjUxNTg4OTMxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MTE5ODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9sd3R1bm5lbF9uZXRfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMtNjYtXFxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jOjY3OnN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9sd3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9ob29rc19sd3R1bm5lbC5jLTY4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYz0xMDY9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZl9sd3R1bm5lbF9uZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuYzoxMDc6XFx0LmluaXQgPSBuZl9sd3R1bm5lbF9uZXRfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMtMTA4LVxcdC5leGl0ID0gbmZfbHd0dW5uZWxfbmV0X2V4aXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjI2Ljk3NzA5NDEyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM4NjQwNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgS2V5IFF1ZXN0aW9uKipcblxuUmlnaHQsIHRoaXMgc2VlbXMgdG8gYmUgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBiZWdzIHRoZSBxdWVzdGlvbjogV2hhdCdzIHRoZSBjb250ZXh0PyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZSBgeGZybTRfbmV0X3N5c2N0bF9pbml0YD8gSSdtIHRyeWluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBhcmVhIG9mIGludGVyZXN0IGhlcmUsIGFuZCB0aGF0IHBhcnRpY3VsYXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYWx3YXlzIGp1bXBzIG91dCBhdCBtZSBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBTdGF0aWMgYW55dGhpbmcgY291bGQgYmUgYSBjb25maWcgb3B0aW9uLCBvciBtYXliZSBzb21ldGhpbmcgc3RhdGljYWxseSBib3VuZCBhdCBidWlsZHRpbWUgYW5kIEknbSB0cnlpbmcgdG8gYXNjZXJ0YWluIHdoYXQgdGhhdCBcInN0YXRpY25lc3NcIiBhY3R1YWxseSBpbXBsaWVzLiBUaGUgcmVsYXRpb25zaGlwIHRvIGB4ZnJtNF9uZXRfc3lzY3RsX2luaXRgIGlzIG15IHByaW1hcnkgdGhvdWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDozMS42MTU3MzY3OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE2ODI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfbmV0X3N5c2N0bF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTE1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0xNjctXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM6MTY4OnN0YXRpYyBfX25ldF9pbml0IGludCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTE2OS17XFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYz0xOTU9c3RhdGljIF9fbmV0X2V4aXQgdm9pZCB4ZnJtNF9uZXRfc3lzY3RsX2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMjA3LSNlbHNlIC8qIENPTkZJR19TWVNDVEwgKi9cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzoyMDg6c3RhdGljIGlubGluZSBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0yMDkte1xcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9MjE4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0yMjctXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM6MjI4OlxcdHJldCA9IHhmcm00X25ldF9zeXNjdGxfaW5pdChuZXQpO1xcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTIyOS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNDozMy4wNjc0MjQ5NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NDM4MjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFzc2Vzc21lbnQgb2YgYSBTdGF0aWMgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHNpdHVhdGlvbiBpcyBlc3NlbnRpYWxseSBzdGF0aWMuIE5vdGhpbmcgZHluYW1pYy4gSXQncyBhIHNuYXBzaG90LCBhIGZpeGVkIHN0YXRlLiBUaGVuLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3Q6IGBpcHY0X3N5c2N0bF9pbml0X25ldGAuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjb250ZXh0LiBDb3VsZCB0aGUgY3VycmVudCBzdGF0ZSByZWxhdGUgdG8gb3IgYmUgaW5mbHVlbmNlZCBieSBob3cgdGhlIElQdjQgc3lzY3RsIHNldHRpbmdzIGFyZSBpbml0aWFsaXplZCBhdCB0aGUgbmV0d29yayBsZXZlbD8gSSdtIGN1cmlvdXMgaWYgdGhpcyBzdGF0aWMgY2hhcmFjdGVyaXN0aWMgaXMgYSBkaXJlY3QgcmVzdWx0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzLCBhIHN0YXRpYyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYmVpbmcgcHJlc2VydmVkLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBvbiB0aGF0IGZyb250LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjM3Ljk0MTgwOTg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc0Mzg4MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRfc3lzY3RsX2luaXRfbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTE2NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmlwdjRfbmV0X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNjg1LVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjE2ODY6c3RhdGljIF9fbmV0X2luaXQgaW50IGlwdjRfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNjg3LXtcXG4tLVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTE3MzA9c3RhdGljIF9fbmV0X2luaXRkYXRhIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHY0X3N5c2N0bF9vcHMgPSB7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTczMTpcXHQuaW5pdCA9IGlwdjRfc3lzY3RsX2luaXRfbmV0LFxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTE3MzItXFx0LmV4aXQgPSBpcHY0X3N5c2N0bF9leGl0X25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6MzkuNDE2MjAxNzc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjYyMjgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgU3lzY3RsIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgcHJldHR5IHN0YXRpYyBvdmVyYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRvaW5nIHNvbWV0aGluZyBkeW5hbWljLiBGcm9tIHRoZSBpbml0aWFsIHNjYW4sIGl0IGxvb2tzIGxpa2UgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLCBhbmQgYHNtY19zeXNjdGxfbmV0X2luaXRgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbiBzaW5jZSB0aGV5J3JlIHRoZSBub24tc3RhdGljIG9uZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkLCBvciBwZXJoYXBzIGV2ZW4gbm9uLXN0YXRpYywgZnVuY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gYGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXJgLCBgZmJfdHVubmVsc19vbmx5X2Zvcl9pbml0X25ldF9zeXNjdGxfc2V0dXBgLCBhbmQgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAgYXJlIGFsbCBzdGF0aWMsIHNvIHRoZXkgYXJlIG5vdCBhcyBjcml0aWNhbCBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBpbiBgbmV0L3N5c2N0bF9uZXQuY2AuIFllcywgaXQncyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB3aGljaCBtYWtlcyBpdCBhIGxpa2VseSBrZXkgcG9pbnQgb2YgZW50cnkuXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN0YXRpYyBmdW5jdGlvbiBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgaW4gYG5ldC9zeXNjdGxfbmV0LmNgIGlzIGludm9sdmVkIGhlcmUsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLiBSaWdodCwgaXQncyBjYWxsZWQgYnkgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLlxuXG5TbywgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIHNlZW1zIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlLiBJZiBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzLCB0aGVuIG5ldHdvcmsgbmFtZXNwYWNlIGNyZWF0aW9uIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSB3YXkgdG8gZG8gaXQsIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGNhbGxlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBTbywgY29tbWFuZHMgbGlrZSBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCB3b3VsZCBiZSBpZGVhbCBmb3IgdHJpZ2dlcmluZyB0aGlzLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoYXQgY29uZmlncyBuZWVkIHRvIGJlIGVuYWJsZWQ6IGBORVRfTlNgLCBgU1lTQ1RMYCwgYFVOSVhgLCBhbmQgYFNNQ2AuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIG1ha2Ugc3VyZSBgTkVUX05TYCBpcyBhIHZhbGlkIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6NDcuNDQyNDMyMjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTA3MDAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9OU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQ1MT1jb25maWcgUElEX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ1OC1cXG5pbml0L0tjb25maWc6MTQ1OTpjb25maWcgTkVUX05TXFxuaW5pdC9LY29uZmlnLTE0NjAtXFx0Ym9vbCBcXFwiTmV0d29yayBuYW1lc3BhY2VcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuLS1cXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMS1cXG5uZXQvS2NvbmZpZy5kZWJ1ZzoxMjpjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxubmV0L0tjb25maWcuZGVidWctMTMtXFx0Ym9vbCBcXFwiRW5hYmxlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIHJlZmNvdW50IHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25zaC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfTlNIXFxubmV0L25zaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgU2VydmljZSBIZWFkZXIgKE5TSCkgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjQ4Ljg5MzEzODk3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQyMTMwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgXHUwMDI2IFZlcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiBpdGVtcyBoZXJlLiBJIHNlZSB0aGF0IGBORVRfTlNgIGlzIGEgY29uZmlnIG9wdGlvbiwgZGVmaW5pdGVseS4gQW5kIGBTWVNDVExgLCB5ZXAsIHRoYXQncyBhbm90aGVyIG9uZS4gV2UgY2FuIGFkZCBgVU5JWGAgYW5kIGBTTUNgIHRvIHRoZSBsaXN0LiBOb3csIHNpbmNlIGBTTUNgIGlzIGEgcmVsYXRpdmVseSBjb21wbGV4IG9wdGlvbiwgSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGl0IGhhcyBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMgb3IgcmVxdWlyZW1lbnRzLiBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgYSBjb25maWd1cmF0aW9uIGl0ZW0gYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjMzLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6NTMuODM1MjcyMDY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxMDQwMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZz0xNDY9Y29uZmlnIEkyQ19TUElfU01DMV9VQ09ERV9QQVRDSFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZy0xNTAtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZzoxNTE6Y29uZmlnIFNNQ19VQ09ERV9QQVRDSFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlNNQyByZWxvY2F0aW9uIHBhdGNoXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfU01TQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc6MjI6Y29uZmlnIFNNQzkxWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiU01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzQ6NTUuMzI2MzE3MzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjI4MTIxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipDb25maWd1cmF0aW9uIERlZXAgRGl2ZTogU01DIFx1MDAyNiBWU09DS0VUUyoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCdzIHJpZ2h0LiBUaGUgYFNNQ2AgZW50cnksIHRoYXQncyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBlbGVtZW50LiBHb3QgaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpdm90IGFuZCBkZWx2ZSBpbnRvIHRoZSBgVlNPQ0tFVFNgIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGhvdyB0aG9zZSBhc3BlY3RzIGFyZSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM0OjU5LjU0OTEzMTk2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NDgwMDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVlNPQ0tFVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnLTUtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjAxLjAyMzkzNzM4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEyMzE5OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipPa2F5LCBMZXQncyBHZXQgVGhpcyBTdHJhaWdodCoqXG5cblJpZ2h0LCBzbyBgVlNPQ0tFVFNgIGlzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgZ290IGl0LiBObyBuZWVkIHRvIHNlY29uZC1ndWVzcyB0aGF0LiBOb3csIGxldCdzIHBpdm90IHRvIGBYRlJNYC4gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIGluIHRoaXMgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBhbGwgc3F1YXJlZCBhd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU2MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjAzLjkzNjI2MDAxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDg0Nzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnLTQtI1xcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL0tjb25maWctMTItXFx0Ym9vbFxcbm5ldC94ZnJtL0tjb25maWctMTMtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDpjb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTQyLVxcbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXFxubmV0L3hmcm0vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTUwLVxcbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbm5ldC94ZnJtL0tjb25maWctNTItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTcxLVxcbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xcbm5ldC94ZnJtL0tjb25maWctNzMtXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1xcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxcbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTkyLSMgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1BcXG5uZXQveGZybS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwNS1cXG5uZXQveGZybS9LY29uZmlnOjEwNjpjb25maWcgWEZSTV9JUENPTVBcXG5uZXQveGZybS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL0tjb25maWctMTU4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MDUuOTk3MTEyMTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjgyODUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlhGUk0gQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgd2F5IHRvIGdvIGZvciBlbmFibGluZyBYRlJNLiBUaGF0IG1ha2VzIHNlbnNlLCB0aGF0J3MgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzdGFydGluZyBwb2ludCBmb3IgYSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24uIE5vdywgYmVmb3JlIEkganVtcCB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBvbiB0aGUgYExXVFVOTkVMYCBzdXBwb3J0LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgdHVubmVscyBhcmUgd29ya2luZyBhcyBleHBlY3RlZCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjA5LjQyNTQwMDA0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDI4MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFdUVU5ORUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDQzPXNvdXJjZSBcXFwibmV0L2lmZS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQ0NC1cXG5uZXQvS2NvbmZpZzo0NDU6Y29uZmlnIExXVFVOTkVMXFxubmV0L0tjb25maWctNDQ2LVxcdGJvb2wgXFxcIk5ldHdvcmsgbGlnaHQgd2VpZ2h0IHR1bm5lbHNcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZy00NTItXFxubmV0L0tjb25maWc6NDUzOmNvbmZpZyBMV1RVTk5FTF9CUEZcXG5uZXQvS2NvbmZpZy00NTQtXFx0Ym9vbCBcXFwiRXhlY3V0ZSBCUEYgcHJvZ3JhbSBhcyByb3V0ZSBuZXh0aG9wIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MTAuOTA1Njg1NzdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxOTgyNjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgeWVwLCB0aGF0IGxvb2tzIGxpa2UgYW4gYExXVFVOTkVMYCBjb25maWd1cmF0aW9uLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gTm93LCBnaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgbWlnaHQgYmUgaW52b2x2ZWQuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBgTkZfQ09OTlRSQUNLYCBpcyBiZWhhdmluZyBpbiByZWxhdGlvbiB0byB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGZsb3dpbmcgYXMgSSBleHBlY3QgaXQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzUzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MTUuMjI1NTE1MTExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3NzkxMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yNj1lbmRpZiAjIE5GX1RBQkxFU19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Mjg6Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJJUHY0L0lQVjYgYnJpZGdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MTcuMzYzMzEzNDYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTQ1OTg2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBORl9DT05OVFJBQ0tgLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCBleGFjdGx5IHRoYXQgY29uZmlnIG9wdGlvbiBpcyBmb3IuIEl0J3MgYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBmaWx0ZXJpbmcgaW5mcmFzdHJ1Y3R1cmUsIHRoYXQgbXVjaCBJJ20gc3VyZSBvZi4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBTQ1RQYCBoYW5kbGluZyB0byBzZWUgaWYgdGhhdCBpbnRlcmFjdHMgd2l0aCBvciBpcyBhZmZlY3RlZCBieSB0aGUgYE5GX0NPTk5UUkFDS2Agc2V0dXAuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgYXMgaW50ZW5kZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MjEuNzc3OTE0NDk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1MjY4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TQ1RQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL0tjb25maWctNS1cXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXFxubmV0L3NjdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6MjQuMDgzMTkwMzY2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDY4OTM5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFN5c2N0bCBSZWdpc3RyYXRpb24gZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgSVBfU0NUUGAganVtcHMgb3V0IGFzIG9uZSBvZiB0aGUgY29uZmlncyBpbnZvbHZlZC4gIExldCdzIHNlZSwgdGhlIGZ1bGwgbGlzdCBpczogYE5FVF9OU2AsIGBTWVNDVExgLCBgVU5JWGAsIGBTTUNgLCBgVlNPQ0tFVFNgLCBgWEZSTV9VU0VSYCwgYExXVFVOTkVMYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgSVBfU0NUUGAuICBUaGF0IGdpdmVzIHVzIGEgc2NvcGUuXG5cbkknbSBrZXlpbmcgaW4gb24gYSBmZXcgc3ltYm9scywgc3BlY2lmaWNhbGx5IGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYW5kIGBzbWNfc3lzY3RsX25ldF9pbml0YC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSB1c2VkIGFuZCB3aGVyZSB0aGV5J3JlIGRlZmluZWQuIFRoZSBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBJIG5vdGljZSwgaXMgY29uZGl0aW9uYWxseSBzdGF0aWMgaW5saW5lLCBkZXBlbmRpbmcgb24gd2hldGhlciBgQ09ORklHX1NZU0NUTGAgaXMgZGVmaW5lZC4gQnV0IGV2ZW4gd2hlbiBpdCAqaXMqIHNldCwgdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBub24tc3RhdGljLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgc21jX3N5c2N0bF9uZXRfaW5pdGAgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCBhcmUgYWxzbyBub24tc3RhdGljOyB5ZXMsIGBzbWNfc3lzY3RsX25ldF9pbml0YCBpcyBkZWZpbmVkIGluIGBuZXQvc21jL3NtY19zeXNjdGwuY2AgYW5kIGlzIG5vbi1zdGF0aWMsIHNvIGJvdGggYXJlIG5vbi1zdGF0aWMuXG5cbk5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbm9uLXN0YXRpYyBhbmQgd2UgbmVlZCB0byBjb25zaWRlcj8gSSBzZWUgYG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyYCBpcyBleHBvcnRlZCwgYnV0IGl0IHNlZW1zIHRoYXQgZnVuY3Rpb24ganVzdCBjaGFuZ2VzIGEgYGN0bF90YWJsZWAgdG8gYGNvbnN0YCBhbmQgZG9lc24ndCBhZmZlY3QgbmV0bnMgY3JlYXRpb24uIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyB0YWJsZXMgYXJlIGRlY2xhcmVkOlxuYGBgY1xuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2x3dHVubmVsX3N5c2N0bF90YWJsZVtdID0ge1xuYGBgXG5hbmRcbmBgYGNcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbHd0dW5uZWxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjtcbi1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuYGBgXG5JdCBsb29rcyBsaWtlIGl0IGlzbid0IGR1cGxpY2F0aW5nIHRoZSB0YWJsZSBmb3IgbHd0dW5uZWwgYmVjYXVzZSBsd3R1bm5lbCBzeXNjdGxzIGRvbid0IGhhdmUgcGVyLW5ldG5zIGRhdGEuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLlxuXG5MZXQncyBzZWU6IGBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVgIGhhcyBgLmRhdGEgPSBOVUxMYC4gIFNvIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB3aWxsIGNoZWNrIHRoYXQsIGFuZCBzaW5jZSBpdCBpcyBgTlVMTGAsIGl0IHNob3VsZCBwYXNzIHRoaXMgY2hlY2s6XG5gYGBjXG5cdFx0aWYgKGVudC1cdTAwM2VkYXRhID09IE5VTEwpXG5cdFx0XHRjb250aW51ZTtcbmBgYFxuT2theSwgc28gdGhhdCdzIHNhZmUuIFdoYXQgYWJvdXQgb3RoZXIgdGFibGVzP1xuXG5JIHNlZSB0aGF0IGBuZl9jdF9zeXNjdGxfdGFibGVgLCBgeGZybV90YWJsZWAsIGBpcHY2X3RhYmxlX3RlbXBsYXRlYCwgYGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVgLCBgaXB2Nl9pY21wX3RhYmxlX3RlbXBsYXRlYCwgYW5kIGBjdGxfZm9yd2FyZF9lbnRyeWAgYXJlIGFsbCBqdXN0IG1hZGUgYGNvbnN0YC5cblxuU28sIHRoZSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgc3lzY3RsX2NvcmVfbmV0X2luaXRgLCBgaXB2NF9zeXNjdGxfaW5pdF9uZXRgLCBgeGZybTRfbmV0X3N5c2N0bF9pbml0YCwgYHhmcm02X25ldF9zeXNjdGxfaW5pdGAsIGBzbWNfc3lzY3RsX25ldF9pbml0YCwgYHVuaXhfc3lzY3RsX3JlZ2lzdGVyYCwgYHZzb2NrX3N5c2N0bF9yZWdpc3RlcmAsIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCwgYW5kIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YC5cblxuTm93LCB0aGUgbWFpbiBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgLCBgc21jX3N5c2N0bF9uZXRfaW5pdGAsIGFuZCBgdW5peF9zeXNjdGxfcmVnaXN0ZXJgLlxuXG5MZXQncyBjb25maXJtOiAgYHJlZ2lzdGVyX25ldF9zeXNjdGxfc3pgIGlzIHRoZSBrZXkgQVBJIGZvciByZWdpc3RlcmluZyBuZXR3b3JrIHN5c2N0bHMuICBUaGF0IG1ha2VzIHRoaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbiBuYW1lOiB5ZXMsIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YC4gSSdtIGdvaW5nIHRvIGZ1enogdGhpcyFcblxuTm93LCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqcmVxdWlyZWQqPyBJJ3ZlIGdvdCBgQ09ORklHX1NZU0NUTGAsIGBDT05GSUdfTkVUX05TYCwgYENPTkZJR19ORVRgLCBgQ09ORklHX1VOSVhgLCBgQ09ORklHX1NNQ2AsIGBDT05GSUdfVlNPQ0tFVFNgLCBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfTFdUVU5ORUxgLCBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGFuZCBgQ09ORklHX0lQX1NDVFBgLiBPa2F5LCBsZXQncyBkb2N1bWVudCBhbGwgb2YgdGhpcyBmb3IgdGhlIGZ1enplci5cblxuYGBganNvblxue1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6XG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5MSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjQyLjE1MjEzMjE0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDI4MzczMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlVOSVhcIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiTFdUVU5ORUxcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX25ldF9zeXNjdGxfc3pcIixcbiAgICBcInNtY19zeXNjdGxfbmV0X2luaXRcIixcbiAgICBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHJlZ2lzdHJhdGlvbiBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLCBjaGFuZ2luZyBob3cgc3lzY3RsIHRhYmxlcyBhcmUgZHVwbGljYXRlZCBhbmQgdmFsaWRhdGVkLiBJdCBpbnRyb2R1Y2VzIGEgc3RyaWN0IGNoZWNrIGluIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB0aGF0IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBtb2RpZnlpbmcgcGVybWlzc2lvbnMsIHdoaWNoIGNhbiBjYXVzZSBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiB0byBmYWlsIGlmIHN5c2N0bHMgYXJlIG1pc2NvbmZpZ3VyZWQuIEZ1enppbmcgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlVOSVhcIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiTFdUVU5ORUxcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX25ldF9zeXNjdGxfc3pcIixcbiAgICBcInNtY19zeXNjdGxfbmV0X2luaXRcIixcbiAgICBcInVuaXhfc3lzY3RsX3JlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG5ldHdvcmsgc3lzY3RsIHJlZ2lzdHJhdGlvbiBmb3Igbm9uLWluaXQgbmV0d29yayBuYW1lc3BhY2VzLCBjaGFuZ2luZyBob3cgc3lzY3RsIHRhYmxlcyBhcmUgZHVwbGljYXRlZCBhbmQgdmFsaWRhdGVkLiBJdCBpbnRyb2R1Y2VzIGEgc3RyaWN0IGNoZWNrIGluIGBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsYCB0aGF0IHJldHVybnMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBtb2RpZnlpbmcgcGVybWlzc2lvbnMsIHdoaWNoIGNhbiBjYXVzZSBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbiB0byBmYWlsIGlmIHN5c2N0bHMgYXJlIG1pc2NvbmZpZ3VyZWQuIEZ1enppbmcgbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24gYW5kIHN5c2N0bCByZWdpc3RyYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE0OjM1OjQyLjI3NjQyMzM3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMTQwNzQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNTo0Mi4yNzY5MDAyMDJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQxMTM1OTMyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAzZjI1YjI1MzVmODE2NDIzYmU4N2ZiM2U0Y2YxNjRhZmRjM2RiZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNDozMzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuaW5kZXggNTAxYWYxOTk5ZmU4My4uZTVlZTY3M2I5ZmNmOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oXG5AQCAtNTI1LDEyICs1MjUsMTMgQEAgc3RydWN0IGN0bF90YWJsZTtcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuIGludCBuZXRfc3lzY3RsX2luaXQodm9pZCk7XG4gc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX25ldF9zeXNjdGxfc3ooc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSk7XG4rXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHRcdFx0c2l6ZV90IHRhYmxlX3NpemUpO1xuIHZvaWQgdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbmV0X3N5c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KHN0cnVjdCBuZXQgKm5ldCxcbi1cdGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbitcdGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuaW5kZXggYjUwODYxOGJmYzEyMy4uZWIzNWRhMzU1NmY0YSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG4rKysgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuQEAgLTY3OCw3ICs2NzgsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldG5zX2NvcmVfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZXRuc19jb3JlX3RhYmxlW10gPSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUylcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwicnBzX2RlZmF1bHRfbWFza1wiLFxuQEAgLTc4NywyNiArNzg3LDM4IEBAIHN0YXRpYyBpbnQgX19pbml0IGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKGNoYXIgKnN0cilcbiB9XG4gX19zZXR1cChcImZiX3R1bm5lbHM9XCIsIGZiX3R1bm5lbHNfb25seV9mb3JfaW5pdF9uZXRfc3lzY3RsX3NldHVwKTtcbiBcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgc3lzY3RsX2NvcmVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpuZXRuc19jb3JlX3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpO1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGJsO1xuK1x0aW50IGk7XG4rXG4rXHR0YmwgPSBrbWVtZHVwKG5ldG5zX2NvcmVfdGFibGUsIHNpemVvZihuZXRuc19jb3JlX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRibClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcbitcdFx0aWYgKHRibFtpXS5kYXRhID09IFx1MDAyNnN5c2N0bF93bWVtX21heClcbitcdFx0XHRicmVhaztcbitcbitcdFx0dGJsW2ldLmRhdGEgKz0gKGNoYXIgKiluZXQgLSAoY2hhciAqKVx1MDAyNmluaXRfbmV0O1xuK1x0fVxuK1x0Zm9yICg7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICsraSlcbitcdFx0dGJsW2ldLm1vZGUgXHUwMDI2PSB+MDIyMjtcbitcbitcdHJldHVybiB0Ymw7XG4rfVxuK1xuK3N0YXRpYyBfX25ldF9pbml0IGludCBzeXNjdGxfY29yZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKG5ldG5zX2NvcmVfdGFibGUpO1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsO1xuIFxuIFx0dGJsID0gbmV0bnNfY29yZV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuLVx0XHR0YmwgPSBrbWVtZHVwKHRibCwgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGJsID0gbmV0bnNfY29yZV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKHRibCA9PSBOVUxMKVxuIFx0XHRcdGdvdG8gZXJyX2R1cDtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgKytpKSB7XG4tXHRcdFx0aWYgKHRibFtpXS5kYXRhID09IFx1MDAyNnN5c2N0bF93bWVtX21heClcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdHRibFtpXS5kYXRhICs9IChjaGFyICopbmV0IC0gKGNoYXIgKilcdTAwMjZpbml0X25ldDtcbi1cdFx0fVxuLVx0XHRmb3IgKDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgKytpKVxuLVx0XHRcdHRibFtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4gXHR9XG4gXG4gXHRuZXQtXHUwMDNlY29yZS5zeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2NvcmVcIiwgdGJsLCB0YWJsZV9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmNcbmluZGV4IDQ3ZGVkMGY2MDdkNGIuLmE5MGJlNTdjNjNiZTEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmNcbisrKyBiL25ldC9pcHY0L2RldmluZXQuY1xuQEAgLTI3OTYsNyArMjc5Niw3IEBAIHN0YXRpYyB2b2lkIGRldmluZXRfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IGluX2RldmljZSAqaWRldilcbiBcdG5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKGlkZXYtXHUwMDNlYXJwX3Bhcm1zKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgY3RsX2ZvcndhcmRfZW50cnlbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBjdGxfZm9yd2FyZF9lbnRyeVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJpcF9mb3J3YXJkXCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2aXB2NF9kZXZjb25mLmRhdGFbXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuaW5kZXggY2ExMTgwZGJhMWRlYS4uMmYwMzYzYmNhMmE4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuY1xuQEAgLTYyNCw3ICs2MjQsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJ0Y3BfbWF4X3R3X2J1Y2tldHNcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnRjcF9kZWF0aF9yb3cuc3lzY3RsX21heF90d19idWNrZXRzLFxuQEAgLTE2NTQsMzUgKzE2NTQsNDUgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICppcHY0X25ldF90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShpcHY0X25ldF90YWJsZSk7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbitcdGludCBpO1xuK1xuK1x0dGFibGUgPSBrbWVtZHVwKGlwdjRfbmV0X3RhYmxlLCBzaXplb2YoaXB2NF9uZXRfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFibGVfc2l6ZTsgaSsrKSB7XG4rXHRcdGlmICh0YWJsZVtpXS5kYXRhKSB7XG4rXHRcdFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xuK1x0XHRcdCAqIHRoZSBjdXJyZW50IHN0cnVjdCBuZXRcbitcdFx0XHQgKi9cbitcdFx0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKiBFbnRyaWVzIHdpdGhvdXQgZGF0YSBwb2ludGVyIGFyZSBnbG9iYWw7XG4rXHRcdFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcbitcdFx0XHQgKi9cbitcdFx0XHR0YWJsZVtpXS5tb2RlIFx1MDAyNj0gfjAyMjI7XG4rXHRcdH1cbitcdFx0aWYgKHRhYmxlW2ldLmV4dHJhMiBcdTAwM2U9ICh2b2lkICopXHUwMDI2aW5pdF9uZXQuaXB2NCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHRhYmxlW2ldLmV4dHJhMiBcdTAwM2MgKHZvaWQgKikoXHUwMDI2aW5pdF9uZXQuaXB2NCArIDEpKVxuK1x0XHRcdHRhYmxlW2ldLmV4dHJhMiArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXHUwMDI2aW5pdF9uZXQ7XG4rXHR9XG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK3N0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c2l6ZV90IHRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGlwdjRfbmV0X3RhYmxlKTtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuIFx0dGFibGUgPSBpcHY0X25ldF90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuLVxuLVx0XHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihpcHY0X25ldF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IGlwdjRfbmV0X3RhYmxlX2R1cChuZXQpO1xuIFx0XHRpZiAoIXRhYmxlKVxuIFx0XHRcdGdvdG8gZXJyX2FsbG9jO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyBpKyspIHtcbi1cdFx0XHRpZiAodGFibGVbaV0uZGF0YSkge1xuLVx0XHRcdFx0LyogVXBkYXRlIHRoZSB2YXJpYWJsZXMgdG8gcG9pbnQgaW50b1xuLVx0XHRcdFx0ICogdGhlIGN1cnJlbnQgc3RydWN0IG5ldFxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0LyogRW50cmllcyB3aXRob3V0IGRhdGEgcG9pbnRlciBhcmUgZ2xvYmFsO1xuLVx0XHRcdFx0ICogTWFrZSB0aGVtIHJlYWQtb25seSBpbiBub24taW5pdF9uZXQgbnNcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0dGFibGVbaV0ubW9kZSBcdTAwMjY9IH4wMjIyO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAodGFibGVbaV0uZXh0cmEyIFx1MDAzZT0gKHZvaWQgKilcdTAwMjZpbml0X25ldC5pcHY0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0YWJsZVtpXS5leHRyYTIgXHUwMDNjICh2b2lkICopKFx1MDAyNmluaXRfbmV0LmlwdjQgKyAxKSlcbi1cdFx0XHRcdHRhYmxlW2ldLmV4dHJhMiArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXHUwMDI2aW5pdF9uZXQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2VpcHY0LmlwdjRfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2lwdjRcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuaW5kZXggNThmYWYxZGRkMmIxNS4uYWI3YTAxMDI5ZDQ5MCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jXG4rKysgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuY1xuQEAgLTE0MSw3ICsxNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyB4ZnJtNF9wb2xpY3lfYWZpbmZvID0ge1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCJ4ZnJtNF9nY190aHJlc2hcIixcbiBcdFx0LmRhdGEgICAgICAgICAgID0gXHUwMDI2aW5pdF9uZXQueGZybS54ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaCxcbkBAIC0xNTEsMTggKzE1MSwzMCBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNF9wb2xpY3lfdGFibGVbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqeGZybTRfcG9saWN5X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoeGZybTRfcG9saWN5X3RhYmxlLCBzaXplb2YoeGZybTRfcG9saWN5X3RhYmxlKSxcbitcdFx0XHRHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoO1xuK1xuK1x0cmV0dXJuIHRhYmxlO1xuK31cbitcbitzdGF0aWMgX19uZXRfaW5pdCBpbnQgeGZybTRfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7XG4gXG4gXHR0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKHhmcm00X3BvbGljeV90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHhmcm00X3BvbGljeV90YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoO1xuIFx0fVxuIFxuIFx0aGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L2lwdjRcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jXG5pbmRleCBlZmIyMzgwN2EwMjYyLi5hOTViMDM1MTgyNGYzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaWNtcC5jXG4rKysgYi9uZXQvaXB2Ni9pY21wLmNcbkBAIC0xMzc0LDcgKzEzNzQsNyBAQCBFWFBPUlRfU1lNQk9MKGljbXB2Nl9lcnJfY29udmVydCk7XG4gc3RhdGljIHUzMiBpY21wdjZfZXJyb3JzX2V4dGVuc2lvbl9tYXNrX2FsbCA9XG4gXHRHRU5NQVNLX1U4KElDTVBfRVJSX0VYVF9DT1VOVCAtIDEsIDApO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWVcdD0gXCJyYXRlbGltaXRcIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY2LnN5c2N0bC5pY21wdjZfdGltZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uYjgzM2E2NDAwYzk0NCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC02NTU1LDcgKzY1NTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3lzY3RsX3J0Y2FjaGVfZmx1c2goY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9XHRcIm1heF9zaXplXCIsXG4gXHRcdC5kYXRhXHRcdD1cdFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZSxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXG5pbmRleCBkMmNkMzNlMjY5OGQ1Li4xYTBhMzZkY2RhYmMxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmNcbisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jXG5AQCAtNjEsNyArNjEsNyBAQCBwcm9jX3J0Nl9tdWx0aXBhdGhfaGFzaF9maWVsZHMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgdm9pZCAqYlxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjZfdGFibGVfdGVtcGxhdGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwiYmluZHY2b25seVwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmlwdjYuc3lzY3RsLmJpbmR2Nm9ubHksXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuY1xuaW5kZXggM2I3NDk0NzVmNmVkNi4uNWVjMDYzY2I0YWE0MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jXG4rKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuY1xuQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtNl9wb2xpY3lfZmluaSh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm02X3BvbGljeV90YWJsZVtdID0ge1xuIFx0e1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcInhmcm02X2djX3RocmVzaFwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0Lnhmcm0ueGZybTZfZHN0X29wcy5nY190aHJlc2gsXG5AQCAtMTk3LDE4ICsxOTcsMzAgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4tc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnhmcm02X3BvbGljeV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1xuK1x0dGFibGUgPSBrbWVtZHVwKHhmcm02X3BvbGljeV90YWJsZSwgc2l6ZW9mKHhmcm02X3BvbGljeV90YWJsZSksXG4rXHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRhYmxlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDtcbitcbitcdHJldHVybiB0YWJsZTtcbit9XG4rXG4rc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyO1xuIFxuIFx0dGFibGUgPSB4ZnJtNl9wb2xpY3lfdGFibGU7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuLVx0XHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZih4ZnJtNl9wb2xpY3lfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGFibGUgPSB4ZnJtNl9wb2xpY3lfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaDtcbiBcdH1cbiBcbiBcdGhkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcIm5ldC9pcHY2XCIsIHRhYmxlLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuaW5kZXggYmUyOTUzYzdkNzAyZS4uZjRmMmQ4MjE5MmQ1NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5AQCAtNjM5LDcgKzYzOSw3IEBAIGVudW0gbmZfY3Rfc3lzY3RsX2luZGV4IHtcbiBcdE5GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuIFx0W05GX1NZU0NUTF9DVF9NQVhdID0ge1xuIFx0XHQucHJvY25hbWVcdD0gXCJuZl9jb25udHJhY2tfbWF4XCIsXG4gXHRcdC5kYXRhXHRcdD0gXHUwMDI2bmZfY29ubnRyYWNrX21heCxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbmluZGV4IDJkODkwZGQwNGZmODkuLjRlMWVlZjFiYTBmMTUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2hvb2tzX2x3dHVubmVsLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfaG9va3NfbHd0dW5uZWwuY1xuQEAgLTU0LDcgKzU0LDcgQEAgaW50IG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tzX2x3dHVubmVsX3N5c2N0bF9oYW5kbGVyKTtcbiBcbi1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9sd3R1bm5lbF9zeXNjdGxfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibmZfaG9va3NfbHd0dW5uZWxcIixcbiBcdFx0LmRhdGFcdFx0PSBOVUxMLFxuQEAgLTY2LDggKzY2LDggQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlW10gPSB7XG4gXG4gc3RhdGljIGludCBfX25ldF9pbml0IG5mX2x3dHVubmVsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7XG4tXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbiBcdHRhYmxlID0gbmZfbHd0dW5uZWxfc3lzY3RsX3RhYmxlO1xuIFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zeXNjdGwuYyBiL25ldC9zY3RwL3N5c2N0bC5jXG5pbmRleCBmY2E4NDA0ODRlYmY3Li4yYjk0YzIxMTQyN2RlIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvc3lzY3RsLmNcbisrKyBiL25ldC9zY3RwL3N5c2N0bC5jXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX3RhYmxlW10gPSB7XG4gI2RlZmluZSBTQ1RQX1BGX1JFVFJBTlNfSURYICAgIDJcbiAjZGVmaW5lIFNDVFBfUFNfUkVUUkFOU19JRFggICAgM1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc2N0cF9uZXRfdGFibGVbXSA9IHtcbiBcdFtTQ1RQX1JUT19NSU5fSURYXSA9IHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwicnRvX21pblwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnNjdHAucnRvX21pbixcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19zeXNjdGwuYyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5pbmRleCBiMWVmZWQ1NDYyNDM1Li4wOWRhZDQ4MzM3ZjYxIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfc3lzY3RsLmNcbisrKyBiL25ldC9zbWMvc21jX3N5c2N0bC5jXG5AQCAtOTcsNyArOTcsNyBAQCBzdGF0aWMgaW50IHByb2Nfc21jX2hzX2N0cmwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfU01DX0hTX0NUUkxfQlBGICovXG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XG4gXHR7XG4gXHRcdC5wcm9jbmFtZSAgICAgICA9IFwiYXV0b2Nvcmtpbmdfc2l6ZVwiLFxuIFx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZpbml0X25ldC5zbWMuc3lzY3RsX2F1dG9jb3JraW5nX3NpemUsXG5AQCAtMTk1LDE0ICsxOTUsMjkgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc21jX3RhYmxlW10gPSB7XG4gI2VuZGlmIC8qIENPTkZJR19TTUNfSFNfQ1RSTF9CUEYgKi9cbiB9O1xuIFxuLWludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpzbWNfdGFibGVfZHVwKHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc21jX3RhYmxlKTtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1x0aW50IGk7XG4rXG4rXHR0YWJsZSA9IGttZW1kdXAoc21jX3RhYmxlLCBzaXplb2Yoc21jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRhYmxlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkrKylcbitcdFx0dGFibGVbaV0uZGF0YSArPSAodm9pZCAqKW5ldCAtICh2b2lkICopXHUwMDI2aW5pdF9uZXQ7XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK2ludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHNpemVfdCB0YWJsZV9zaXplID0gQVJSQVlfU0laRShzbWNfdGFibGUpO1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4gXHR0YWJsZSA9IHNtY190YWJsZTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4tXHRcdGludCBpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19TTUNfSFNfQ1RSTF9CUEYpXG4gXHRcdHN0cnVjdCBzbWNfaHNfY3RybCAqY3RybDtcbiBcbkBAIC0yMTQsMTIgKzIyOSw5IEBAIGludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAjZW5kaWYgLyogQ09ORklHX1NNQ19IU19DVFJMX0JQRiAqL1xuIFxuLVx0XHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzbWNfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGFibGUgPSBzbWNfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYmxlX3NpemU7IGkrKylcbi1cdFx0XHR0YWJsZVtpXS5kYXRhICs9ICh2b2lkICopbmV0IC0gKHZvaWQgKilcdTAwMjZpbml0X25ldDtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2VzbWMuc21jX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcIm5ldC9zbWNcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmNcbmluZGV4IDE5ZTgwNDgyNDFiYWMuLjA3Zjg0MzRkNDI1OGMgMTAwNjQ0XG4tLS0gYS9uZXQvc3lzY3RsX25ldC5jXG4rKysgYi9uZXQvc3lzY3RsX25ldC5jXG5AQCAtMTE0LDE2ICsxMTQsMTcgQEAgX19pbml0IGludCBuZXRfc3lzY3RsX2luaXQodm9pZClcbiBcdGdvdG8gb3V0O1xuIH1cbiBcbi0vKiBWZXJpZnkgdGhhdCBzeXNjdGxzIGZvciBub24taW5pdCBuZXRucyBhcmUgc2FmZSBieSBlaXRoZXI6XG4rLyogUmV0dXJuIGVycm9yIHdoZW4gc3lzY3RscyBmb3Igbm9uLWluaXQgbmV0bnMgYXJlIHVuc2FmZSBieSB2ZXJpZnlpbmc6XG4gICogMSkgYmVpbmcgcmVhZC1vbmx5LCBvclxuICAqIDIpIGhhdmluZyBhIGRhdGEgcG9pbnRlciB3aGljaCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZ2xvYmFsIGtlcm5lbC9tb2R1bGVcbiAgKiAgICBkYXRhIHNlZ21lbnQsIGFuZCByYXRoZXIgaW50byB0aGUgaGVhcCB3aGVyZSBhIHBlci1uZXQgb2JqZWN0IHdhc1xuICAqICAgIGFsbG9jYXRlZC5cbiAgKi9cbi1zdGF0aWMgdm9pZCBlbnN1cmVfc2FmZV9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdCAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBzaXplX3QgdGFibGVfc2l6ZSlcbitzdGF0aWMgaW50IGVuc3VyZV9zYWZlX25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwYXRoLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbitcdFx0XHRcdCAgc2l6ZV90IHRhYmxlX3NpemUpXG4ge1xuLVx0c3RydWN0IGN0bF90YWJsZSAqZW50O1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqZW50O1xuIFxuIFx0cHJfZGVidWcoXCJSZWdpc3RlcmluZyBuZXQgc3lzY3RsIChuZXQgJXApOiAlc1xcblwiLCBuZXQsIHBhdGgpO1xuIFx0ZW50ID0gdGFibGU7XG5AQCAtMTQ5LDI0ICsxNTAsMjQgQEAgc3RhdGljIHZvaWQgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnBhdGgsXG4gXHRcdGVsc2VcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0LyogSWYgaXQgaXMgd3JpdGFibGUgYW5kIHBvaW50cyB0byBrZXJuZWwvbW9kdWxlIGdsb2JhbFxuLVx0XHQgKiBkYXRhLCB0aGVuIGl0J3MgcHJvYmFibHkgYSBuZXRucyBsZWFrLlxuLVx0XHQgKi9cbitcdFx0LyogV2FybiBvbiBuZXRucyBsZWFrLiAqL1xuIFx0XHRXQVJOKDEsIFwic3lzY3RsICVzLyVzOiBkYXRhIHBvaW50cyB0byAlcyBnbG9iYWwgZGF0YTogJXBzXFxuXCIsXG4tXHRcdCAgICAgcGF0aCwgZW50LVx1MDAzZXByb2NuYW1lLCB3aGVyZSwgZW50LVx1MDAzZWRhdGEpO1xuK1x0XHRcdHBhdGgsIGVudC1cdTAwM2Vwcm9jbmFtZSwgd2hlcmUsIGVudC1cdTAwM2VkYXRhKTtcbiBcbi1cdFx0LyogTWFrZSBpdCBcInNhZmVcIiBieSBkcm9wcGluZyB3cml0YWJsZSBwZXJtcyAqL1xuLVx0XHRlbnQtXHUwMDNlbW9kZSBcdTAwMjY9IH4wMjIyO1xuK1x0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqcGF0aCxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbitcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSxcbiBcdFx0XHRcdFx0XHRzaXplX3QgdGFibGVfc2l6ZSlcbiB7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbi1cdFx0ZW5zdXJlX3NhZmVfbmV0X3N5c2N0bChuZXQsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTtcbitcdFx0aWYgKGVuc3VyZV9zYWZlX25ldF9zeXNjdGwobmV0LCBwYXRoLCB0YWJsZSwgdGFibGVfc2l6ZSkpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gX19yZWdpc3Rlcl9zeXNjdGxfdGFibGUoXHUwMDI2bmV0LVx1MDAzZXN5c2N0bHMsIHBhdGgsIHRhYmxlLCB0YWJsZV9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuaW5kZXggZTAyZWQ2ZTM5NTVjMC4uNDc2NjBkNTcyNmJiZCAxMDA2NDRcbi0tLSBhL25ldC91bml4L3N5c2N0bF9uZXRfdW5peC5jXG4rKysgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguY1xuQEAgLTEzLDcgKzEzLDcgQEBcbiBcbiAjaW5jbHVkZSBcImFmX3VuaXguaFwiXG4gXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdW5peF90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHVuaXhfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibWF4X2RncmFtX3FsZW5cIixcbiBcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC51bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuLFxuQEAgLTIzLDE4ICsyMywyOSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1bml4X3RhYmxlW10gPSB7XG4gXHR9LFxuIH07XG4gXG4taW50IF9fbmV0X2luaXQgdW5peF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp1bml4X3RhYmxlX2R1cChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4gXG4rXHR0YWJsZSA9IGttZW1kdXAodW5peF90YWJsZSwgc2l6ZW9mKHVuaXhfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V1bnguc3lzY3RsX21heF9kZ3JhbV9xbGVuO1xuK1xuK1x0cmV0dXJuIHRhYmxlO1xuK31cbitcbitpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4rXG4gXHRpZiAobmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4gXHRcdHRhYmxlID0gdW5peF90YWJsZTtcbiBcdH0gZWxzZSB7XG4tXHRcdHRhYmxlID0ga21lbWR1cCh1bml4X3RhYmxlLCBzaXplb2YodW5peF90YWJsZSksIEdGUF9LRVJORUwpO1xuK1x0XHR0YWJsZSA9IHVuaXhfdGFibGVfZHVwKG5ldCk7XG4gXHRcdGlmICghdGFibGUpXG4gXHRcdFx0Z290byBlcnJfYWxsb2M7XG4tXG4tXHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldW54LnN5c2N0bF9tYXhfZGdyYW1fcWxlbjtcbiBcdH1cbiBcbiBcdG5ldC1cdTAwM2V1bnguY3RsID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwibmV0L3VuaXhcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li5jYWViZWY3M2VhNThkIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0yODk5LDcgKzI4OTksNyBAQCBzdGF0aWMgaW50IHZzb2NrX25ldF9jaGlsZF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwibnNfbW9kZVwiLFxuIFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LnZzb2NrLm1vZGUsXG5AQCAtMjkyNSwyMCArMjkyNSwzMSBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2c29ja190YWJsZVtdID0ge1xuIFx0fSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp2c29ja190YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuK1x0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghdGFibGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5tb2RlO1xuK1x0dGFibGVbMV0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5jaGlsZF9uc19tb2RlO1xuK1x0dGFibGVbMl0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5nMmhfZmFsbGJhY2s7XG4rXG4rXHRyZXR1cm4gdGFibGU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB2c29ja19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuK1xuIFx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSkge1xuIFx0XHR0YWJsZSA9IHZzb2NrX3RhYmxlO1xuIFx0fSBlbHNlIHtcbi1cdFx0dGFibGUgPSBrbWVtZHVwKHZzb2NrX3RhYmxlLCBzaXplb2YodnNvY2tfdGFibGUpLCBHRlBfS0VSTkVMKTtcbitcdFx0dGFibGUgPSB2c29ja190YWJsZV9kdXAobmV0KTtcbiBcdFx0aWYgKCF0YWJsZSlcbiBcdFx0XHRnb3RvIGVycl9hbGxvYztcbi1cbi1cdFx0dGFibGVbMF0uZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2V2c29jay5tb2RlO1xuLVx0XHR0YWJsZVsxXS5kYXRhID0gXHUwMDI2bmV0LVx1MDAzZXZzb2NrLmNoaWxkX25zX21vZGU7XG4tXHRcdHRhYmxlWzJdLmRhdGEgPSBcdTAwMjZuZXQtXHUwMDNldnNvY2suZzJoX2ZhbGxiYWNrO1xuIFx0fVxuIFxuIFx0bmV0LVx1MDAzZXZzb2NrLnN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXCJuZXQvdnNvY2tcIiwgdGFibGUsXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmNcbmluZGV4IGNhMDAzZThhMDM3NjAuLjM1NzE1MmE1MGZhZjEgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG4rKysgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jXG5AQCAtMTMsNyArMTMsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9pbml0IF9feGZybV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybV90YWJsZVtdID0ge1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm1fdGFibGVbXSA9IHtcbiBcdHtcbiBcdFx0LnByb2NuYW1lXHQ9IFwieGZybV9hZXZlbnRfZXRpbWVcIixcbiBcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1MzIpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTQ6MzU6NDIuMjc2OTAxMTIyWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTEzNTYxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3lzY3RsIFRhYmxlIFJlZ2lzdHJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyBuZXR3b3JrIHN5c2N0bCB0YWJsZXMgZ2V0IHJlZ2lzdGVyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIGNoYW5naW5nIGByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6YCB0byB3b3JrIHdpdGggYSBgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqYCBpbnN0ZWFkIG9mIGEgcGxhaW4gb25lLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkncmUgdHJ5aW5nIHRvIGVuZm9yY2Ugc29tZSBpbW11dGFiaWxpdHkgb24gdGhlc2UgdGFibGVzLiBUaGV5J3ZlIGFsc28gZ29uZSB0aHJvdWdoIGFuZCBtYWRlIHZhcmlvdXMgYHN0cnVjdCBjdGxfdGFibGVgIGRlZmluaXRpb25zIGBjb25zdGAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgZHVwbGljYXRpb24gc3RyYXRlZ3kgZm9yIG5ldyBuZXR3b3JrIG5hbWVzcGFjZXMuIEl0J3MgdXNpbmcgYGttZW1kdXBgIHRvIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlYC5cblxuQWxyaWdodCwgYGttZW1kdXBgLi4uIGl0IGFsbG9jYXRlcyBtZW1vcnkgYW5kIHRoZW4gY29waWVzIGRhdGEuIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGlzLiBBaCwgaGVyZSdzIHRoZSBgbmV0bnNfY29yZV90YWJsZV9kdXBgIGZ1bmN0aW9uOlxuXG5gYGBjXG5zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqbmV0bnNfY29yZV90YWJsZV9kdXAoc3RydWN0IG5ldCAqbmV0KVxue1xuXHRzaXplX3QgdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUobmV0bnNfY29yZV90YWJsZSk7XG5cdHN0cnVjdCBjdGxfdGFibGUgKnRibDtcblx0aW50IGk7XG5cblx0dGJsID0ga21lbWR1cChuZXRuc19jb3JlX3RhYmxlLCBzaXplb2YobmV0bnNfY29yZV90YWJsZSksIEdGUF9LRVJORUwpO1xuXHRpZiAoIXRibClcblx0XHRyZXR1cm4gTlVMTDtcblxuXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWJsZV9zaXplOyArK2kpIHtcblx0XHRpZiAodGJsW2ldLmRhdGEgPT0gXHUwMDI2c3lzY3RsX3dtZW1fbWF4KVxuXHRcdFx0YnJlYWs7XG5cblx0XHR0YmxbaV0uZGF0YSArPSAoY2hhciAqKW5ldCAtIChjaGFyICopXHUwMDI2aW5pdF9uZXQ7XG5cdH1cblx0Zm9yICg7IGkgXHUwMDNjIHRhYmxlX3NpemU7ICsraSlcblx0XHR0YmxbaV0ubW9kZSBcdTAwMjY9IH4wMjIyO1xuXG5cdHJldHVybiB0Ymw7XG59XG5gYGBcblxuT2theSwgc28gdGhpcyBpcyBqdXN0IHJlZmFjdG9yaW5nIHRoZSBkdXBsaWNhdGlvbiBpbnRvIGEgZGVkaWNhdGVkIGZ1bmN0aW9uIGFuZCBlbmZvcmNpbmcgdGhlIGBjb25zdGAgb24gdGhlIG9yaWdpbmFsIHRlbXBsYXRlLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgbWFraW5nIHN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gV2l0aCBga21lbWR1cGAsIGl0IGNvcGllcyBgc2l6ZW9mKG5ldG5zX2NvcmVfdGFibGUpYCBieXRlcy4gU2luY2UgYG5ldG5zX2NvcmVfdGFibGVgIGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIGFueSBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBhdXRvbWF0aWNhbGx5IHplcm9lZCBvdXQgYnkgdGhlIGNvbXBpbGVyLiBUaGF0IG1lYW5zIHRoZSBkdXBsaWNhdGVkIHRhYmxlIGlzICpmdWxseSBpbml0aWFsaXplZCogd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGJlaW5nIGludHJvZHVjZWQgaGVyZS4gVGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyB0byBlbmZvcmNlIGBjb25zdGAgb24gdGhlc2Ugc3RhdGljIHRlbXBsYXRlcyBhbmQgbW92ZSB0aGUgZHVwbGljYXRpb24gbG9naWMgYXJvdW5kLlxuXG5BaCwgYW5kIHRoZXJlJ3MgYSBiZWhhdmlvciBjaGFuZ2Ugd2l0aCBgZW5zdXJlX3NhZmVfbmV0X3N5c2N0bGAgd2hpY2ggdXNlZCB0bzpcblxuYGBgY1xuLVx0XHQvKiBNYWtlIGl0IFwic2FmZVwiIGJ5IGRyb3BwaW5nIHdyaXRhYmxlIHBlcm1zICovXG4tXHRcdGVudC1cdTAwM2Vtb2RlIFx1MDAyNj0gfjAyMjI7XG5gYGBcblxuQW5kIG5vdyBpdCBkb2VzOlxuXG5gYGBjXG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuYGBgXG5cblNvLCBpbnN0ZWFkIG9mIHNpbGVudGx5IGRyb3BwaW5nIHdyaXRlIHBlcm1pc3Npb25zIG9uIGFuIHVuc2FmZSBzeXNjdGwsIGl0IG5vdyAqZmFpbHMqIHRoZSByZWdpc3RyYXRpb24uIFRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UsIGJ1dCBhZ2FpbiwgZG9lc24ndCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJ1dCBga21lbWR1cGAgYWxsb2NhdGVzIGFuZCBjb3BpZXMuIFRoZSBzb3VyY2UgaXMgYSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlLiBTdGF0aWMgZ2xvYmFscyBhcmUgKnplcm8taW5pdGlhbGl6ZWQqLiBTbywgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZC5cblxuU28uLi5ubyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIHJlZmFjdG9ycyBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uLiBJdCBtYWtlcyB0aGUgc3RhdGljIHRlbXBsYXRlcyBgY29uc3RgIGFuZCB1c2VzIGBrbWVtZHVwYCB0byBkdXBsaWNhdGUgdGhlbS4gU2luY2UgdGhlIHRlbXBsYXRlcyBhcmUgc3RhdGljLCB0aGV5J3JlIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvZWQgb3V0IGJ5IHRoZSBjb21waWxlcikuIGBrbWVtZHVwYCBjb3BpZXMgdGhpcyBpbml0aWFsaXplZCBkYXRhLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBpbnZvbHZlZCBpbiBjb250cm9sIGZsb3cgdGhhdCBJIGNhbiBzZWUuIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgYW55IG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3lzY3RsIHRhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwOSwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNDozNTo1Ni4zOTA0NzMzMzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBuZXR3b3JrIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gYnkgbWFraW5nIHRoZSBzdGF0aWMgdGVtcGxhdGUgdGFibGVzIGBjb25zdGAgYW5kIG1vdmluZyB0aGUgZHVwbGljYXRpb24gbG9naWMgaW50byBkZWRpY2F0ZWQgYF9kdXBgIGZ1bmN0aW9ucy4gVGhlIGR1cGxpY2F0ZWQgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXAoKWAsIHdoaWNoIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHN0YXRpYyBnbG9iYWwgdGVtcGxhdGVzLiBTaW5jZSBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcyBpbiBDIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChpbmNsdWRpbmcgYW55IHN0cnVjdCBwYWRkaW5nKSwgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgYWxsb2NhdGVkIHRhYmxlcykgd2lsbCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[1] Phase: Succeeded StartedAt: 2026-08-10 14:36:08 +0000 UTC FinishedAt: 2026-08-10 14:36:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 14:36:08 +0000 UTC FinishedAt: 2026-08-10 14:36:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2] Phase: Succeeded StartedAt: 2026-08-10 14:36:08 +0000 UTC FinishedAt: 2026-08-10 18:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 14:36:08 +0000 UTC FinishedAt: 2026-08-10 18:16:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 14:36:08 +0000 UTC FinishedAt: 2026-08-10 14:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 14:36:08 +0000 UTC FinishedAt: 2026-08-10 14:36:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-4179799995/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 14:36:18 +0000 UTC FinishedAt: 2026-08-10 14:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 14:36:18 +0000 UTC FinishedAt: 2026-08-10 14:53:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*66793330-033e-412a-b392-218d2a4a7590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-4179799995/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0d7a31f6-790c-40cd-9857-f223bf6b468e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-3371679225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 14:36:18 +0000 UTC FinishedAt: 2026-08-10 14:52:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*66793330-033e-412a-b392-218d2a4a7590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-4179799995/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0d7a31f6-790c-40cd-9857-f223bf6b468e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-3371679225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 14:53:07 +0000 UTC FinishedAt: 2026-08-10 14:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 14:53:07 +0000 UTC FinishedAt: 2026-08-10 14:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 14:53:07 +0000 UTC FinishedAt: 2026-08-10 14:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 14:53:07 +0000 UTC FinishedAt: 2026-08-10 14:53:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-2266584850/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 14:53:17 +0000 UTC FinishedAt: 2026-08-10 14:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 14:53:17 +0000 UTC FinishedAt: 2026-08-10 14:55:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0d7a31f6-790c-40cd-9857-f223bf6b468e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-3371679225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 14:55:09 +0000 UTC FinishedAt: 2026-08-10 14:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 14:55:09 +0000 UTC FinishedAt: 2026-08-10 14:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 14:55:09 +0000 UTC FinishedAt: 2026-08-10 15:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 14:55:09 +0000 UTC FinishedAt: 2026-08-10 15:11:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*66793330-033e-412a-b392-218d2a4a7590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-2266584850/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2503fc63-afd2-4b9e-8a59-aea3eda7c4d4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-443667366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 14:55:09 +0000 UTC FinishedAt: 2026-08-10 15:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*66793330-033e-412a-b392-218d2a4a7590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-2266584850/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2503fc63-afd2-4b9e-8a59-aea3eda7c4d4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-443667366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 15:11:14 +0000 UTC FinishedAt: 2026-08-10 15:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 15:11:14 +0000 UTC FinishedAt: 2026-08-10 15:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 15:11:14 +0000 UTC FinishedAt: 2026-08-10 15:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 15:11:14 +0000 UTC FinishedAt: 2026-08-10 15:13:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2503fc63-afd2-4b9e-8a59-aea3eda7c4d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-443667366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 15:13:28 +0000 UTC FinishedAt: 2026-08-10 18:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 15:13:28 +0000 UTC FinishedAt: 2026-08-10 18:16:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0d7a31f6-790c-40cd-9857-f223bf6b468e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2503fc63-afd2-4b9e-8a59-aea3eda7c4d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-3371679225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-443667366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 15:13:28 +0000 UTC FinishedAt: 2026-08-10 15:13:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 15:13:28 +0000 UTC FinishedAt: 2026-08-10 15:13:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-1545124455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 15:13:28 +0000 UTC FinishedAt: 2026-08-10 15:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 15:13:28 +0000 UTC FinishedAt: 2026-08-10 15:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 15:13:28 +0000 UTC FinishedAt: 2026-08-10 15:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 15:13:38 +0000 UTC FinishedAt: 2026-08-10 18:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflown68wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["register_net_sysctl_sz","smc_sysctl_net_init","unix_sysctl_register"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","SYSCTL","UNIX","SMC","VSOCKETS","XFRM_USER","LWTUNNEL","NF_CONNTRACK","IP_SCTP"],"series_id":"3e8c1afd-2831-4c22-a956-433cd7f0f47a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 15:13:38 +0000 UTC FinishedAt: 2026-08-10 18:16:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0d7a31f6-790c-40cd-9857-f223bf6b468e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2503fc63-afd2-4b9e-8a59-aea3eda7c4d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-3371679225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-build-action-443667366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown68wb/series-workflown68wb-convert-artifact-1545124455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}