Name: series-workflowhznh8 Phase: Succeeded StartedAt: 2026-08-19 09:39:04 +0000 UTC FinishedAt: 2026-08-19 13:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[0] Phase: Succeeded StartedAt: 2026-08-19 09:39:04 +0000 UTC FinishedAt: 2026-08-19 09:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 09:39:04 +0000 UTC FinishedAt: 2026-08-19 09:59:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_ADVANCED", "NFT_CONNLIMIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_ADVANCED", "NFT_CONNLIMIT" ], "series_id": "33372ded-292a-4abd-a0a9-52d65369fdca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_execute", "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19jdF9leGVjdXRlJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZ2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIGlzc3VlIHdpdGggYGN0X2xpbWl0X2luZm9gIGluIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHByb3RlY3Rpb24gKGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLikgYW5kIHNlcGFyYXRpbmcgdGhlIHRlYXJkb3duIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGhhc2VzIHRvIHJlc3BlY3QgUkNVIGdyYWNlIHBlcmlvZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgYW5kIHdoaWxlIGl0IGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBpdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZSB0aGF0IGlzIHNlbnQgdG8gdXNlciBzcGFjZSAoYHN0cnVjdCBvdnNfem9uZV9saW1pdGApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb250YWlucyBubyBwYWRkaW5nLiBUaGUgYnVncyBwcmV2ZW50ZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggMzhjNmYzNDc3NmMyOC4uOGNhNWJiMTU1ZWViOSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDU1IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiYjNDM7c3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxuJiM0MzsgKiBSQ1UgZ3JhY2UgcGVyaW9kIG11c3QgZWxhcHNlIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuICBUaGUgcGVybmV0IGNvcmVcbiYjNDM7ICogZ3VhcmFudGVlcyB0aGUgZ3JhY2UgcGVyaW9kIGJldHdlZW4gdGhlIC5wcmVfZXhpdCBhbmQgLmV4aXQgY2FsbGJhY2tzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTtcbiBcdGludCBpO1xuIFxuJiM0MztcdGlmICghaW5mbylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTYyNiw3ICYjNDM7MTY0NSw3IEBAIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4gXHRcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xuIFxuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0X2xpbWl0LCBuZXh0LCBoZWFkLCBobGlzdF9ub2RlKVxuLVx0XHRcdGtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTtcbiYjNDM7XHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0fVxuIFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuIFx0a2ZyZWUoaW5mbyk7XG5AQCAtMTY2NSwxMiAmIzQzOzE2ODQsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE2NzksNiAmIzQzOzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiAmIzQzOzE3MzEsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE3MjMsNiAmIzQzOzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3NzMsNiAmIzQzOzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiAmIzQzOzE4MjIsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiAmIzQzOzE4NDAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICYjNDM7MTg1MywxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgJiM0MzsxODcyLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDggJiM0MzsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xODg0LDcgJiM0MzsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggJiM0MzsxOTE3LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgJiM0MzsxOTM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXG5AQCAtMTkzMiwxOCAmIzQzOzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5AQCAtMjAxOCwxMiAmIzQzOzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgdGhlIFJDVS1wcm90ZWN0ZWRcbiYjNDM7ICogY3RfbGltaXRfaW5mbyBhbmQgc3RvcmVzIGl0IGluIG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhIGZvclxuJiM0MzsgKiBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0aGUgdGVhcmRvd24gYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxuJiM0Mzt7XG4mIzQzOyNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4mIzQzO1xuJiM0MztcdG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhID0gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQob3ZzX25ldCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDb21wbGV0ZXMgdGhlIENUIGxpbWl0IHRlYXJkb3duLiAgVGhlIHBlcm5ldCBjb3JlIGd1YXJhbnRlZXMgYW4gUkNVXG4mIzQzOyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmRcbiYjNDM7ICogdGhpcyBjYWxsLCBzbyBubyBSQ1UgcmVhZGVycyByZW1haW4uXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4mIzQzO1x0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XG4gI2VuZGlmXG4gXG4gXHRpZiAob3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbmluZGV4IDMxN2U1MjVjOGExMTMuLmE1MTZlNWJhZTRmMzQgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuQEAgLTE0LDcgJiM0MzsxNCw4IEBAIGVudW0gb3ZzX2tleV9hdHRyO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XG4mIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7XG4gYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKiwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cik7XG4gaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKixcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLFxuQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpO1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkgeyByZXR1cm4gMDsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGRlZDQ2ZDk5M2E0ZWQuLjM2MmUzMjJmYjQxZjQgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yNzU3LDE3ICYjNDM7Mjc1NywyNCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuJiM0Mzt7XG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbiYjNDM7XHRvdnNfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdExJU1RfSEVBRChoZWFkKTtcbiBcbiBcdG92c19sb2NrKCk7XG4gXG4tXHRvdnNfY3RfZXhpdChkbmV0KTtcbiYjNDM7XHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgb3ZzX25ldC1cdTAwM2VjdF9leGl0X2RhdGEpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCBcdTAwMjZvdnNfbmV0LVx1MDAzZWRwcywgbGlzdF9ub2RlKVxuIFx0XHRfX2RwX2Rlc3Ryb3koZHApO1xuQEAgLTI3OTEsNiAmIzQzOzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IG92c19pbml0X25ldCxcbiYjNDM7XHQucHJlX2V4aXQgPSBvdnNfcHJlX2V4aXRfbmV0LFxuIFx0LmV4aXQgPSBvdnNfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNm92c19uZXRfaWQsXG4gXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX25ldCksXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uNDQ2NTUzYzUxYzMwZSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE2NCw3ICYjNDM7MTY0LDEwIEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4mIzQzOyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcbiYjNDM7ICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xuJiM0MzsgKiBuZXRucyB0ZWFyZG93bi5cbiYjNDM7ICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBvdnNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlO1xuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19jdF9leGVjdXRlJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBzdHJ1Y3R1cmUsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0bnMgdGVhcmRvd24uIEl0IHNwbGl0cyB0aGUgZXhpdCBsb2dpYyBpbnRvIGBwcmVfZXhpdGAgYW5kIGBleGl0YCBjYWxsYmFja3MgdG8gZW5zdXJlIGFuIFJDVSBncmFjZSBwZXJpb2QgZWxhcHNlcyBiZWZvcmUgZnJlZWluZyB0aGUgY29ubnRyYWNrIGxpbWl0IHN0YXRlLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGdldHRlci9zZXR0ZXIgbmV0bGluayBjb21tYW5kcyBhbmQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggdG8gcHJvcGVybHkgdXNlIFJDVSBkZXJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBPcGVuIHZTd2l0Y2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAsIHdoaWNoIGlzIGEgaGlkZGVuIGNvbmZpZyBzZWxlY3RlZCBieSBgQ09ORklHX05GVF9DT05OTElNSVRgLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgcGFja2V0IGV4ZWN1dGlvbiBwYXRoIHRoYXQgY2hlY2tzIHRoZSBsaW1pdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMjJjNzk1ZWEwMjU4NTRlOWJjYjY4Njk2MDFlOWFlYzFiMzJkMWYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDk6NTU6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggMzhjNmYzNDc3NmMyOC4uOGNhNWJiMTU1ZWViOSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw1NSBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKJiM0MztzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBOVUxMLAomIzQzOwkJCQkgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIENUIGxpbWl0IHN0YXRlIG11c3QgYmUgZGV0YWNoZWQgYnkgb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoKSBhbmQgYW4KJiM0MzsgKiBSQ1UgZ3JhY2UgcGVyaW9kIG11c3QgZWxhcHNlIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuICBUaGUgcGVybmV0IGNvcmUKJiM0MzsgKiBndWFyYW50ZWVzIHRoZSBncmFjZSBwZXJpb2QgYmV0d2VlbiB0aGUgLnByZV9leGl0IGFuZCAuZXhpdCBjYWxsYmFja3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkKIHsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhOwogCWludCBpOwogCiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybjsKJiM0MzsKIAluZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tJmd0O2RhdGEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CkBAIC0xNjI2LDcgJiM0MzsxNjQ1LDcgQEAgc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKIAkJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CiAKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdF9saW1pdCwgbmV4dCwgaGVhZCwgaGxpc3Rfbm9kZSkKLQkJCWtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTsKJiM0MzsJCQlrZnJlZShjdF9saW1pdCk7CiAJfQogCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiAJa2ZyZWUoaW5mbyk7CkBAIC0xNjY1LDEyICYjNDM7MTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTY3OSw2ICYjNDM7MTY5OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNjk1LDYgJiM0MzsxNzE2LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3MDksMTIgJiM0MzsxNzMxLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNzIzLDYgJiM0MzsxNzQ2LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE3MzAsNiAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTc3Myw2ICYjNDM7MTc5OCw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksICZhbXA7em9uZV9saW1pdCk7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCkBAIC0xNzk2LDEyICYjNDM7MTgyMiwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQkJJmFtcDt6b25lKSkpIHsKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewotCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7CiAKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJCW5ldCwgaW5mby0mZ3Q7ZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xODE2LDYgJiM0MzsxODQwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiAwOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpCkBAIC0xODI4LDE5ICYjNDM7MTg1MywxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHsKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby0mZ3Q7ZGF0YSwKIAkJCQljdF9saW1pdC0mZ3Q7em9uZSwgY3RfbGltaXQtJmd0O2xpbWl0LCByZXBseSk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKLWV4aXRfZXJyOgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NTAsNyAmIzQzOzE4NzIsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCwKQEAgLTE4NjMsOCAmIzQzOzE4ODQsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xODg0LDcgJiM0MzsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsCkBAIC0xODk3LDggJiM0MzsxOTE3LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTkxOCw3ICYjNDM7MTkzOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsCkBAIC0xOTMyLDE4ICYjNDM7MTk1MiwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQluZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sCiAJCQlyZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0gZWxzZSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLAogCQkJCQkJICAgICAgcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2VycjsKIAogCW5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTsKIAlnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7CkBAIC0yMDE4LDEyICYjNDM7MjAzOSwyOSBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQomIzQzOy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyB0aGUgUkNVLXByb3RlY3RlZAomIzQzOyAqIGN0X2xpbWl0X2luZm8gYW5kIHN0b3JlcyBpdCBpbiBvdnNfbmV0LSZndDtjdF9leGl0X2RhdGEgZm9yCiYjNDM7ICogb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGhlIHRlYXJkb3duIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QuCiYjNDM7ICovCiYjNDM7dm9pZCBvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOyNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQomIzQzOwlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiYjNDM7CiYjNDM7CW92c19uZXQtJmd0O2N0X2V4aXRfZGF0YSA9IG92c19jdF9saW1pdF9leGl0X3N0YXJ0KG92c19uZXQpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MzsvKiBDb21wbGV0ZXMgdGhlIENUIGxpbWl0IHRlYXJkb3duLiAgVGhlIHBlcm5ldCBjb3JlIGd1YXJhbnRlZXMgYW4gUkNVCiYjNDM7ICogZ3JhY2UgcGVyaW9kIGJldHdlZW4gZGV0YWNoaW5nIHRoZSBzdGF0ZSBpbiBvdnNfY3RfZXhpdF9zdGFydCgpIGFuZAomIzQzOyAqIHRoaXMgY2FsbCwgc28gbm8gUkNVIHJlYWRlcnMgcmVtYWluLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCW92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CW92c19jdF9saW1pdF9leGl0X2ZpbmlzaChuZXQsIGRhdGEpOwogI2VuZGlmCiAKIAlpZiAob3ZzX25ldC0mZ3Q7eHRfbGFiZWwpCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKaW5kZXggMzE3ZTUyNWM4YTExMy4uYTUxNmU1YmFlNGYzNCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaApAQCAtMTQsNyAmIzQzOzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTsKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTsKJiM0Mzt2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7dm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKTsKIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpOwogaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLApAQCAtNDAsNyAmIzQzOzQxLDggQEAgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkgeyByZXR1cm4gMDsgfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGRlZDQ2ZDk5M2E0ZWQuLjM2MmUzMjJmYjQxZjQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yNzU3LDE3ICYjNDM7Mjc1NywyNCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCwKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKJiM0Mzt7CiYjNDM7CW92c19sb2NrKCk7CiYjNDM7CW92c19jdF9leGl0X3N0YXJ0KGRuZXQpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIHsKLQlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpOwogCXN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0OwomIzQzOwlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAJTElTVF9IRUFEKGhlYWQpOwogCiAJb3ZzX2xvY2soKTsKIAotCW92c19jdF9leGl0KGRuZXQpOwomIzQzOwlvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgb3ZzX25ldC0mZ3Q7Y3RfZXhpdF9kYXRhKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgJmFtcDtvdnNfbmV0LSZndDtkcHMsIGxpc3Rfbm9kZSkKIAkJX19kcF9kZXN0cm95KGRwKTsKQEAgLTI3OTEsNiAmIzQzOzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG92c19uZXRfb3BzID0gewogCS5pbml0ID0gb3ZzX2luaXRfbmV0LAomIzQzOwkucHJlX2V4aXQgPSBvdnNfcHJlX2V4aXRfbmV0LAogCS5leGl0ID0gb3ZzX2V4aXRfbmV0LAogCS5pZCAgID0gJmFtcDtvdnNfbmV0X2lkLAogCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfbmV0KSwKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKaW5kZXggNjk2NjQwZTg4ZmE3ZS4uNDQ2NTUzYzUxYzMwZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE2NCw3ICYjNDM7MTY0LDEwIEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7CiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC4KICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuCiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLgotICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4KJiM0MzsgKiBAY3RfbGltaXRfaW5mbzogSGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4gUHJvdGVjdGVkCiYjNDM7ICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZwomIzQzOyAqIG5ldG5zIHRlYXJkb3duLgomIzQzOyAqIEBjdF9leGl0X2RhdGE6IENUIGxpbWl0IHN0YXRlIGRldGFjaGVkIGF0IC5wcmVfZXhpdCwgZnJlZWQgYXQgLmV4aXQuCiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LgogICovCiBzdHJ1Y3Qgb3ZzX25ldCB7CkBAIC0xNzIsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBvdnNfbmV0IHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7CiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7CiAjZW5kaWYKIAlib29sIHh0X2xhYmVsOwogfTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogT3BlbiB2U3dpdGNoIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCB0ZWxscyBtZSBpdCYjMzk7cyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLCBgLmhgLCBgZGF0YXBhdGguY2AsIGFuZCBgLmhgLiBDcnVjaWFsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgd2F5IGBjdF9saW1pdF9pbmZvYCBpcyBhY2Nlc3NlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBhbmQgc3BsaXR0aW5nIHRoZSBleGl0IGxvZ2ljLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSDigJMgYSBwcmltZSB0YXJnZXQuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIFRoZSBwYXRjaCBhZmZlY3RzIHRoZXNlOiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0X3N0YXJ0YCwgYG92c19jdF9saW1pdF9leGl0X2ZpbmlzaGAsIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYG92c19jdF9leGl0X3N0YXJ0YCwgYG92c19jdF9leGl0X2ZpbmlzaGAsIGBvdnNfcHJlX2V4aXRfbmV0YCwgYW5kIGBvdnNfZXhpdF9uZXRgLgoKU28sIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmdXp6ZXIgYXJlIGdvaW5nIHRvIGJlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCB3aGljaCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAgb3Igc2ltaWxhci4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBsYXR0ZXIsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNhbGxlcnMgb2YgYG92c19jdF9jaGVja19saW1pdGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gc3RhcnQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzAtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05ODAtXHRcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk4MTpcdFx0XHRlcnIgPSBvdnNfY3RfY2hlY2tfbGltaXQobmV0LCBza2IsIGluZm8pO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cdFx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAzMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgTGltaXRzIGluIE9wZW4gdlN3aXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgYXJlIGhhbmRsZWQgaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZ1bmN0aW9ucy4gSXQgYXBwZWFycyB0aGF0IGBvdnNfY3RfY29tbWl0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhhdCBtYWtlcyBzZW5zZSAtIGBvdnNfY3RfY29tbWl0YCB3b3VsZCBiZSB0aGUgcG9pbnQgd2hlcmUgYSBjb25uZWN0aW9uIGlzIGZpbmFsaXplZCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgd2UmIzM5O2QgbmVlZCB0byBjaGVjayBpZiB3ZSYjMzk7cmUgaGl0dGluZyBhbnkgY29uZmlndXJlZCBsaW1pdHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxpbWl0cyBhcmUgYWN0dWFsbHkgKnNldCosICpkZWxldGVkKiwgYW5kICpyZXRyaWV2ZWQqLiBJIHNlZSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGFyZSBhbGwgR2VuZXJpYyBOZXRsaW5rIChnZW5sKSBjb21tYW5kcy4gU28sIGl0JiMzOTtzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHBhcmFtZXRlcnMsIGFzIGV4cGVjdGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYG92c19jdF9saW1pdF9jbWRfc2V0YCB0byBzZWUgaG93IHRob3NlIGdlbmwgY29tbWFuZHMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBleGVjdXRlZC4gSSYjMzk7bGwgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGl0IHNob3VsZCBiZSBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgYW5kIHRoYXQmIzM5O3MgdGhlIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQ0PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjgtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2OTpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg3MC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTgzLVx0XHRcdFx0XHQgICAgICAgKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTg0Olx0XHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODUtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHJlcHJlc2VudCB0aGUgZm9jdXMgb2YgdGhpcyBzeXN0ZW0sIGFuZCB0aGUga2V5IHN5bWJvbHMgdGhhdCBjYXB0dXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYXJlIGNsZWFybHkgdGhlc2U6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIGVpdGhlciBgb3ZzX2N0X2NvbW1pdGAgb3IsIHBvdGVudGlhbGx5LCB0aGUgbW9yZSBlbmNvbXBhc3NpbmcgYG92c19jdF9leGVjdXRlYCB3aGljaCB0aGVuIGNhbGxzIGBvdnNfY3RfY29tbWl0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgbW9yZSByZWxldmFudCBhbmQgd2hpY2ggaXMgbW9yZSBzZW1hbnRpY2FsbHkgY29ycmVjdC4KCk15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgb3ZzX2N0X2V4ZWN1dGVgIGFuZCBzZWUgaG93IGl0IGZpdHMgd2l0aGluIHRoaXMgZnJhbWV3b3JrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTEyNTU9c3RhdGljIGludCBkb19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODUtXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEzODY6XHRcdFx0ZXJyID0gb3ZzX2N0X2V4ZWN1dGUob3ZzX2RwX2dldF9uZXQoZHApLCBza2IsIGtleSxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM4Ny1cdFx0XHRcdFx0ICAgICBubGFfZGF0YShhKSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo1MzM6c3RydWN0IG5mX2Nvbm4gKm92c19jdF9leGVjdXRlZChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTM0LVx0XHRcdFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzEtXHRpZiAoIWN0KVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcdFx0Y3QgPSBvdnNfY3RfZXhlY3V0ZWQobmV0LCBrZXksIGluZm8sIHNrYiwgXHUwMDI2Y3RfZXhlY3V0ZWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3My1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQyLVx0XHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MjM9aW50IG92c19jdF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICosIHN0cnVjdCBza19idWZmICopO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI0LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjI1OmludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBzd19mbG93X2tleSAqLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI2LVx0XHQgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICopO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD01OT1zdGF0aWMgaW5saW5lIGludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtNjQtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NjU6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTY2LVx0XHRcdFx0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIE9WUyBDb25uZWN0aW9uIFRyYWNraW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBvdnNfY3RfZXhlY3V0ZWAgbG9va3MgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbiB0cmFja2luZyBpcyBoYW5kbGVkIHdpdGhpbiBPcGVuIHZTd2l0Y2guCgpOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWxldmFudCBidWlsZCBpbnN0cnVjdGlvbnM/IEFoLCB5ZXMsIHRoZSBjb2RlIHNob3VsZCBiZSB3aXRoaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2hgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGBjb25udHJhY2suY2AuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlLCBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLCBzYXlzIGFib3V0IHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBgTWFrZWZpbGVgLCBgbmV0L29wZW52c3dpdGNoL01ha2VmaWxlYCwgd2lsbCByZXZlYWwgaG93IHRoaXMgYWxsIGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsIG1vZHVsZS4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgcHJvY2VzcyBpcyBjcnVjaWFsIGZvciBzZWVpbmcgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25udHJhY2subyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL01ha2VmaWxlPTUzPW5mcC1vYmpzICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvTWFrZWZpbGUtNjItXHQgICAgZmxvd2VyL3Fvc19jb25mLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvTWFrZWZpbGU6NjM6XHQgICAgZmxvd2VyL2Nvbm50cmFjay5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL01ha2VmaWxlLTY0LWVuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9MTgwNT1pbnQgbmZwX2ZsX2N0X2hhbmRsZV9wcmVfY3Qoc3RydWN0IG5mcF9mbG93ZXJfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xODE4LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6MTgxOTpcdFx0XHRcdCAgIFwmIzM0O3Vuc3VwcG9ydGVkIG9mZmxvYWQ6IENvbm50cmFjayBhY3Rpb24gZW1wdHkgaW4gY29ubnRyYWNrIG9mZmxvYWRcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmMtMTgyMC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZT0xMj1zZmMtJChDT05GSUdfU0ZDX1NSSU9WKVx0JiM0Mzs9IHNyaW92Lm8gZWYxMF9zcmlvdi5vIGVmMTAwX3NyaW92Lm8gZWYxMDBfcmVwLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZS0xMy0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYWUubyB0Yy5vIHRjX2JpbmRpbmdzLm8gdGNfY291bnRlcnMubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlOjE0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjX2VuY2FwX2FjdGlvbnMubyB0Y19jb25udHJhY2sub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlLTE1LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTg9c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTQtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oOjU1Olx0LyogVGhlIGNvbm50cmFjayBvZiB0aGUgbWFzdGVyIGNvbm5lY3Rpb24gKi9cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTYtXHRzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQ9bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpICYjNDM7PSBuZl9jb25udHJhY2tfbGFiZWxzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19PVlMpICYjNDM7PSBuZl9jb25udHJhY2tfb3ZzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYtbmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NUX1BST1RPX1NDVFApICYjNDM7PSBuZl9jb25udHJhY2tfcHJvdG9fc2N0cC5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSykgJiM0Mzs9IG5mbmV0bGlua19ob29rLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTMzLSMgY29ubmVjdGlvbiB0cmFja2luZ1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSAmIzQzOz0gbmZfY29ubnRyYWNrLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzUtXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xOTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQpICYjNDM7PSB4dF9jb25ubGltaXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0spICYjNDM7PSB4dF9jb25udHJhY2sub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xOTgtb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DUFUpICYjNDM7PSB4dF9jcHUub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMxOD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyMS0gKiBtYXN0ZXImIzM5O3MgaGVscGVyIGlzIHNhZmUsIGJlY2F1c2UgdGhlIHBhY2tldCBob2xkcyBhIHJlZmVyZW5jZSBvblxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzIyOiAqIHRoZSBjb25udHJhY2sgb2JqZWN0LiBOZXZlciB1c2UgaXQgZnJvbSBjb250cm9sIHBsYW5lLlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzIzLSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTkxPWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYxNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjE2Olx0LyogTG9vayBmb3IgbWFzdGVyIGNvbm50cmFjayBvZiB0aGlzIGV4cGVjdGF0aW9uICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYxNy1cdGggPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCB6b25lLCBcdTAwMjZtYXN0ZXJfdHVwbGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9MjE1PXN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9jb25udHJhY2tfbG9jYWwodm9pZCAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTIzOS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6MjQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfb3BzW10gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTI0MS1cdHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTM5MD1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjZfY29ubnRyYWNrX2xvY2FsKHZvaWQgKnByaXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0zOTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjM5NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX29wc1tdID0ge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0zOTgtXHR7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz00NDM9c3RhdGljIGludCBuZl9jdF9uZXRuc19kb19nZXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0NjI6XHRcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDYzOlx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDY0LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDc5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0ODA6XHRcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDgxOlx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDgyLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NTMyPXN0YXRpYyB2b2lkIG5mX2N0X25ldG5zX2RvX3B1dChzdHJ1Y3QgbmV0ICpuZXQsIHU4IG5mcHJvdG8pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MzktXHRcdGlmIChjbmV0LVx1MDAzZXVzZXJzNCBcdTAwMjZcdTAwMjYgKC0tY25ldC1cdTAwM2V1c2VyczQgPT0gMCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NTQwOlx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2NF9jb25udHJhY2tfb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDE6XHRcdFx0XHRcdFx0QVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQyLVx0XHRcdG5mX2RlZnJhZ19pcHY0X2Rpc2FibGUobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU0Ny1cdFx0aWYgKGNuZXQtXHUwMDNldXNlcnM2IFx1MDAyNlx1MDAyNiAoLS1jbmV0LVx1MDAzZXVzZXJzNiA9PSAwKSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDg6XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0OTpcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NTAtXHRcdFx0bmZfZGVmcmFnX2lwdjZfZGlzYWJsZShuZXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk1NT12b2lkIG5mX2Nvbm50cmFja190Y3Bfc2V0X2Nsb3Npbmcoc3RydWN0IG5mX2Nvbm4gKmN0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTU2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk1NzpcdGVudW0gdGNwX2Nvbm50cmFjayBvbGRfc3RhdGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy05NTgtXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0zMDU9c3RhdGljIGJvb2wgbmZfbmF0X21heV9raWxsKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzA5LVx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3NfbmVlZGVkID0gSVBTX1NSQ19OQVQ7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MzEwOlx0ZW51bSB0Y3BfY29ubnRyYWNrIG9sZF9zdGF0ZTtcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0zMTEtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfdHJhY2UuYz05ND1zdGF0aWMgaW50IG5mX3RyYWNlX2ZpbGxfY3RfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfdHJhY2UuYy0xMDctXHRpZiAoIWN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc190cmFjZS5jOjEwODpcdFx0aWYgKGN0aW5mbyAhPSBJUF9DVF9VTlRSQUNLRUQpIC8qIG5vdCBzZWVuIGJ5IGNvbm50cmFjayBvciBpbnZhbGlkICovXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc190cmFjZS5jLTEwOS1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGU9MjE9aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlOjIyOm9wZW52c3dpdGNoLXkgJiM0Mzs9IGNvbm50cmFjay5vXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUtMjMtZW5kaWZcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTEwNzU9aW50IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA1LVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMTA2Olx0LyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGNvbm50cmFjayBvcmlnaW5hbCBkaXJlY3Rpb24gdHVwbGUgbWV0YWRhdGEgb25seVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA3LVx0ICogZm9yIHBhY2tldHMgZm9yIHdoaWNoIGl0IG1ha2VzIHNlbnNlLiAgT3RoZXJ3aXNlIHRoZSBrZXkgbWF5IGJlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2g9Mjc9c2V0dXAoKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2gtNTktXHRcdGdyb19tYXhfc2l6ZSAkTUFYX1NJWkUgZ3NvX21heF9zaXplICRNQVhfU0laRVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2g6NjA6XHQjIHRlc3QgZm9yIG5mX2N0X3NrYl9uZXR3b3JrX3RyaW0gaW4gbmZfY29ubnRyYWNrX292cyB1c2VkIGJ5IFRDIGN0IGFjdGlvbi5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwLnNoLTYxLVx0aXAgbmV0IGV4ZWMgJFJPVVRFUl9OUyB0YyBxZGlzYyBhZGQgZGV2IGxpbmsxIGluZ3Jlc3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZXMgaW50byB0aGF0IHNwZWNpZmljIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIHBhdGNoIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmVhdHVyZXMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSBob3cgYW5kIHdoeSB0aGUgYXV0aG9ycyBhcmUgdXNpbmcgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGlzIGEgbmV3IGZlYXR1cmUsIGEgbW9kaWZpY2F0aW9uIHRvIGV4aXN0aW5nIGJlaGF2aW9yLCBvciBqdXN0IGEgZGVwZW5kZW5jeT8gVW5kZXJzdGFuZGluZyB0aGlzIGxpbmsgYmV0d2VlbiB0aGUgY29uZmlnIG9wdGlvbiBhbmQgdGhlIGBjb25udHJhY2suY2AgY29kZSBpcyBjcnVjaWFsIGZvciBwcm9wZXJseSBhc3Nlc3NpbmcgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBpcyB1c2VkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc5PW9iai0kKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpICYjNDM7PSBuZl9zeW5wcm94eV9jb3JlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODAtXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSAmIzQzOz0gbmZfY29ubmNvdW50Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODItXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTYxPXN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy03OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4MDojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODEtI2RlZmluZSBPVlNfQ1RfTElNSVRfVU5MSU1JVEVEXHQwXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTg2MD1zdGF0aWMgYm9vbCBsYWJlbHNfbm9uemVybyhjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcwLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3MTojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcyLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc3LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk3ODojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc5LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpKSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1NzM9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4OC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg5OiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTkwLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAyMT1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDMzLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMzQ6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMzUtXHRlcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDQ2PXZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNDcte1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwNDg6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNDktXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwNTk9dm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDYyLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwNjM6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNjQtXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTAwPXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSkgeyB9XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTEwNC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoxMDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTA2LWV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjY4MT1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5ICogY29uc3QgZHBfZ2VubF9mYW1pbGllc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI2ODYtXHRcdTAwMjZkcF9tZXRlcl9nZW5sX2ZhbWlseSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI2ODc6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4OC1cdFx1MDAyNmRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oPTE3Mz1zdHJ1Y3Qgb3ZzX25ldCB7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMTc2LVx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDoxNzc6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMTc4LVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcmVxdWlyZW1lbnRzLCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBzcGFjZToKCioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gbmVlZHMgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYC4gSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mIGl0cyBmdW5jdGlvbiwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGhlcmUuIFRoZW4sIHdlIGFsc28gaGF2ZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19PUEVOVlNXSVRDSGAuIFRoYXQgbWFrZXMgc2Vuc2U7IE9wZW4gdlN3aXRjaCBpcyBhIHNpZ25pZmljYW50IHBpZWNlIG9mIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIG5vdCBzdXJwcmlzaW5nIGl0IGhhcyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4KCkdpdmVuIHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBnbyB0byBjb25maXJtIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkIG9yIGRlcml2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmFjdHVhbGx5KiBnb2luZyBvbiBpbiB0ZXJtcyBvZiBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCwgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgbW9yZSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yLCBwb3RlbnRpYWxseSwgZGVmYXVsdCB2YWx1ZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgT1BFTlZTV0lUQ0hgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgSSBzZWUgaXQsIGlzIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgbG9jYXRpb24gZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLiBCeSBleGFtaW5pbmcgdGhlIEtjb25maWcgZmlsZSwgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB3aGljaCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyBhcmUgcmVxdWlyZWQgb3IgYXQgbGVhc3Qgc3VnZ2VzdGVkIGZvciBgT1BFTlZTV0lUQ0hgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE9QRU5WU1dJVENIYC4gVGhlIGtleSB0aGluZyB0byBub3RlIGltbWVkaWF0ZWx5IGlzIHRoYXQgaXQgcmVsaWVzIG9uIGBJTkVUYC4gVGhhdCYjMzk7cyBleHBlY3RlZCDigJMgaXQmIzM5O3MgbmV0d29ya2luZyBhZnRlciBhbGwsIHNvIHdlIG5lZWQgdGhlIGNvcmUgSW50ZXJuZXQgUHJvdG9jb2wgc3RhY2suCgpCdXQgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGlzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3k6IGAhTkZfQ09OTlRSQUNLIHx8IChORl9DT05OVFJBQ0sgJmFtcDsmYW1wOyAuLi4gKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKWAuIEVzc2VudGlhbGx5LCBgT1BFTlZTV0lUQ0hgIGVpdGhlciAqZG9lc24mIzM5O3QqIHJlcXVpcmUgTmV0ZmlsdGVyJiMzOTtzIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXQgYWxsLCBvciBpdCAqZG9lcyogcmVxdWlyZSBgTkZfQ09OTlRSQUNLYCBhbmQgdGhlbiBoYXMgYSBjb25kaXRpb25hbCBiYXNlZCBvbiBgTkVURklMVEVSX0NPTk5DT1VOVGAuIElmIGBORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQsIGl0ICplaXRoZXIqIG5lZWRzIGBORVRGSUxURVJfQ09OTkNPVU5UYCAqb3IqIGl0IGRvZXNuJiMzOTt0LgoKU28sIHRvIGJlIHNhZmUsIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIGVuYWJsZTogYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAgdG8gY292ZXIgYWxsIG91ciBiYXNlcyBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIEJldHRlciB0byBoYXZlIHRoZW0gYW5kIG5vdCBuZWVkIHRoZW0sIHRoYW4gdGhlIHJldmVyc2UuCgpOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgcmVxdWlyZW1lbnQsIGxldCYjMzk7cyBnbyBjaGVjayB0aGUgc291cmNlIGZpbGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGVuYWJsZWQgYW5kIHVzZWQuIFRoYXQgd2lsbCBjbGFyaWZ5IGhvdyBjcnVjaWFsIHRoYXQgb3B0aW9uIGlzIGFuZCB3aGV0aGVyIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgTGltaXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGludm9sdmVzIGBORVRGSUxURVJfQ09OTkNPVU5UYCB3aGljaCBpcyB0cmlzdGF0ZSBhbmQgbmVzdGVkIHdpdGhpbiBgaWYgTkZfQ09OTlRSQUNLYC4gU28sIHdlIGRlZmluaXRlbHkgbmVlZCB0byBjb25zaWRlciBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2V4ZWN1dGVgLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYG92c19jdF9jaGVja19saW1pdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2V4ZWN1dGVgLiBJdCBhbHNvIHRvdWNoZXMgYG92c19jdF9saW1pdF9pbml0YCBhbmQgdGhlIGluaXQvZXhpdCByb3V0aW5lcy4gVGhvc2UgbmV0bnMgY2FsbGJhY2tzIGFyZSB0cmlnZ2VyZWQgZHVyaW5nIGBjb3B5X25ldF9uc2AgYW5kIGBjbGVhbnVwX25ldGAsIGJ1dCBuZXRucyBmdXp6aW5nIGlzIHN0YW5kYXJkLCBzbyBJIGNhbiBza2lwIGxpc3RpbmcgdGhvc2UgYXMgZXhwbGljaXQgZm9jdXMgc3ltYm9scy4KCkkgaGF2ZSB0byBiZSBjYXJlZnVsIHdpdGggc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggbWlnaHQgYmUgaW5saW5lZC4gQnV0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgc3RhdGljLiBIbW0sIGJ1dCB3YWl0LiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGdlbmxfc21hbGxfb3BzYC4gVGhhdCBtZWFucyB0aGV5ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIHRoZXkmIzM5O2xsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gdGhleSAqYXJlKiB2YWxpZCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJvbXB0IGV2ZW4gdGVsbHMgbWUgdGhleSBhcmUgb2theSBpbiB0aGlzIGNhc2UuCgpFdmVuIHNvLCBgb3ZzX2N0X2V4ZWN1dGVgIGlzIG5vbi1zdGF0aWMsIHNvIG1heWJlIEkgc2hvdWxkIHByZWZlciB0aGF0IGluc3RlYWQuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbi4gWWVwLCBgb3ZzX2N0X2V4ZWN1dGVgIGlzIG5vbi1zdGF0aWM6IGBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgZXhwb3J0ZWQgb3IganVzdCBzdGF0aWMuIFl1cCwgaXQmIzM5O3Mgc3RhdGljLiBJdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGdlbmwgY29yZS4gSXQmIzM5O3Mgc2FmZSB0byBpbmNsdWRlIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLiBFdmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkgYXJlIG5vdCBpbmxpbmVkLgoKRmluYWxseSwgbGV0IG1lIGRvdWJsZSBjaGVjayBgb3ZzX2N0X2V4ZWN1dGVgIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb3ZzX2N0X2V4ZWN1dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0MC0gKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDQxOmludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cdFx0ICAgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oPTIzPWludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0yNC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoyNTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0yNi1cdFx0ICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9NTk9c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8sXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTY0LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjY1OnN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02Ni1cdFx0XHRcdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MzgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyB0aGUgSW1wYWN0IG9mIGBvdnNfY3RfbGltaXRfY21kX3NldGAqKgoKQWxyaWdodCwgSSYjMzk7bSB0dXJuaW5nIG92ZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgY29tbWFuZCBpbiBteSBtaW5kLiBPbiB0aGUgc3VyZmFjZSwgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIHdheSB0byBtYW5hZ2UgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgd2l0aGluIE9wZW4gdlN3aXRjaC4gQnV0LCBhcyB3ZSBib3RoIGtub3csIHRoZXNlIHNlZW1pbmdseSBzaW1wbGUga25vYnMgY2FuIGhhdmUgZmFyLXJlYWNoaW5nIGVmZmVjdHMgb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgZXNwZWNpYWxseSB1bmRlciBsb2FkLiBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggZXhpc3RpbmcgZmlyZXdhbGwgcnVsZXMuIEhvdyBhZ2dyZXNzaXZlbHkgYXJlIHRoZXNlIGxpbWl0cyBiZWluZyBhcHBsaWVkLCBhbmQgd2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpZiBub3QgZXhwbGljaXRseSBzZXQ/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0eXBlcyBvZiB0cmFmZmljIHBhdHRlcm5zIHdlJiMzOTtyZSBsaWtlbHkgdG8gc2VlIGluIG91ciBlbnZpcm9ubWVudC4gSXMgdGhpcyBwcmltYXJpbHkgc2hvcnQtbGl2ZWQsIHRyYW5zYWN0aW9uYWwgdHJhZmZpYywgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBsb25nLWxpdmVkIGZsb3dzIGxpa2Ugc3RyZWFtaW5nIHZpZGVvIG9yIHBlcnNpc3RlbnQgY29ubmVjdGlvbnM/IFRoZSBvcHRpbWFsIHNldHRpbmcgd2lsbCB2YXJ5IGRyYXN0aWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBXZSBjYW4mIzM5O3QgYXBwbHkgYSBzaW5nbGUsIGdsb2JhbCBzZXR0aW5nIHdpdGhvdXQgc29tZSBzZXJpb3VzIHRlc3RpbmcuCgpBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBhYnVzZS4gQ291bGQgYW4gYXR0YWNrZXIgZXhwbG9pdCB0aGlzIHNldHRpbmcgdG8gdHJpZ2dlciBhIERvUyBjb25kaXRpb24/IFdoYXQgYXJlIHRoZSBtb25pdG9yaW5nIGNhcGFiaWxpdGllcyB3ZSBoYXZlIGluIHBsYWNlIHRvIGRldGVjdCBhbmQgbWl0aWdhdGUgdGhlc2UgdHlwZXMgb2YgYXR0YWNrcyBpZiB0aGV5IHdlcmUgdG8gdHJ5IHRoaXMgZXhwbG9pdD8gV2UgbmVlZCB0byBlbnN1cmUgd2UgY2FuIGlkZW50aWZ5IGFuZCByZWFjdCB0byBhbnkgdW51c3VhbCBwYXR0ZXJucyBpbiBjb25uZWN0aW9uIHRyYWNraW5nIG1ldHJpY3MuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQsIGxhdGVuY3ksIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gV2UgY2Fubm90IG1ha2UgYXNzdW1wdGlvbnMuIFdoYXQgdGVzdHMgY2FuIGJlIGRvbmUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBsaW1pdHM/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBleHBlcmltZW50YWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHdlIG9wdGltaXplIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbiBuZXR3b3JrIHN0YWJpbGl0eS4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCB3aXRoIG91ciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDQ9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2OC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODY5OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODcwLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODMtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODQ6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4NS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIEFQSSBFeHBvc3VyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgZXhwb3NlIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHkgZm9yIHRlc3Rpbmcgd2l0aCBTeXprYWxsZXIsIGtlZXBpbmcgaW4gbWluZCB0aGUgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGxpc3RpbmcgYG92c19jdF9saW1pdF9jbWRfc2V0YCBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgYnV0IEkgcmVhbGl6ZWQgU3l6a2FsbGVyIGNvdWxkIHN0aWxsIHV0aWxpemUgaXQgaWYgaXQgcGFyc2VzIHRoZSBzeW1ib2wgdGFibGUuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIGdvIHdpdGggYG92c19jdF9leGVjdXRlYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gTm93LCBhcmUgdGhlcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlPyBBZnRlciBhIHF1aWNrIHJldmlldywgSSBzZWUgYG92c19jdF9pbml0YCwgYG92c19jdF9leGl0X3N0YXJ0YCwgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEJ1dCwgdGhvc2UgYXJlIGp1c3QgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgZnVuY3Rpb25zLiBTbywgaW4gdG90YWwsIEkgdGhpbmsgdGhlIGJlc3Qgb3B0aW9uIGlzIHRvIGluY2x1ZGUgYG92c19jdF9leGVjdXRlYCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFzIHRoZXkgcHJvdmlkZSB0aGUgbW9zdCBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIHdoaWxlIGFkaGVyaW5nIHRvIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEuCgpCZWZvcmUgc3VibWl0dGluZywgSSBuZWVkIHRvIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtsbCBuZWVkIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRGSUxURVJfQ09OTkNPVU5UYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEyLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGB0cmlzdGF0ZWAgd2l0aGluIGBORl9DT05OVFJBQ0tgKioKClJpZ2h0LCBzbyBpdCYjMzk7cyBhIHNpbXBsZSBgdHJpc3RhdGVgIG9wdGlvbiBuZXN0ZWQgZGlyZWN0bHkgaW5zaWRlIHRoZSBgaWYgTkZfQ09OTlRSQUNLYCBibG9jay4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIGNvbXBsZXggdGhhbiBJIGluaXRpYWxseSBhbnRpY2lwYXRlZC4gSXQgc3VnZ2VzdHMgdGhhdCB0aGlzIGZlYXR1cmUsIHdoYXRldmVyIGl0IGlzLCBkb2VzbiYjMzk7dCBicmluZyBpbiBhIHJhZnQgb2Ygb3RoZXIgZGVwZW5kZW5jaWVzIEkmIzM5O2xsIG5lZWQgdG8gdW50YW5nbGUgbGF0ZXIuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwbHVzIGZvciBlYXNlIG9mIGludGVncmF0aW9uIG9yIG1vZGlmaWNhdGlvbi4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIHF1ZXN0aW9uIG9mIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSXMgaXQgb25seSBlbmFibGVkICpiZWNhdXNlKiBvZiBzb21ldGhpbmcgZWxzZSwgb3IgY2FuIGl0IGJlIGNvbmZpZ3VyZWQgaW5kZXBlbmRlbnRseT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHByb2JhYmx5IHByb21wdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBCdXQgSSBoYXZlIHRvIGNoZWNrLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgcHJvbXB0Li4uSSYjMzk7bGwgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0uIEkmIzM5O2xsIHNlYXJjaCBmb3IgaXQsIGFuZCB0aGVuIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgY2xlYXIgdXAgd2hldGhlciBJIGNhbiBqdXN0IGVuYWJsZSBpdCBkaXJlY3RseSwgb3IgaWYgSSBoYXZlIHRvIGdvIHRocm91Z2ggYSBkaWZmZXJlbnQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdGlmIE5GX0NPTk5UUkFDS1xuIDExMTpcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4gMTEyOlx0XHR0cmlzdGF0ZVxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xuIDExNTpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4gMTE2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gbWFya3MsIHVzZWQgYnkgdGhlXG4gMTE5Olx0XHQgIGBDT05OTUFSSyYjMzk7IHRhcmdldCBhbmQgYGNvbm5tYXJrJiMzOTsgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MzQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgSGlkZGVuIEtlcm5lbCBDb25maWcqKgoKUmlnaHQsIHNvIGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBhcHBhcmVudGx5IG5vdCBhIHZpc2libGUsIHRvcC1sZXZlbCBjb25maWcgb3B0aW9uLiBObyBwcm9tcHQgaW4gdGhlIG1lbnVzLCBpbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCYjMzk7cyBiZWluZyAqc2VsZWN0ZWQqIGJ5IHNvbWV0aGluZyBlbHNlLCBhIGRlcGVuZGVuY3ksIHByb2JhYmx5IGFub3RoZXIgY29uZmlnIG9wdGlvbi4gTm93LCB0aGUgcmVhbCBmdW4gYmVnaW5zOiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2VsZWN0IHBhdGggdGhhdCBjYXVzZXMgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHRvIGJlIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZSBzZWxlY3Qgc3RhdGVtZW50cyByZXZlYWwuIExldCYjMzk7cyB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSByb290IGNhdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTExPWNvbmZpZyBORlRfQ09OTkxJTUlUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxNC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTE1Olx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTEyMjg9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIzMS1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzMjpcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIzMy1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGVuYWJsZWQuIEl0IGFwcGVhcnMgdGhhdCBgTkZUX0NPTk5MSU1JVGAgYW5kIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCAqc2VsZWN0KiB0aGlzIGZlYXR1cmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgb25lIG9mIHRob3NlIHRvIGJlIGFjdGl2ZS4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBPUEVOVlNXSVRDSF9DT05OTElNSVRgIHRvIHNlZSBpZiBpdCYjMzk7cyBoYW5kbGluZyB0aGlzIHRvby4gSG1tLCB0aGUgT3BlbiB2U3dpdGNoIEtjb25maWcgaGFzIGEgZGVwZW5kZW5jeSBvbiBgIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVGAuIFNvLCBpdCBkb2VzbiYjMzk7dCAqc2VsZWN0KiBpdC4gSXQganVzdCBjaGVja3MgdGhhdCBpdCBpcyBhdmFpbGFibGUuIFNvLCBubyBoZWxwIGZyb20gdGhlcmUuCgpPa2F5LCBiYWNrIHRvIHRoZSBtYWluIHN0cmF0ZWd5LiBTaW5jZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBvcHRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBlaXRoZXIgYE5GVF9DT05OTElNSVRgIG9yIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCB0byBlbmFibGUgaXQuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlICpvbmUqIG9mIHRob3NlIHRvIGFjdHVhbGx5IGdldCB0aGlzIGNvZGUgdG8gd29yay4KClNvLCBuZXh0IHN0ZXA6IGxldCYjMzk7cyBnbyBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORlRfQ09OTkxJTUlUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCBuZWVkcyBpbiBvcmRlciB0byBiZSBhIHZpYWJsZSBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfQ09OTkxJTUlUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz01MDQ9Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjUxMTpjb25maWcgTkZUX0NPTk5MSU1JVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25uZWN0aW9uIExpbWl0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgaW50byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgZm9jdXMgb24gYE5GVF9DT05OTElNSVRgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlZmluZSB0aGUgYnVpbGQgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb25uZWN0aW9uIGxpbWl0IG1vZHVsZSwgd2hpY2ggc2hvdWxkIGFsbG93IHVzIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIElQIGFkZHJlc3Mgb3IgYSBjb21iaW5hdGlvbiBvZiBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzIGFuZCBwb3J0cywgcmlnaHQ/CgpJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSB1c3VhbDogdGhlICpkZXBlbmRzIG9uKiBzdGF0ZW1lbnRzLiBXaGF0IG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIGFyZSByZXF1aXJlZD8gSXMgdGhpcyBpbnRlcnR3aW5lZCB3aXRoIGNvbm50cmFjayBpbiBzb21lIHdheT8gT3IgcGVyaGFwcyBpdCBsZXZlcmFnZXMgb3RoZXIgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGUgaGFzaCB0YWJsZXMgZm9yIGxvb2t1cHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgdG8gc2VlIHRoZSBlbnRpcmUgcGljdHVyZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBiZSBhYmxlIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBhIHN5c3RlbS4KCk5leHQgdXAsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHNldHRpbmcgYW5kIGl0cyBkZXNjcmlwdGlvbi4gSXMgdGhlcmUgYSBkZWZhdWx0IHZhbHVlPyBJcyBpdCBzZXQgdG8gJiMzOTt5JiMzOTsgdG8gYnVpbGQgYXMgYSBtb2R1bGUgb3IgYXMgcGFydCBvZiB0aGUgY29yZT8gSSYjMzk7bGwgbG9vayBmb3IgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIOKAkyBob3BlZnVsbHkgaXQmIzM5O3MgY2xlYXIgYW5kIGNvbmNpc2UsIGV4cGxhaW5pbmcgdGhlIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSBob3BlIGl0IGluY2x1ZGVzIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGxpbWl0cyB0byBhcHBseSB0byBkaWZmZXJlbnQgcHJvdG9jb2xzLCB3aGljaCBjb3VsZCBiZSBUQ1Agb3IgVURQLiBJJiMzOTtkIGxpa2UgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIGhvdyB0aGUgbGltaXRzIGFyZSBlbmZvcmNlZCAtIG1heWJlIGEgcmF0ZSBsaW1pdGluZyBtZWNoYW5pc20/CgpGaW5hbGx5LCBsZXQmIzM5O3Mgc2VlIGhvdyBncmFudWxhciB0aGUgY29uZmlndXJhdGlvbiBpcy4gQ2FuIHdlIHNldCBsaW1pdHMgcGVyIElQLCBwZXIgcG9ydCwgcGVyIGFwcGxpY2F0aW9uPyBBcmUgdGhlcmUgYW55IGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlZ3JhdGlvbiBmb3Igc3RhdGVmdWwgZmlsdGVyaW5nPyBBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMTpcdGNvbmZpZyBORlRfQ09OTkxJTUlUXG4gNTEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcJiMzNDtcbiA1MTM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNTE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDUxNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbiA1MTY6XHRcdGhlbHBcbiA1MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Y29ubmxpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUxODpcdFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxuIDUxOTpcdFxuIDUyMDpcdGNvbmZpZyBORlRfTE9HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVwZW5kZW5jaWVzIGFuZCBPcGVuIHZTd2l0Y2g6IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIEkmIzM5O20gbWFraW5nIHNvbWUgY29uZmlndXJhdGlvbiB1cGRhdGVzLCBhbmQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBkZWFsaW5nIHdpdGggYE5GVF9DT05OTElNSVRgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBub3RlcyBjbGVhcmx5IHN0YXRlIGl0IHJlbGllcyBvbiBgTkZfQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UuIFNvLCB0aGUgYWN0aW9uIGl0ZW0gaGVyZSBpcyBjbGVhcjogZW5zdXJlIGBORlRfQ09OTkxJTUlUYCBpcyBkZWZpbml0ZWx5IGluY2x1ZGVkIGluIHRoZSBjb25maWd1cmF0aW9ucy4gRG9uJiMzOTt0IHdhbnQgYW55IHN1cnByaXNlcyBkdXJpbmcgZGVwbG95bWVudC4KCk5vdywgSSYjMzk7bSBhbHNvIHdvcmtpbmcgd2l0aCBgT1BFTlZTV0lUQ0hgIGFuZCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhZ2Fpbi4gSXQmIzM5O3MgZWFzeSB0byBnZXQgZGlzdHJhY3RlZCBhbmQgZm9yZ2V0IGEgc21hbGwgYnV0IGNydWNpYWwgZGV0YWlsIHRoYXQgY29tZXMgdXAgaW4gbXkgd29yayBhbGwgdGhlIHRpbWUuIERvdWJsZS1jaGVja2luZyBpcyBiZXR0ZXIgdGhhbiBzcGVuZGluZyB0aW1lIGRlYnVnZ2luZyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gT3BlbiB2U3dpdGNoIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIGJ1aWxkIHByb2Nlc3MsIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYE9QRU5WU1dJVENIYCBpdHNlbGYgaGluZ2VzIG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IG5ldHdvcmsgaW50ZXJhY3Rpb24gaXMgZnVuZGFtZW50YWwuIFRoZW4sIEkgc2VlIGBORl9DT05OVFJBQ0tgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgTkZfQ09OTlRSQUNLX09WU2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgT1ZTIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLCByZXByZXNlbnRlZCBieSBgTkZfQ09OTlRSQUNLX09WU2AsIGNhbiYjMzk7dCBldmVuIGJlIGNvbnNpZGVyZWQgdW5sZXNzIHRoZSBiYXNlIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQuIFRoaXMgd2hvbGUgYE5GX0NPTk5UUkFDS19PVlNgIHRoaW5nLCBzcGVjaWZpY2FsbHksIGNvbXBlbHMgdGhlIGNvbXBpbGF0aW9uIG9mIGBjb25udHJhY2sub2AuIEkgc2hvdWxkIHZlcmlmeSBgTkZfQ09OTlRSQUNLX09WU2AgaW4gYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29kZSBjb21waWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIE9wZW4gdlN3aXRjaC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIKSAmIzQzOz0gb3BlbnZzd2l0Y2gub1xuICAgNzpcdFxuICAgODpcdG9wZW52c3dpdGNoLXkgOj0gXFxcbiAgIDk6XHRcdGFjdGlvbnMubyBcXFxuICAxMDpcdFx0ZGF0YXBhdGgubyBcXFxuICAxMTpcdFx0ZHBfbm90aWZ5Lm8gXFxcbiAgMTI6XHRcdGZsb3cubyBcXFxuICAxMzpcdFx0Zmxvd19uZXRsaW5rLm8gXFxcbiAgMTQ6XHRcdGZsb3dfdGFibGUubyBcXFxuICAxNTpcdFx0bWV0ZXIubyBcXFxuICAxNjpcdFx0b3BlbnZzd2l0Y2hfdHJhY2UubyBcXFxuICAxNzpcdFx0dnBvcnQubyBcXFxuICAxODpcdFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcbiAgMTk6XHRcdHZwb3J0LW5ldGRldi5vXG4gIDIwOlx0XG4gIDIxOlx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxuICAyMjpcdG9wZW52c3dpdGNoLXkgJiM0Mzs9IGNvbm50cmFjay5vXG4gIDIzOlx0ZW5kaWZcbiAgMjQ6XHRcbiAgMjU6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0hfVlhMQU4pJiM0Mzs9IHZwb3J0LXZ4bGFuLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxODgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGBjb25udHJhY2sub2AgaXMgb25seSBidWlsdCB3aGVuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbmFibGUgYm90aCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkZfQ09OTlRSQUNLYCBpbiBteSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHRvIGVuYWJsZSAqdGhpcyBzcGVjaWZpYyogcGF0Y2gsIHRoZSBwYXJ0IGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAsIEkgbmVlZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJ1dCB0aGF0JiMzOTtzIGhpZGRlbiwgaXNuJiMzOTt0IGl0PyBTbywgSSBoYXZlIHRvIGdvIHRocm91Z2ggYE5GVF9DT05OTElNSVRgIG9yIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCB0byBnZXQgdG8gaXQuIExldCYjMzk7cyB1c2UgYE5GVF9DT05OTElNSVRgIHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQga2VlcCB0aGluZ3MgY2xlYW5lci4KClNvLCBsZXQmIzM5O3MgaW5jbHVkZToKKiAgIGBPUEVOVlNXSVRDSGAKKiAgIGBORl9DT05OVFJBQ0tgCiogICBgTkZUX0NPTk5MSU1JVGAKClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIGBORlRfQ09OTkxJTUlUYCYjMzk7cyBkZXBlbmRlbmNpZXMuIEFoIHllcywgaXQgZGVwZW5kcyBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYC4gTGV0JiMzOTtzIHRocm93IGluIGBORVRGSUxURVJfQURWQU5DRURgIGFzIHdlbGwuCgpTbywgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCwgYXQgbGVhc3QgZm9yIG5vdywgYXJlOgoKKiAgIGBPUEVOVlNXSVRDSGAKKiAgIGBORl9DT05OVFJBQ0tgCiogICBgTkVURklMVEVSX0FEVkFOQ0VEYAoqICAgYE5GVF9DT05OTElNSVRgCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgYWN0dWFsbHkgdXNhYmxlIHRocm91Z2ggZ2VubDogWWVwLCBpdCYjMzk7cyByZWdpc3RlcmVkIGluIGBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseWAsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcF9jdF9saW1pdF9nZW5sX2ZhbWlseSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTY1NT1vdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHU4IGNtZCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTY2Ni1cdFx0XHRcdFx0aW5mby1cdTAwM2VzbmRfc2VxLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2Njc6XHRcdFx0XHRcdFx1MDAyNmRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5LCAwLCBjbWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2NjgtXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBvdnNfY3RfbGltaXRfbXVsdGljYXN0X2dyb3VwID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDAzLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMDQ6c3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDA1LVx0LmhkcnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0xMDA9c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKSB7IH1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTA1LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjEwNjpleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5O1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTEwNy0jZW5kaWZcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjgxPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgKiBjb25zdCBkcF9nZW5sX2ZhbWlsaWVzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4Ny0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNjg4Olx0XHUwMDI2ZHBfY3RfbGltaXRfZ2VubF9mYW1pbHksXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjg5LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3NAoJCQkJCQkJb3V0cHV0OiAyODgKCQkJCQkJCXRob3VnaHRzOiAxMDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgTGltaXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAgYXJlIGluZGVlZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMg4oCTIHRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgd2l0aGluIGBkcF9nZW5sX2ZhbWlsaWVzYCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBpbiBgZHBfcmVnaXN0ZXJfZ2VubGAuIFRoaXMgaXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLiBgb3ZzX2N0X2V4ZWN1dGVgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLCBzcGVjaWZpY2FsbHkgdmlhIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCB3aGVuIGEgY29ubnRyYWNrIGFjdGlvbiBpcyB0cmlnZ2VyZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYG92c19jdF9leGVjdXRlYAoqICAgYG92c19jdF9saW1pdF9jbWRfc2V0YAoqICAgYG92c19jdF9saW1pdF9jbWRfZGVsYAoqICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YAoKQW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uczoKCiogICBgT1BFTlZTV0lUQ0hgCiogICBgTkZfQ09OTlRSQUNLYAoqICAgYE5FVEZJTFRFUl9BRFZBTkNFRGAKKiAgIGBORlRfQ09OTkxJTUlUYAoKSXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMuIEkgY2hlY2tlZCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgY29uZmlybWVkIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBidXQgaXQmIzM5O3MgKm5vdCogZGlyZWN0bHkgdXNlci1jb25maWd1cmFibGUuIEluc3RlYWQsIGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBORlRfQ09OTkxJTUlUYCAoYW5kIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCkuICBUaGVyZWZvcmUsIGVuYWJsaW5nIGBORlRfQ09OTkxJTUlUYCBpcyB0aGUgY29ycmVjdCBwYXRoIGZvciBlbmFibGluZyBjb25udHJhY2sgbGltaXQgZnVuY3Rpb25hbGl0eS4KCkJleW9uZCB0aGF0LCB0aGUgYmFzaWMgcmVxdWlyZW1lbnRzIGFyZTogYElORVRgIGlzIGdlbmVyYWxseSBlbmFibGVkLCBgTkZfQ09OTlRSQUNLYCBpcyBlc3NlbnRpYWwsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBuZWVkZWQgZm9yIGBORlRfQ09OTkxJTUlUYC4KClJldmlld2luZyB0aGUgcGF0Y2gsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyByZWxhdGVkIGZ1bmN0aW9uczoKCiogICBgb3ZzX2N0X2xpbWl0X2luaXRgCiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnRgCiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoYAoqICAgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAKKiAgIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgCiogICBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YAoqICAgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgCiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YAoKSSBjb25maXJtZWQgdGhhdCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCBpcyBjYWxsZWQgYnkgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAgYnkgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYnkgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYW5kIGBvdnNfY3RfY2hlY2tfbGltaXRgIGJ5IGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggaXMgc3Vic2VxdWVudGx5IGNhbGxlZCBieSBgb3ZzX2N0X2V4ZWN1dGVgLiBUaGlzIHByb3ZpZGVzIG1lIHRoZSBjb3JyZWN0IGVudHJ5IHBvaW50cy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZWZhY3RvcmluZyB0aGUgY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgaW4gT3BlbiB2U3dpdGNoIHRvIHV0aWxpemUgUkNVIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHN0cnVjdHVyZS4gVGhpcyBtaXRpZ2F0ZXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBuZXRucyB0ZWFyZG93biBieSBzcGxpdHRpbmcgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzLCBlbnN1cmluZyBhbiBSQ1UgZ3JhY2UgcGVyaW9kLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHRvIHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE9wZW4gdlN3aXRjaCBuZXR3b3JraW5nIHN1YnN5c3RlbS4KCkdpdmVuIHRoZSBpZGVudGlmaWVkIGNvbmZpZ3VyYXRpb25zIGFuZCBlbnRyeSBwb2ludHMsIHRoaXMgY29kZSBpcyAqZGVmaW5pdGVseSogZnV6emFibGUuICBUaGUgZnV6emluZyBzdHJhdGVneSBzaG91bGQgY2VudGVyIG9uIGJvdGggdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyAoc2V0dGluZywgZ2V0dGluZywgZGVsZXRpbmcgbGltaXRzKSBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB3aGVyZSBsaW1pdHMgYXJlIGNoZWNrZWQuCgpGaW5hbGx5LCBJIGNoZWNrZWQgYG92c19jdF9saW1pdF9jbWRfc2V0YCB0byBzZWUgaWYgaXQgd2FzIHN0YXRpYyBvciBpbmxpbmVkLiBTaW5jZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBzdHJ1Y3QsIGl0IHdpbGwgKm5vdCogYmUgaW5saW5lZC4gVGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBpbmxpbmUgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHBhcnQgb2YgYSBmdW5jdGlvbiBwb2ludGVyIGFycmF5LiBJdCB3aWxsIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MsIGFuZCBpcyB0aHVzIHBlcmZlY3RseSBzYWZlIHRvIGluY2x1ZGUuCgpUaW1lIHRvIGZlZWQgdGhpcyBpbnRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GVF9DT05OTElNSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GVF9DT05OTElNSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsaWZldGltZSBpc3N1ZSB3aXRoIGBjdF9saW1pdF9pbmZvYCBpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgcHJvcGVyIFJDVSBwcm90ZWN0aW9uIChgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4pIGFuZCBzZXBhcmF0aW5nIHRoZSB0ZWFyZG93biBpbnRvIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBoYXNlcyB0byByZXNwZWN0IFJDVSBncmFjZSBwZXJpb2RzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIGFuZCB3aGlsZSBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgICh3aGljaCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSksIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgaXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgKGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgKSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29udGFpbnMgbm8gcGFkZGluZy4gVGhlIGJ1Z3MgcHJldmVudGVkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCmluZGV4IDM4YzZmMzQ3NzZjMjguLjhjYTViYjE1NWVlYjkgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNTUgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiYjNDM7c3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBDVCBsaW1pdCBzdGF0ZSBtdXN0IGJlIGRldGFjaGVkIGJ5IG92c19jdF9saW1pdF9leGl0X3N0YXJ0KCkgYW5kIGFuCiYjNDM7ICogUkNVIGdyYWNlIHBlcmlvZCBtdXN0IGVsYXBzZSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBydW5zLiAgVGhlIHBlcm5ldCBjb3JlCiYjNDM7ICogZ3VhcmFudGVlcyB0aGUgZ3JhY2UgcGVyaW9kIGJldHdlZW4gdGhlIC5wcmVfZXhpdCBhbmQgLmV4aXQgY2FsbGJhY2tzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTsKIAlpbnQgaTsKIAomIzQzOwlpZiAoIWluZm8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLSZndDtkYXRhKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwpAQCAtMTYyNiw3ICYjNDM7MTY0NSw3IEBAIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiAJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OwogCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3RfbGltaXQsIG5leHQsIGhlYWQsIGhsaXN0X25vZGUpCi0JCQlrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7CiYjNDM7CQkJa2ZyZWUoY3RfbGltaXQpOwogCX0KIAlrZnJlZShpbmZvLSZndDtsaW1pdHMpOwogCWtmcmVlKGluZm8pOwpAQCAtMTY2NSwxMiAmIzQzOzE2ODQsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE2NzksNiAmIzQzOzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKApAQCAtMTY5NSw2ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJY3RfbGltaXQtJmd0O2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CkBAIC0xNzA5LDEyICYjNDM7MTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTcyMyw2ICYjNDM7MTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNzMwLDYgJiM0MzsxNzU0LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3NzMsNiAmIzQzOzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCAmYW1wO3pvbmVfbGltaXQpOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLApAQCAtMTc5NiwxMiAmIzQzOzE4MjIsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJCSZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKLQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpOwogCiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCQluZXQsIGluZm8tJmd0O2RhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTgxNiw2ICYjNDM7MTg0MCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KQpAQCAtMTgyOCwxOSAmIzQzOzE4NTMsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCWhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7CiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tJmd0O2RhdGEsCiAJCQkJY3RfbGltaXQtJmd0O3pvbmUsIGN0X2xpbWl0LSZndDtsaW1pdCwgcmVwbHkpOwogCQkJaWYgKGVycikKLQkJCQlnb3RvIGV4aXRfZXJyOwomIzQzOwkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCi1leGl0X2VycjoKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODUwLDcgJiM0MzsxODcyLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsCkBAIC0xODYzLDggJiM0MzsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTg4NCw3ICYjNDM7MTkwNSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLApAQCAtMTg5Nyw4ICYjNDM7MTkxNyw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE5MTgsNyAmIzQzOzE5MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULApAQCAtMTkzMiwxOCAmIzQzOzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJaWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJbmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLAogCQkJcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9IGVsc2UgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbywKIAkJCQkJCSAgICAgIHJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9lcnI7CiAKIAlubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7CiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwpAQCAtMjAxOCwxMiAmIzQzOzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgdGhlIFJDVS1wcm90ZWN0ZWQKJiM0MzsgKiBjdF9saW1pdF9pbmZvIGFuZCBzdG9yZXMgaXQgaW4gb3ZzX25ldC0mZ3Q7Y3RfZXhpdF9kYXRhIGZvcgomIzQzOyAqIG92c19jdF9leGl0X2ZpbmlzaCgpIHRvIGNvbXBsZXRlIHRoZSB0ZWFyZG93biBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKJiM0MzsJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwomIzQzOwomIzQzOwlvdnNfbmV0LSZndDtjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ29tcGxldGVzIHRoZSBDVCBsaW1pdCB0ZWFyZG93bi4gIFRoZSBwZXJuZXQgY29yZSBndWFyYW50ZWVzIGFuIFJDVQomIzQzOyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmQKJiM0MzsgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwogCiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpOwomIzQzOwlvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTsKICNlbmRpZgogCiAJaWYgKG92c19uZXQtJmd0O3h0X2xhYmVsKQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCmluZGV4IDMxN2U1MjVjOGExMTMuLmE1MTZlNWJhZTRmMzQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKQEAgLTE0LDcgJiM0MzsxNCw4IEBAIGVudW0gb3ZzX2tleV9hdHRyOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKQogaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7Ci12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKik7CiYjNDM7dm9pZCBvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7CiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTsKIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKiwKQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpOwogCiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIGludCBhdHRyKQogewpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBkZWQ0NmQ5OTNhNGVkLi4zNjJlMzIyZmI0MWY0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMjc1NywxNyAmIzQzOzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfcHJlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiYjNDM7ewomIzQzOwlvdnNfbG9jaygpOwomIzQzOwlvdnNfY3RfZXhpdF9zdGFydChkbmV0KTsKJiM0MzsJb3ZzX3VubG9jaygpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiB7Ci0Jc3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhkbmV0LCBvdnNfbmV0X2lkKTsKIAlzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDsKJiM0MzsJc3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7CiAJc3RydWN0IG5ldCAqbmV0OwogCUxJU1RfSEVBRChoZWFkKTsKIAogCW92c19sb2NrKCk7CiAKLQlvdnNfY3RfZXhpdChkbmV0KTsKJiM0MzsJb3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtJmd0O2N0X2V4aXRfZGF0YSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIGRwX25leHQsICZhbXA7b3ZzX25ldC0mZ3Q7ZHBzLCBsaXN0X25vZGUpCiAJCV9fZHBfZGVzdHJveShkcCk7CkBAIC0yNzkxLDYgJiM0MzsyNzk4LDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHsKIAkuaW5pdCA9IG92c19pbml0X25ldCwKJiM0MzsJLnByZV9leGl0ID0gb3ZzX3ByZV9leGl0X25ldCwKIAkuZXhpdCA9IG92c19leGl0X25ldCwKIAkuaWQgICA9ICZhbXA7b3ZzX25ldF9pZCwKIAkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX25ldCksCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCmluZGV4IDY5NjY0MGU4OGZhN2UuLjQ0NjU1M2M1MWMzMGUgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCkBAIC0xNjQsNyAmIzQzOzE2NCwxMCBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KJiM0MzsgKiBAY3RfZXhpdF9kYXRhOiBDVCBsaW1pdCBzdGF0ZSBkZXRhY2hlZCBhdCAucHJlX2V4aXQsIGZyZWVkIGF0IC5leGl0LgogICogQHh0X2xhYmVsOiBXaGV0aGVyIGNvbm5sYWJsZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBuZXR3b3JrIG9yIG5vdC4KICAqLwogc3RydWN0IG92c19uZXQgewpAQCAtMTcyLDcgJiM0MzsxNzUsOCBAQCBzdHJ1Y3Qgb3ZzX25ldCB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlOwogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCi0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfZXhpdF9kYXRhOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIGNvbm50cmFjayBjb2RlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgb2YgYGN0X2xpbWl0X2luZm9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBnaXZlbiB0aGUgc2NvcGUgKGZvdXIgZmlsZXMpIGFuZCB0aGUgY29yZSBuYXR1cmUgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBzZWUgZm9yIGNvbmN1cnJlbmN5LiBUaGV5JiMzOTtyZSB1c2luZyBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCwgYW5kIGBvdnNsX2RlcmVmZXJlbmNlYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXkmIzM5O3JlIGFpbWluZyBmb3IgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgcmVhZHMsIGFuZCBjYXJlZnVsbHkgbWFuYWdpbmcgd3JpdGVzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHdpdGggYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGVybmV0IGNhbGxiYWNrcyBpbmRpY2F0ZXMgdGhleSYjMzk7cmUgY2FyZWZ1bGx5IG1hbmFnaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlLCB3aGljaCBpcyBhbHNvIGEgZ29vZCBzaWduLiBMb29rcyBsaWtlIHRoZXkgZml4ZWQgc29tZSBSQ1UgcmVhZCBsb2NrIHBsYWNlbWVudHMgdG9vLiBTbWFydC4KCk5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHksIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkgc3RhcnQgdG8gZGlnIGluLiBMZXQmIzM5O3Mgc2VlLi4uIFRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIGFsbG9jYXRpb24sIHdoaWNoIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnNwZWN0aW9uLiBUaGUgb2xkIGNvZGUgZGlyZWN0bHkgYWxsb2NhdGVkIHRvIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYC4gVGhlIG5ldyBjb2RlIGxvb2tzIGxpa2UgaXQgYWxsb2NhdGVzIGEgbG9jYWwgYGluZm9gIHZhcmlhYmxlLCBpbml0aWFsaXplcyBpdCwgYW5kIHRoZW4gYXNzaWducyBpdCB0byBgb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mb2AuCgpPa2F5LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHVzZSBvZiBga21hbGxvY19vYmpgLiBJJiMzOTtsbCBhc3N1bWUgdGhhdCYjMzk7cyBqdXN0IGEgbWFjcm8gZm9yIGBrbWFsbG9jKHNpemVvZihvYmopLCBHRlBfS0VSTkVMKWAgZm9yIG5vdywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZXkmIzM5O3JlIGluaXRpYWxpemluZyBgaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdGAsIGFsbG9jYXRpbmcgYGluZm8tJmd0O2xpbWl0c2AsIGFuZCBpbml0aWFsaXppbmcgdGhvc2UgaGFzaCBidWNrZXRzLiBUaGV5IGFsc28gaW5pdGlhbGl6ZSBgaW5mby0mZ3Q7ZGF0YWAuIFNvIGZhciwgc28gZ29vZCwgaXQgKmxvb2tzKiBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpZWxkcyBpbiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCB0aGF0IGFyZW4mIzM5O3QgYmVpbmcgZXhwbGljaXRseSBzZXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIGRvbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MsIGJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhIHN1YnRsZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaW4gY29ubnRyYWNrIGNvZGUhIFRoaXMgbmVlZHMgYSB2ZXJ5IGNhcmVmdWwgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG92c19jdF9saW1pdF9pbmZvIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTg2PXN0cnVjdCBvdnNfY3RfbGltaXQge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05My1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5NDpzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8ge1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk1LVx0dTMyIGRlZmF1bHRfbGltaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2A6CgoqKkRpdmluZyBpbnRvIHRoZSBgb3ZzX2N0X2xpbWl0X2luZm9gIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgT1ZTIGNvbm50cmFjayBwdXp6bGUsIHJpZ2h0PyBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBjb250ZXh0cyB3aGVyZSBJJiMzOTtkIGVuY291bnRlciB0aGlzIOKAkyBsaWtlbHkgZGVlcCB3aXRoaW4gdGhlIGNvbm50cmFjayBtb2R1bGUgaXRzZWxmLCBwZXJoYXBzIHdoZW4gY29uZmlndXJpbmcgb3IgZXZhbHVhdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gSXQmIzM5O3MgdXNlZCB0byBzdG9yZSB0aGUgc3BlY2lmaWNzIG9mIHRoZSBsaW1pdHMgYXBwbGllZCB0byBjb25uZWN0aW9ucywgSSBhc3N1bWUuIEkgbmVlZCB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiB0aG91Z2gsIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGZpZWxkcyBhcmUgcHJlc2VudC4gV2hhdCYjMzk7cyB0cmFja2VkPyBJcyB0aGlzIHBlci1mbG93LCBwZXItem9uZSwgb3Igc29tZXRoaW5nIGVsc2U/IElzIGl0IGEgY29tYmluYXRpb24/IEkmIzM5O20gZ3Vlc3NpbmcgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGVyZSBhcmUgY291bnRlcnMgZm9yIHRoaW5ncyBsaWtlIG51bWJlciBvZiBhY3RpdmUgZmxvd3MsIHBlcmhhcHMgc29tZSB0aW1lc3RhbXBzIHJlbGF0ZWQgdG8gaG93IGxvbmcgdGhlIGxpbWl0IGhhcyBiZWVuIGFjdGl2ZSwgYW5kIG1heWJlIGV2ZW4gZmxhZ3MgaW5kaWNhdGluZyB0aGUgY3VycmVudCBzdGF0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxpbWl0IOKAkyAmIzM0O292ZXIgbGltaXQmIzM0OywgJiMzNDthcHByb2FjaGluZyBsaW1pdCwmIzM0OyAmIzM0O2NsZWFyZWQmIzM0OyBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZpZWxkcyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxpbWl0IGFwcGxpY2F0aW9uLCBwb2xpY3ksIGFuZCBob3cgdG8gYmVzdCBtYW5hZ2UgaXQgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0dTE2IHpvbmU7XG4gIDkxOlx0XHR1MzIgbGltaXQ7XG4gIDkyOlx0fTtcbiAgOTM6XHRcbiAgOTQ6XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8ge1xuICA5NTpcdFx0dTMyIGRlZmF1bHRfbGltaXQ7XG4gIDk2Olx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqbGltaXRzO1xuICA5NzpcdFx0c3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpkYXRhO1xuICA5ODpcdH07XG4gIDk5Olx0XG4gMTAwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X2xpbWl0X3BvbGljeVtPVlNfQ1RfTElNSVRfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4gMTAxOlx0XHRbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0gPSB7IC50eXBlID0gTkxBX05FU1RFRCwgfSxcbiAxMDI6XHR9O1xuIDEwMzpcdCNlbmRpZlxuIDEwNDpcdFxuIDEwNTpcdHN0YXRpYyBib29sIGxhYmVsc19ub256ZXJvKGNvbnN0IHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscyAqbGFiZWxzKTtcbiAxMDY6XHRcbiAxMDc6XHRzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKTtcbiAxMDg6XHRcbiAxMDk6XHRzdGF0aWMgdTE2IGtleV90b19uZnByb3RvKGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBMaW1pdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBuZXRucyAobmV0d29yayBuYW1lc3BhY2UpIGV4aXQgb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gY29ubmVjdGlvbiB0cmFja2luZyBkYXRhLiBUaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUgcHJvcGVyIHVzZSBvZiBSQ1UgcHJpbWl0aXZlczogYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBgcmN1X3JlcGxhY2VfcG9pbnRlcmAsIGFuZCBzbyBvbi4gVGhpcyBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCBmb3IgaGFuZGxpbmcgY29uY3VycmVudCBhY2Nlc3MgYW5kIHByb3RlY3RpbmcgZGF0YSBkdXJpbmcgdXBkYXRlcyBhbmQgZGVsZXRpb25zIHdpdGhpbiBhbiBSQ1UgY29udGV4dC4KCkkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHdoaWNoIGFyZSBwcm9iYWJseSB0aGVyZSB0byBtYW5hZ2UgdGhlIFJDVSBncmFjZSBwZXJpb2RzIGVmZmVjdGl2ZWx5IGR1cmluZyBhIG5ldG5zIHRlYXJkb3duLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiBhYm91dCB0aGUgbmV0bnMgZXhpdCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBwcmV2ZW50IGEgc2NlbmFyaW8gd2hlcmUgc29tZXRoaW5nIGlzIGZyZWVkIHdoaWxlIGl0JiMzOTtzIHN0aWxsIGJlaW5nIGFjY2Vzc2VkLCBvciB3aGVyZSBhIHBvaW50ZXIgYmVjb21lcyBOVUxMIGJlZm9yZSBpdHMgdXNlLiBHb29kLCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdCB0byBzZWUuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgY2xlYXIsIHdlbGwtdW5kZXJzdG9vZCBwcm9ibGVtLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBjYXRjaGluZyB0aGUgZXJyb3JzLCBhbmQgdGhhdCYjMzk7cyBnb29kIHZhbGlkYXRpb24gdG9vLgoKSSYjMzk7dmUgY2hlY2tlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXM6IGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AsIGFuZCBgZGF0YWAuIEFsbCB0aHJlZSBhcmUgaW5pdGlhbGl6ZWQgaW4gYG92c19jdF9saW1pdF9pbml0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWRpbmcgdG8gdnVsbmVyYWJpbGl0aWVzIGlzIGEgY29uc3RhbnQgY29uY2Vybi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgcGFkZGluZywgc28gdGhhdCYjMzk7cyBhbm90aGVyIGNoZWNrLgoKSSBkaWQgYSBxdWljayByZXZpZXcgb2YgdGhlIGZ1bmN0aW9ucyBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCBhbmQgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgLCBhbmQgdGhlIHBhdGNoIG5vdyBjYWxscyB0aGVtIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgZG9pbmcgYW55dGhpbmcgc25lYWt5IGxpa2UgcGFzc2luZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBidXQgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaXMgb25seSBhYm91dCByZWFkaW5nIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIGRhdGEsIGl0IHNvdW5kcyBsaWtlIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGl0IGlzbiYjMzk7dCBzZW5kaW5nIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIEFsd2F5cyBnb29kIHRvIGRvdWJsZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODA6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc4MTpcdH1cbjE3ODI6XHRcbjE3ODM6XHRzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbjE3ODQ6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqZGF0YSxcbjE3ODU6XHRcdFx0XHRcdFx0IHUxNiB6b25lX2lkLCB1MzIgbGltaXQsXG4xNzg2Olx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG4xNzg3Olx0e1xuMTc4ODpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIGN0X3pvbmU7XG4xNzg5Olx0XHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtcbjE3OTA6XHRcdHUzMiBjb25uY291bnRfa2V5ID0gem9uZV9pZDtcbjE3OTE6XHRcbjE3OTI6XHRcdHpvbmVfbGltaXQuem9uZV9pZCA9IHpvbmVfaWQ7XG4xNzkzOlx0XHR6b25lX2xpbWl0LmxpbWl0ID0gbGltaXQ7XG4xNzk0Olx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgem9uZV9pZCwgTkZfQ1RfREVGQVVMVF9aT05FX0RJUiwgMCk7XG4xNzk1Olx0XG4xNzk2Olx0XHR6b25lX2xpbWl0LmNvdW50ID0gbmZfY29ubmNvdW50X2NvdW50X3NrYihuZXQsIE5VTEwsIDAsIGRhdGEsXG4xNzk3Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjb25uY291bnRfa2V5KTtcbjE3OTg6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIFN0YWNrIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWU6IGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBnb2luZyB0byBjYXVzZSBhbnkgcHJvYmxlbXMgbGF0ZXIgb24/IFRoaXMgbWVhbnMgdGhlIGRhdGEgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0cmFjZSBteSB0aG91Z2h0cyBmdXJ0aGVyLCBhcyBJIGJlbGlldmUgdGhlIGNvZGUgY291bGQgcG9zc2libHkgaGF2ZSBhIHByb2JsZW0uCgpOb3csIGl0IGluaXRpYWxpemVzIGB6b25lX2xpbWl0LnpvbmVfaWRgIGFuZCBgem9uZV9saW1pdC5saW1pdGAsIHRoZW4gY2FsbHMgYG5mX2N0X3pvbmVfaW5pdGAuIFNvLCB0aGUgYHN0cnVjdGAgaXRzZWxmIGhhcyBoYWQgbWVtYmVycyBpbml0aWFsaXplZCB3aXRoaW4gaXQsIGJ1dCBpcyB0aGUgKmVudGlyZSogc3RydWN0IHRydWx5IGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkPyBTcGVjaWZpY2FsbHksIEkgc2VlIGB6b25lX2xpbWl0LmNvdW50YCBiZWluZyBwb3B1bGF0ZWQgKmFmdGVyKiB0aGUgaW5pdGlhbCBhc3NpZ25tZW50cy4gVGhlIGNyaXRpY2FsIGxpbmUgdG8gZXhhbWluZSBpcyBgcmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgJmFtcDt6b25lX2xpbWl0KTtgLiBUaGF0IGBubGFfcHV0X25vaGRyYCBmdW5jdGlvbiwgaXQmIzM5O3MgZXhwZWN0aW5nIGEgZnVsbHkgcG9wdWxhdGVkIGBzdHJ1Y3RgIC0gb3IgYXQgbGVhc3QsIHRoYXQmIzM5O3MgbXkgYXNzdW1wdGlvbiwgYW5kIGl0JiMzOTtzIGNlcnRhaW5seSBiZXN0IHByYWN0aWNlLiBTbyB0aGUgbWFpbiBwcm9ibGVtIGhlcmUgaXMgaWYgYG5sYV9wdXRfbm9oZHJgIHdpbGwgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1iZXJzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBgc2l6ZW9mKHpvbmVfbGltaXQpYCBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcsIGFuZCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0IGlzIGJlaW5nIGV4cG9zZWQuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG1lbWJlcnMgaW4gYHN0cnVjdCBvdnNfem9uZV9saW1pdGAgdGhhdCBtYXkgcmVxdWlyZSBpbml0aWFsaXphdGlvbiBieSBgbmZfY3Rfem9uZV9pbml0YC4gSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgcmVseWluZyBvbiB0aGUgY29tcGlsZXIgdG8gaW5pdGlhbGl6ZSBhbnkgdW5pbml0aWFsaXplZCBwYXJ0cyBvZiB0aGUgYHN0cnVjdGAsIGFzIHRoYXQgY291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG92c196b25lX2xpbWl0IFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oPTExNzg9ZW51bSBvdnNfY3RfbGltaXRfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4Ny1cbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oOjExODg6c3RydWN0IG92c196b25lX2xpbWl0IHtcbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oLTExODktXHRpbnQgem9uZV9pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggS2VybmVsIEhlYWRlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBPcGVuIHZTd2l0Y2gga2VybmVsIGludGVncmF0aW9uLCBhbmQgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFyZSBwcm9iYWJseSBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmhgLiBOb3csIHRoZSB0cmlja3kgcGFydCBpcyBwaW5wb2ludGluZyB0aGUgZXhhY3QgbG9jYXRpb24gd2l0aGluIHRoYXQgaGVhZGVyLiBCYXNlZCBvbiBwcmlvciBleHBlcmllbmNlIGFuZCB0aGUgbmF0dXJlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE4OCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIGZvY3VzIG15IGluaXRpYWwgc2NhbiB0aGVyZSwgbG9va2luZyBmb3Igc3RydWN0dXJlcywgZW51bXMsIG9yIG1hY3JvcyB0aGF0IHNlZW0gcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHJlbGF0ZWQgdG8gdGhlIG92cyBrZXJuZWwgbW9kdWxlIHRoYXQgaXMgY29tbXVuaWNhdGluZyB0byB1c2VyIHNwYWNlLiBMaW5lIDExODggaXMgZ29pbmcgdG8gYmUgbXkgYW5jaG9yIHRvIHN0YXJ0LiBJJiMzOTtsbCB6b29tIGluIHF1aWNrbHksIGxvb2tpbmcgZm9yIGZhbWlsaWFyIHBhdHRlcm5zIGFuZCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTg1Olx0XG4xMTg2Olx0I2RlZmluZSBPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUgLTFcbjExODc6XHRcbjExODg6XHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQge1xuMTE4OTpcdFx0aW50IHpvbmVfaWQ7XG4xMTkwOlx0XHRfX3UzMiBsaW1pdDtcbjExOTE6XHRcdF9fdTMyIGNvdW50O1xuMTE5MjpcdH07XG4xMTkzOlx0XG4xMTk0Olx0ZW51bSBvdnNfZGVjX3R0bF9hdHRyIHtcbjExOTU6XHRcdE9WU19ERUNfVFRMX0FUVFJfVU5TUEVDLFxuMTE5NjpcdFx0T1ZTX0RFQ19UVExfQVRUUl9BQ1RJT04sXHQvKiBOZXN0ZWQgc3RydWN0IG5sYXR0ciAqL1xuMTE5NzpcdFx0X19PVlNfREVDX1RUTF9BVFRSX01BWFxuMTE5ODpcdH07XG4xMTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgem9uZV9pZGAsIGBsaW1pdGAsIGFuZCBgY291bnRgLCBhbGwgaW50ZWdlcnMsIGFsbCA0IGJ5dGVzIGVhY2gsIGFkZGluZyB1cCB0byAxMiBieXRlcyB0b3RhbC4gTm8gcGFkZGluZyB0byB3b3JyeSBhYm91dCwgYXNzdW1pbmcgdGhlIHN0YW5kYXJkIDQtYnl0ZSBhbGlnbm1lbnQsIHdoaWNoIGlzIGNvbXBsZXRlbHkgZXhwZWN0ZWQuIFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpbiB0aGlzIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZDogYHpvbmVfaWRgIGhhcyBhIHZhbHVlLCBgbGltaXRgIGhhcyBhIHZhbHVlLCBgY291bnRgIGhhcyBhIHZhbHVlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzdHJ1Y3R1cmUgaXMgY29ycmVjdGx5IHBvcHVsYXRlZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCB0b3VjaCB0aGUgc3RydWN0dXJlJiMzOTtzIGZpZWxkcyBvciBpbml0aWFsaXphdGlvbjsgaXQgb25seSBtb2RpZmllcyB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGFyb3VuZCBpdCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgc29ydCBvZiBjb25jdXJyZW5jeSBvciBSQ1UgaXNzdWUuCgpUaGUgZmFjdCB0aGF0IHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBsb2NraW5nIHN1Z2dlc3RzIGl0JiMzOTtzIGFpbWluZyB0byBmaXggYSByYWNlIGNvbmRpdGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNvbWV0aGluZyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkIGZsYWcuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGRpZmYgYWdhaW46CgpgYGBjCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKYGBgCgpIYW5nIG9uIGEgc2Vjb25k4oCmIGBrbWFsbG9jX29iamA/IFRoYXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYW4gT3BlbiB2U3dpdGNoLXNwZWNpZmljIG1hY3JvLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBPcGVuIHZTd2l0Y2ggc291cmNlIG9yIGluY2x1ZGUgZmlsZXMgdG8gZmluZCBvdXQgd2hhdCBga21hbGxvY19vYmpgIGFjdHVhbGx5IGRvZXMuIEl0JiMzOTtzIHByb2JhYmx5IGEgd3JhcHBlciBhcm91bmQgYGttYWxsb2NgIHRvIGhhbmRsZSBvYmplY3QgYWxsb2NhdGlvbiwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZSBoZXJlIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBrbWFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTIwLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEyMTojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTIyLVx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTMyLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzMzojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzQtXHRfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCBDT1VOVClcbi0tXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxubGliL2RlY29tcHJlc3NfdW54ei5jOjE2NDojZGVmaW5lIGttYWxsb2Nfb2JqKHR5cGUpIG1hbGxvYyhzaXplb2YodHlwZSkpXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcbi0tXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg9NjM9c3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX2FycmF5KHVuc2lnbmVkIG4sIHNpemVfdCBzLCBnZnBfdCBnZnApXG4tLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjY4OiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02OS1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo3MTojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03Mi1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDEwCgkJCQkJCQlvdXRwdXQ6IDI0NQoJCQkJCQkJdGhvdWdodHM6IDk1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBhbmQgc2VlIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgZXhwb3NlZC4gYGttYWxsb2Nfb2JqYCwgYXMgSSByZWNhbGwsIHVzZXMgYGttYWxsb2NgLCB3aGljaCBkb2VzbiYjMzk7dCB6ZXJvIG1lbW9yeS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpJIHNlZSBgaW5mb2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iamAsIGFuZCB0aGVuIGl0cyBmaWVsZHMgKGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AsIGBkYXRhYCkgYXJlIGluaXRpYWxpemVkLiBJIGFsc28gaGFkIGEgcXVpY2sgbG9vayBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXRzZWxmIHRvIGNoZWNrIGZvciBhbnkgcGFkZGluZyBpc3N1ZXMsIHNwZWNpZmljYWxseSB0aGF0IDQtYnl0ZSBwYWRkaW5nIGFmdGVyIGBkZWZhdWx0X2xpbWl0YCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaXMgdGhlcmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGlzIHN0cnVjdHVyZSBldmVuIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gTm8sIGl0JiMzOTtzIGludGVybmFsLiBMaW1pdHMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCwgd2hpY2ggYWxsb2NhdGVzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3RydWN0dXJlLCBgc3RydWN0IG92c196b25lX2xpbWl0YCwgb24gdGhlIHN0YWNrLiBgc3RydWN0IG92c196b25lX2xpbWl0YCBoYXMgbm8gcGFkZGluZy4gU28gdGhlIHBhZGRpbmcgaW4gYG92c19jdF9saW1pdF9pbmZvYCBkb2VzbiYjMzk7dCBtYXR0ZXIgZnJvbSBhIHVzZXItc3BhY2UgcGVyc3BlY3RpdmUuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBhYm91dCBjb25jdXJyZW5jeSBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBSQ1UuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBkaXJlY3QgYGttYWxsb2NgIGFsbG9jYXRpb24gZm9yIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYCwgYW5kIGxhdGVyIGZyZWVkIGl0IGluIGBvdnNfY3RfbGltaXRfZXhpdGAuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBpbmZvYCwgaW5pdGlhbGl6ZXMgaXQgZnVsbHksIGFuZCB0aGVuIHVzZXMgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gc2FmZWx5IG1ha2UgaXQgYXZhaWxhYmxlLiBBY2Nlc3MgaXMgbm93IGRvbmUgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAgYW5kIGBvdnNsX2RlcmVmZXJlbmNlYC4gVGhpcyBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4sIHdoaWNoIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLgoKVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLCB0aGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4KClNvLCB0aGUgYnVncyBiZWluZyBhZGRyZXNzZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIFJDVS4gVGhlcmUmIzM5O3Mgbm90aGluZyBpbiB0aGlzIHBhdGNoIHRoYXQgc2NyZWFtcyAmIzM0O0tNU0FOJiMzNDsgYXQgbWUuIEl0JiMzOTtzIGEgY2xlYW4gUkNVIGZpeC4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cyB0byBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgcmVhc29uaW5nIEkganVzdCBsYWlkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIGlzc3VlIHdpdGggYGN0X2xpbWl0X2luZm9gIGluIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHByb3RlY3Rpb24gKGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLikgYW5kIHNlcGFyYXRpbmcgdGhlIHRlYXJkb3duIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGhhc2VzIHRvIHJlc3BlY3QgUkNVIGdyYWNlIHBlcmlvZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgYW5kIHdoaWxlIGl0IGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBpdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZSB0aGF0IGlzIHNlbnQgdG8gdXNlciBzcGFjZSAoYHN0cnVjdCBvdnNfem9uZV9saW1pdGApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb250YWlucyBubyBwYWRkaW5nLiBUaGUgYnVncyBwcmV2ZW50ZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIGlzc3VlIHdpdGggYGN0X2xpbWl0X2luZm9gIGluIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHByb3RlY3Rpb24gKGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLikgYW5kIHNlcGFyYXRpbmcgdGhlIHRlYXJkb3duIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGhhc2VzIHRvIHJlc3BlY3QgUkNVIGdyYWNlIHBlcmlvZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgYW5kIHdoaWxlIGl0IGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBpdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZSB0aGF0IGlzIHNlbnQgdG8gdXNlciBzcGFjZSAoYHN0cnVjdCBvdnNfem9uZV9saW1pdGApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb250YWlucyBubyBwYWRkaW5nLiBUaGUgYnVncyBwcmV2ZW50ZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo0OS4zMDk4MzY5MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA0OTUyMzI1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORlRfQ09OTkxJTUlUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsaWZldGltZSBpc3N1ZSB3aXRoIGBjdF9saW1pdF9pbmZvYCBpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgcHJvcGVyIFJDVSBwcm90ZWN0aW9uIChgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4pIGFuZCBzZXBhcmF0aW5nIHRoZSB0ZWFyZG93biBpbnRvIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBoYXNlcyB0byByZXNwZWN0IFJDVSBncmFjZSBwZXJpb2RzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIGFuZCB3aGlsZSBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgICh3aGljaCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSksIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgaXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgKGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgKSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29udGFpbnMgbm8gcGFkZGluZy4gVGhlIGJ1Z3MgcHJldmVudGVkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo0OS4zMDk4NDM0NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDc1NTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyMmM3OTVlYTAyNTg1NGU5YmNiNjg2OTYwMWU5YWVjMWIzMmQxZjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDk6NTU6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuaW5kZXggMzhjNmYzNDc3NmMyOC4uOGNhNWJiMTU1ZWViOSAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5AQCAtOTMzLDEwICs5MzMsMTQgQEAgc3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4tXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbiBcXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xcbiBcXHR1MzIgY29ubmNvdW50X2tleTtcXG4gXFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmICghY3RfbGltaXRfaW5mbylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRjb25uY291bnRfa2V5ID0gaW5mby1cXHUwMDNlem9uZS5pZDtcXG4gXFxuIFxcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXFx1MDAzZXpvbmUuaWQpO1xcbkBAIC0xNTg1LDQwICsxNTg5LDU1IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pXFxuK1xcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XFxuK1xcdGlmICghaW5mbylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyA9XFxuK1xcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4rXFx0aW5mby1cXHUwMDNlbGltaXRzID1cXG4gXFx0XFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cykge1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VsaW1pdHMpIHtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXFxuLVxcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzW2ldKTtcXG4rXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xcbitcXHRpbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuIFxcbi1cXHRpZiAoSVNfRVJSKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoSVNfRVJSKGluZm8tXFx1MDAzZWRhdGEpKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoaW5mby1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdGtmcmVlKGluZm8tXFx1MDAzZWxpbWl0cyk7XFxuK1xcdFxcdGtmcmVlKGluZm8pO1xcbiBcXHRcXHRwcl9lcnIoXFxcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4rc3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbit7XFxuK1xcdHJldHVybiByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xcbit9XFxuK1xcbisvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxcbisgKiBSQ1UgZ3JhY2UgcGVyaW9kIG11c3QgZWxhcHNlIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuICBUaGUgcGVybmV0IGNvcmVcXG4rICogZ3VhcmFudGVlcyB0aGUgZ3JhY2UgcGVyaW9kIGJldHdlZW4gdGhlIC5wcmVfZXhpdCBhbmQgLmV4aXQgY2FsbGJhY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGlmICghaW5mbylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVxcdTAwM2VkYXRhKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XFxuIFxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG5AQCAtMTYyNiw3ICsxNjQ1LDcgQEAgc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4gXFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuIFxcbiBcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0X2xpbWl0LCBuZXh0LCBoZWFkLCBobGlzdF9ub2RlKVxcbi1cXHRcXHRcXHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XFxuK1xcdFxcdFxcdGtmcmVlKGN0X2xpbWl0KTtcXG4gXFx0fVxcbiBcXHRrZnJlZShpbmZvLVxcdTAwM2VsaW1pdHMpO1xcbiBcXHRrZnJlZShpbmZvKTtcXG5AQCAtMTY2NSwxMiArMTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcXG4tXFx0aW50IHJlbTtcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xcbiBcXHR1MTYgem9uZTtcXG4rXFx0aW50IHJlbTtcXG4gXFxuIFxcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XFxuIFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xcbkBAIC0xNjc5LDYgKzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXFx1MDAzZWxpbWl0O1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXFxuQEAgLTE2OTUsNiArMTcxNiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRjdF9saW1pdC1cXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFxuIFxcdFxcdFxcdG92c19sb2NrKCk7XFxuK1xcdFxcdFxcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbiBcXHRcXHRcXHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH1cXG5AQCAtMTcwOSwxMiArMTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcXG4tXFx0aW50IHJlbTtcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xcbiBcXHR1MTYgem9uZTtcXG4rXFx0aW50IHJlbTtcXG4gXFxuIFxcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XFxuIFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xcbkBAIC0xNzIzLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXFxuQEAgLTE3MzAsNiArMTc1NCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG92c19sb2NrKCk7XFxuK1xcdFxcdFxcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbiBcXHRcXHRcXHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XFxuIFxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fVxcbkBAIC0xNzczLDYgKzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxcbkBAIC0xNzk2LDEyICsxODIyLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0XFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XFxuIFxcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0XFx0bmV0LCBpbmZvLVxcdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xcbi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbkBAIC0xODE2LDYgKzE4NDAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbkBAIC0xODI4LDE5ICsxODUzLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XFxuIFxcdFxcdFxcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cXHUwMDNlZGF0YSxcXG4gXFx0XFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZXpvbmUsIGN0X2xpbWl0LVxcdTAwM2VsaW1pdCwgcmVwbHkpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLWV4aXRfZXJyOlxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTg1MCw3ICsxODcyLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcXG5AQCAtMTg2Myw4ICsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xODg0LDcgKzE5MDUsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxcbkBAIC0xODk3LDggKzE5MTcsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGN0X2xpbWl0X2luZm8pO1xcbitcXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFxuQEAgLTE5MTgsNyArMTkzOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcXG5AQCAtMTkzMiwxOCArMTk1MiwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcXG4gXFx0XFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxcbiBcXHRcXHRcXHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXFxuIFxcdFxcdFxcdHJlcGx5KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlcGx5KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFxuIFxcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcXG4gXFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xcbkBAIC0yMDE4LDEyICsyMDM5LDI5IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgdGhlIFJDVS1wcm90ZWN0ZWRcXG4rICogY3RfbGltaXRfaW5mbyBhbmQgc3RvcmVzIGl0IGluIG92c19uZXQtXFx1MDAzZWN0X2V4aXRfZGF0YSBmb3JcXG4rICogb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGhlIHRlYXJkb3duIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QuXFxuKyAqL1xcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcXG4re1xcbisjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbitcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuK1xcbitcXHRvdnNfbmV0LVxcdTAwM2VjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuKy8qIENvbXBsZXRlcyB0aGUgQ1QgbGltaXQgdGVhcmRvd24uICBUaGUgcGVybmV0IGNvcmUgZ3VhcmFudGVlcyBhbiBSQ1VcXG4rICogZ3JhY2UgcGVyaW9kIGJldHdlZW4gZGV0YWNoaW5nIHRoZSBzdGF0ZSBpbiBvdnNfY3RfZXhpdF9zdGFydCgpIGFuZFxcbisgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi5cXG4rICovXFxuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuIFxcbiAjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbi1cXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xcbitcXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRpZiAob3ZzX25ldC1cXHUwMDNleHRfbGFiZWwpXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxcbmluZGV4IDMxN2U1MjVjOGExMTMuLmE1MTZlNWJhZTRmMzQgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuQEAgLTE0LDcgKzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7XFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTtcXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XFxuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7XFxuIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpO1xcbiBpbnQgb3ZzX2N0X2NvcHlfYWN0aW9uKHN0cnVjdCBuZXQgKiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqLFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiosXFxuQEAgLTQwLDcgKzQxLDggQEAgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggZGVkNDZkOTkzYTRlZC4uMzYyZTMyMmZiNDFmNCAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI3NTcsMTcgKzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfcHJlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXFxuK3tcXG4rXFx0b3ZzX2xvY2soKTtcXG4rXFx0b3ZzX2N0X2V4aXRfc3RhcnQoZG5ldCk7XFxuK1xcdG92c191bmxvY2soKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcXG4ge1xcbi1cXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhkbmV0LCBvdnNfbmV0X2lkKTtcXG4gXFx0c3RydWN0IHZwb3J0ICp2cG9ydCwgKnZwb3J0X25leHQ7XFxuK1xcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIFxcdExJU1RfSEVBRChoZWFkKTtcXG4gXFxuIFxcdG92c19sb2NrKCk7XFxuIFxcbi1cXHRvdnNfY3RfZXhpdChkbmV0KTtcXG4rXFx0b3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtXFx1MDAzZWN0X2V4aXRfZGF0YSk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIGRwX25leHQsIFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VkcHMsIGxpc3Rfbm9kZSlcXG4gXFx0XFx0X19kcF9kZXN0cm95KGRwKTtcXG5AQCAtMjc5MSw2ICsyNzk4LDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XFxuIFxcdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxcbitcXHQucHJlX2V4aXQgPSBvdnNfcHJlX2V4aXRfbmV0LFxcbiBcXHQuZXhpdCA9IG92c19leGl0X25ldCxcXG4gXFx0LmlkICAgPSBcXHUwMDI2b3ZzX25ldF9pZCxcXG4gXFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19uZXQpLFxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uNDQ2NTUzYzUxYzMwZSAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuQEAgLTE2NCw3ICsxNjQsMTAgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcXG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXFxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXFxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXFxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXFxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcXG4rICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xcbisgKiBuZXRucyB0ZWFyZG93bi5cXG4rICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cXG4gICogQHh0X2xhYmVsOiBXaGV0aGVyIGNvbm5sYWJsZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBuZXR3b3JrIG9yIG5vdC5cXG4gICovXFxuIHN0cnVjdCBvdnNfbmV0IHtcXG5AQCAtMTcyLDcgKzE3NSw4IEBAIHN0cnVjdCBvdnNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfZXhpdF9kYXRhO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbCB4dF9sYWJlbDtcXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTU6NDkuODU1MzAzNDgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUzODg0NDY1MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZUX0NPTk5MSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9leGVjdXRlXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgbWFuYWdlbWVudCB0byB1c2UgUkNVIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHN0cnVjdHVyZSwgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXRucyB0ZWFyZG93bi4gSXQgc3BsaXRzIHRoZSBleGl0IGxvZ2ljIGludG8gYHByZV9leGl0YCBhbmQgYGV4aXRgIGNhbGxiYWNrcyB0byBlbnN1cmUgYW4gUkNVIGdyYWNlIHBlcmlvZCBlbGFwc2VzIGJlZm9yZSBmcmVlaW5nIHRoZSBjb25udHJhY2sgbGltaXQgc3RhdGUuIEl0IGFsc28gdXBkYXRlcyB0aGUgZ2V0dGVyL3NldHRlciBuZXRsaW5rIGNvbW1hbmRzIGFuZCB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCB0byBwcm9wZXJseSB1c2UgUkNVIGRlcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9wZW4gdlN3aXRjaCBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgcGFja2V0IHByb2Nlc3NpbmcsIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCwgd2hpY2ggaXMgYSBoaWRkZW4gY29uZmlnIHNlbGVjdGVkIGJ5IGBDT05GSUdfTkZUX0NPTk5MSU1JVGAuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBwYWNrZXQgZXhlY3V0aW9uIHBhdGggdGhhdCBjaGVja3MgdGhlIGxpbWl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCAzOGM2ZjM0Nzc2YzI4Li44Y2E1YmIxNTVlZWI5IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoIWN0X2xpbWl0X2luZm8pXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0Y29ubmNvdW50X2tleSA9IGluZm8tXHUwMDNlem9uZS5pZDtcbiBcbiBcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXHUwMDNlem9uZS5pZCk7XG5AQCAtMTU4NSw0MCArMTU4OSw1NSBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4rXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xuK1x0aWYgKCFpbmZvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbitcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuK1x0aW5mby1cdTAwM2VsaW1pdHMgPVxuIFx0XHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpIHtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghaW5mby1cdTAwM2VsaW1pdHMpIHtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXG4tXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzW2ldKTtcbitcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4rXHRpbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbiBcbi1cdGlmIChJU19FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmIChJU19FUlIoaW5mby1cdTAwM2VkYXRhKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4rXHRcdGtmcmVlKGluZm8tXHUwMDNlbGltaXRzKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHByX2VycihcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cIiwgZXJyKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4rc3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuK3tcbitcdHJldHVybiByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK31cbitcbisvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxuKyAqIFJDVSBncmFjZSBwZXJpb2QgbXVzdCBlbGFwc2UgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcnVucy4gIFRoZSBwZXJuZXQgY29yZVxuKyAqIGd1YXJhbnRlZXMgdGhlIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIHRoZSAucHJlX2V4aXQgYW5kIC5leGl0IGNhbGxiYWNrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IGRhdGE7XG4gXHRpbnQgaTtcbiBcbitcdGlmICghaW5mbylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbkBAIC0xNjI2LDcgKzE2NDUsNyBAQCBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbiBcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdF9saW1pdCwgbmV4dCwgaGVhZCwgaGxpc3Rfbm9kZSlcbi1cdFx0XHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XG4rXHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0fVxuIFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuIFx0a2ZyZWUoaW5mbyk7XG5AQCAtMTY2NSwxMiArMTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgKzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNjk1LDYgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiArMTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTczMCw2ICsxNzU0LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgKzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIyLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODQwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUzLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3Miw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTcsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTgsMTIgKzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyB0aGUgUkNVLXByb3RlY3RlZFxuKyAqIGN0X2xpbWl0X2luZm8gYW5kIHN0b3JlcyBpdCBpbiBvdnNfbmV0LVx1MDAzZWN0X2V4aXRfZGF0YSBmb3JcbisgKiBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0aGUgdGVhcmRvd24gYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbit7XG4rI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuK1x0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuK1xuK1x0b3ZzX25ldC1cdTAwM2VjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTtcbisjZW5kaWZcbit9XG4rXG4rLyogQ29tcGxldGVzIHRoZSBDVCBsaW1pdCB0ZWFyZG93bi4gIFRoZSBwZXJuZXQgY29yZSBndWFyYW50ZWVzIGFuIFJDVVxuKyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmRcbisgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4rXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbiAjZW5kaWZcbiBcbiBcdGlmIChvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuaW5kZXggMzE3ZTUyNWM4YTExMy4uYTUxNmU1YmFlNGYzNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXG5AQCAtMTQsNyArMTQsOCBAQCBlbnVtIG92c19rZXlfYXR0cjtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICopO1xuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKTtcbiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTtcbiBpbnQgb3ZzX2N0X2NvcHlfYWN0aW9uKHN0cnVjdCBuZXQgKiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiosXG5AQCAtNDAsNyArNDEsOCBAQCB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggZGVkNDZkOTkzYTRlZC4uMzYyZTMyMmZiNDFmNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI3NTcsMTcgKzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuK3tcbitcdG92c19sb2NrKCk7XG4rXHRvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbitcdG92c191bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbitcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0TElTVF9IRUFEKGhlYWQpO1xuIFxuIFx0b3ZzX2xvY2soKTtcbiBcbi1cdG92c19jdF9leGl0KGRuZXQpO1xuK1x0b3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgXHUwMDI2b3ZzX25ldC1cdTAwM2VkcHMsIGxpc3Rfbm9kZSlcbiBcdFx0X19kcF9kZXN0cm95KGRwKTtcbkBAIC0yNzkxLDYgKzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IG92c19pbml0X25ldCxcbitcdC5wcmVfZXhpdCA9IG92c19wcmVfZXhpdF9uZXQsXG4gXHQuZXhpdCA9IG92c19leGl0X25ldCxcbiBcdC5pZCAgID0gXHUwMDI2b3ZzX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfbmV0KSxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi40NDY1NTNjNTFjMzBlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCwxMCBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8ge1xuICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LlxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXG4gICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy5cbi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLlxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcbisgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4rICogbmV0bnMgdGVhcmRvd24uXG4rICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc1LDggQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo0OS44NTUzMDQ4MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODQ4NTUzNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCB0ZWxscyBtZSBpdCdzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyB0b3VjaGluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgYC5oYCwgYGRhdGFwYXRoLmNgLCBhbmQgYC5oYC4gQ3J1Y2lhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgd2F5IGBjdF9saW1pdF9pbmZvYCBpcyBhY2Nlc3NlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBhbmQgc3BsaXR0aW5nIHRoZSBleGl0IGxvZ2ljLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSDigJMgYSBwcmltZSB0YXJnZXQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggYWZmZWN0cyB0aGVzZTogYG92c19jdF9jaGVja19saW1pdGAsIGBvdnNfY3RfbGltaXRfaW5pdGAsIGBvdnNfY3RfbGltaXRfZXhpdF9zdGFydGAsIGBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2hgLCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfZXhpdF9zdGFydGAsIGBvdnNfY3RfZXhpdF9maW5pc2hgLCBgb3ZzX3ByZV9leGl0X25ldGAsIGFuZCBgb3ZzX2V4aXRfbmV0YC5cblxuU28sIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmdXp6ZXIgYXJlIGdvaW5nIHRvIGJlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCB3aGljaCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAgb3Igc2ltaWxhci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGxhdHRlciwgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzIG9mIGBvdnNfY3RfY2hlY2tfbGltaXRgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIHN0YXJ0IGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo1OC43MDM4NjExNzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3ODgwMTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfY2hlY2tfbGltaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlxcdFxcdFxcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjAxLjE4MjY2NzE3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDAxMjgzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm50cmFjayBMaW1pdHMgaW4gT3BlbiB2U3dpdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgYXJlIGhhbmRsZWQgaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZ1bmN0aW9ucy4gSXQgYXBwZWFycyB0aGF0IGBvdnNfY3RfY29tbWl0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhhdCBtYWtlcyBzZW5zZSAtIGBvdnNfY3RfY29tbWl0YCB3b3VsZCBiZSB0aGUgcG9pbnQgd2hlcmUgYSBjb25uZWN0aW9uIGlzIGZpbmFsaXplZCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgd2UnZCBuZWVkIHRvIGNoZWNrIGlmIHdlJ3JlIGhpdHRpbmcgYW55IGNvbmZpZ3VyZWQgbGltaXRzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxpbWl0cyBhcmUgYWN0dWFsbHkgKnNldCosICpkZWxldGVkKiwgYW5kICpyZXRyaWV2ZWQqLiBJIHNlZSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGFyZSBhbGwgR2VuZXJpYyBOZXRsaW5rIChnZW5sKSBjb21tYW5kcy4gU28sIGl0J3MgYSBzdGFuZGFyZCBpbnRlcmZhY2UgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgcGFyYW1ldGVycywgYXMgZXhwZWN0ZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIGBvdnNfY3RfbGltaXRfY21kX3NldGAgdG8gc2VlIGhvdyB0aG9zZSBnZW5sIGNvbW1hbmRzIGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgZXhlY3V0ZWQuIEknbGwgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGl0IHNob3VsZCBiZSBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgYW5kIHRoYXQncyB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjA2LjAyMjgwMDMyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ3ODA5MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQ0PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2OC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2OTpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NzAte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODMtXFx0XFx0XFx0XFx0XFx0ICAgICAgICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODQ6XFx0XFx0LmRvaXQgPSBvdnNfY3RfbGltaXRfY21kX3NldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4NS1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjowOC4zNzA2MTQyMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwOTI4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHJlcHJlc2VudCB0aGUgZm9jdXMgb2YgdGhpcyBzeXN0ZW0sIGFuZCB0aGUga2V5IHN5bWJvbHMgdGhhdCBjYXB0dXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYXJlIGNsZWFybHkgdGhlc2U6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIGVpdGhlciBgb3ZzX2N0X2NvbW1pdGAgb3IsIHBvdGVudGlhbGx5LCB0aGUgbW9yZSBlbmNvbXBhc3NpbmcgYG92c19jdF9leGVjdXRlYCB3aGljaCB0aGVuIGNhbGxzIGBvdnNfY3RfY29tbWl0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgbW9yZSByZWxldmFudCBhbmQgd2hpY2ggaXMgbW9yZSBzZW1hbnRpY2FsbHkgY29ycmVjdC5cblxuTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBvdnNfY3RfZXhlY3V0ZWAgYW5kIHNlZSBob3cgaXQgZml0cyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTY6MTIuNDgxNTQ2NjM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjgzMDg5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2V4ZWN1dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMjU1PXN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODUtXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxMzg2OlxcdFxcdFxcdGVyciA9IG92c19jdF9leGVjdXRlKG92c19kcF9nZXRfbmV0KGRwKSwgc2tiLCBrZXksXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMzg3LVxcdFxcdFxcdFxcdFxcdCAgICAgbmxhX2RhdGEoYSkpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTMzOnN0cnVjdCBuZl9jb25uICpvdnNfY3RfZXhlY3V0ZWQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01MzQtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTYxPXN0YXRpYyBib29sIHNrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTcxLVxcdGlmICghY3QpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcXHRcXHRjdCA9IG92c19jdF9leGVjdXRlZChuZXQsIGtleSwgaW5mbywgc2tiLCBcXHUwMDI2Y3RfZXhlY3V0ZWQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzMtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0yMz1pbnQgb3ZzX2N0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoyNTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMjYtXFx0XFx0ICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD01OT1zdGF0aWMgaW5saW5lIGludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02NC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NjU6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjE0Ljc0OTg1OTI4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjI3MzE4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPVlMgQ29ubmVjdGlvbiBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBvdnNfY3RfZXhlY3V0ZWAgbG9va3MgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbiB0cmFja2luZyBpcyBoYW5kbGVkIHdpdGhpbiBPcGVuIHZTd2l0Y2guXG5cbk5vdywgd2hlcmUgZG8gSSBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGV2YW50IGJ1aWxkIGluc3RydWN0aW9ucz8gQWgsIHllcywgdGhlIGNvZGUgc2hvdWxkIGJlIHdpdGhpbiB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYGNvbm50cmFjay5jYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSwgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCwgc2F5cyBhYm91dCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgYE1ha2VmaWxlYCwgYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAsIHdpbGwgcmV2ZWFsIGhvdyB0aGlzIGFsbCBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBtb2R1bGUuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgY3J1Y2lhbCBmb3Igc2VlaW5nIGhvdyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjoxOC42MTI1OTU0NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzMwMDY5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29ubnRyYWNrLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9NYWtlZmlsZT01Mz1uZnAtb2JqcyArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL01ha2VmaWxlLTYyLVxcdCAgICBmbG93ZXIvcW9zX2NvbmYubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9NYWtlZmlsZTo2MzpcXHQgICAgZmxvd2VyL2Nvbm50cmFjay5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9NYWtlZmlsZS02NC1lbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9MTgwNT1pbnQgbmZwX2ZsX2N0X2hhbmRsZV9wcmVfY3Qoc3RydWN0IG5mcF9mbG93ZXJfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jLTE4MTgtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYzoxODE5OlxcdFxcdFxcdFxcdCAgIFxcXCJ1bnN1cHBvcnRlZCBvZmZsb2FkOiBDb25udHJhY2sgYWN0aW9uIGVtcHR5IGluIGNvbm50cmFjayBvZmZsb2FkXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmMtMTgyMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGU9MTI9c2ZjLSQoQ09ORklHX1NGQ19TUklPVilcXHQrPSBzcmlvdi5vIGVmMTBfc3Jpb3YubyBlZjEwMF9zcmlvdi5vIGVmMTAwX3JlcC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUtMTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFlLm8gdGMubyB0Y19iaW5kaW5ncy5vIHRjX2NvdW50ZXJzLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZToxNDogICAgICAgICAgICAgICAgICAgICAgICAgICB0Y19lbmNhcF9hY3Rpb25zLm8gdGNfY29ubnRyYWNrLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUtMTUtXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPTE4PXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTQtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDo1NTpcXHQvKiBUaGUgY29ubnRyYWNrIG9mIHRoZSBtYXN0ZXIgY29ubmVjdGlvbiAqL1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTYtXFx0c3RydWN0IG5mX2Nvbm4gKm1hc3RlcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQ9bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpICs9IG5mX2Nvbm50cmFja19sYWJlbHMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19PVlMpICs9IG5mX2Nvbm50cmFja19vdnMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYtbmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NUX1BST1RPX1NDVFApICs9IG5mX2Nvbm50cmFja19wcm90b19zY3RwLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICs9IG5mbmV0bGlua19ob29rLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzMtIyBjb25uZWN0aW9uIHRyYWNraW5nXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSArPSBuZl9jb25udHJhY2sub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE5Nj1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCkgKz0geHRfY29ubmxpbWl0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSykgKz0geHRfY29ubnRyYWNrLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE5OC1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NQVSkgKz0geHRfY3B1Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMxOD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzIxLSAqIG1hc3RlcidzIGhlbHBlciBpcyBzYWZlLCBiZWNhdXNlIHRoZSBwYWNrZXQgaG9sZHMgYSByZWZlcmVuY2Ugb25cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzozMjI6ICogdGhlIGNvbm50cmFjayBvYmplY3QuIE5ldmVyIHVzZSBpdCBmcm9tIGNvbnRyb2wgcGxhbmUuXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzIzLSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1OTE9Y3RuZXRsaW5rX2NyZWF0ZV9leHBlY3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM2MTY6XFx0LyogTG9vayBmb3IgbWFzdGVyIGNvbm50cmFjayBvZiB0aGlzIGV4cGVjdGF0aW9uICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MTctXFx0aCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsIFxcdTAwMjZtYXN0ZXJfdHVwbGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz0yMTU9c3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2Nvbm50cmFja19sb2NhbCh2b2lkICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0yMzktICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzoyNDA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19vcHNbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTI0MS1cXHR7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTM5MD1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjZfY29ubnRyYWNrX2xvY2FsKHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTM5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjM5NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX29wc1tdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtMzk4LVxcdHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NDQzPXN0YXRpYyBpbnQgbmZfY3RfbmV0bnNfZG9fZ2V0KHN0cnVjdCBuZXQgKm5ldCwgdTggbmZwcm90bylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDYyOlxcdFxcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ2MzpcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ2NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy00NzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0ODA6XFx0XFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9jb25udHJhY2tfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDgxOlxcdFxcdFxcdFxcdFxcdCAgICBBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDgyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTUzMj1zdGF0aWMgdm9pZCBuZl9jdF9uZXRuc19kb19wdXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MzktXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzNCBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2VyczQgPT0gMCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MDpcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MTpcXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGlwdjRfY29ubnRyYWNrX29wcykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQyLVxcdFxcdFxcdG5mX2RlZnJhZ19pcHY0X2Rpc2FibGUobmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQ3LVxcdFxcdGlmIChjbmV0LVxcdTAwM2V1c2VyczYgXFx1MDAyNlxcdTAwMjYgKC0tY25ldC1cXHUwMDNldXNlcnM2ID09IDApKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDg6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDk6XFx0XFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU1MC1cXHRcXHRcXHRuZl9kZWZyYWdfaXB2Nl9kaXNhYmxlKG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz05NTU9dm9pZCBuZl9jb25udHJhY2tfdGNwX3NldF9jbG9zaW5nKHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy05NTYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk1NzpcXHRlbnVtIHRjcF9jb25udHJhY2sgb2xkX3N0YXRlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTk1OC1cXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTMwNT1zdGF0aWMgYm9vbCBuZl9uYXRfbWF5X2tpbGwoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMwOS1cXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFnc19uZWVkZWQgPSBJUFNfU1JDX05BVDtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MzEwOlxcdGVudW0gdGNwX2Nvbm50cmFjayBvbGRfc3RhdGU7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMxMS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX3RyYWNlLmM9OTQ9c3RhdGljIGludCBuZl90cmFjZV9maWxsX2N0X2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfdHJhY2UuYy0xMDctXFx0aWYgKCFjdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX3RyYWNlLmM6MTA4OlxcdFxcdGlmIChjdGluZm8gIT0gSVBfQ1RfVU5UUkFDS0VEKSAvKiBub3Qgc2VlbiBieSBjb25udHJhY2sgb3IgaW52YWxpZCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX3RyYWNlLmMtMTA5LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlPTIxPWlmbmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLClcXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGU6MjI6b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS0yMy1lbmRpZlxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz0xMDc1PWludCBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA1LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MTEwNjpcXHQvKiBDaGVjayB0aGF0IHdlIGhhdmUgY29ubnRyYWNrIG9yaWdpbmFsIGRpcmVjdGlvbiB0dXBsZSBtZXRhZGF0YSBvbmx5XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA3LVxcdCAqIGZvciBwYWNrZXRzIGZvciB3aGljaCBpdCBtYWtlcyBzZW5zZS4gIE90aGVyd2lzZSB0aGUga2V5IG1heSBiZVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2g9Mjc9c2V0dXAoKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcC5zaC01OS1cXHRcXHRncm9fbWF4X3NpemUgJE1BWF9TSVpFIGdzb19tYXhfc2l6ZSAkTUFYX1NJWkVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcC5zaDo2MDpcXHQjIHRlc3QgZm9yIG5mX2N0X3NrYl9uZXR3b3JrX3RyaW0gaW4gbmZfY29ubnRyYWNrX292cyB1c2VkIGJ5IFRDIGN0IGFjdGlvbi5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcC5zaC02MS1cXHRpcCBuZXQgZXhlYyAkUk9VVEVSX05TIHRjIHFkaXNjIGFkZCBkZXYgbGluazEgaW5ncmVzc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjoyMS4wODU2MDk1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzY1MjU1NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoYXQgc3BlY2lmaWMgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbi4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0IHRoZSBwYXRjaCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZlYXR1cmVzLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBwcmVjaXNlbHkgaG93IGFuZCB3aHkgdGhlIGF1dGhvcnMgYXJlIHVzaW5nIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAgd2l0aGluIHRoYXQgc3BlY2lmaWMgY29udGV4dC4gSXMgdGhpcyBhIG5ldyBmZWF0dXJlLCBhIG1vZGlmaWNhdGlvbiB0byBleGlzdGluZyBiZWhhdmlvciwgb3IganVzdCBhIGRlcGVuZGVuY3k/IFVuZGVyc3RhbmRpbmcgdGhpcyBsaW5rIGJldHdlZW4gdGhlIGNvbmZpZyBvcHRpb24gYW5kIHRoZSBgY29ubnRyYWNrLmNgIGNvZGUgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgYXNzZXNzaW5nIHRoZSBwYXRjaCdzIGltcGFjdC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBpcyB1c2VkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY4MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjI1Ljg1MDg2OTg0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4ODQyMjAyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc5PW9iai0kKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpICs9IG5mX3N5bnByb3h5X2NvcmUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODAtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkgKz0gbmZfY29ubmNvdW50Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgyLVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTYxPXN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTc5LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4MDojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04MS0jZGVmaW5lIE9WU19DVF9MSU1JVF9VTkxJTUlURURcXHQwXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9ODYwPXN0YXRpYyBib29sIGxhYmVsc19ub256ZXJvKGNvbnN0IHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscyAqbGFiZWxzKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3MC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6ODcxOiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3Mi1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmN0X2xpbWl0X2hhc2hfYnVja2V0KFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NzctXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk3ODojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NzktXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNm92c19jdF9saW1pdF9lbmFibGVkKSkge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1NzM9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTg4LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg5OiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1OTAtc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwMjE9aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDMzLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyMDM0OiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMzUtXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDQ2PXZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDQ3LXtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjA0ODojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDQ5LVxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDU5PXZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDYyLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyMDYzOiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNjQtXFx0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTAwPXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSkgeyB9XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTA0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoxMDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTEwNi1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5O1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjY4MT1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5ICogY29uc3QgZHBfZ2VubF9mYW1pbGllc1tdID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4Ni1cXHRcXHUwMDI2ZHBfbWV0ZXJfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY4NzojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI2ODgtXFx0XFx1MDAyNmRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MTczPXN0cnVjdCBvdnNfbmV0IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTE3Ni1cXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDoxNzc6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0xNzgtXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjoyOC4wMzkyOTU3NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjcwNzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgcmVxdWlyZW1lbnRzLCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBzcGFjZTpcblxuKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIG5lZWRzIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAuIEknbSBhbHJlYWR5IGF3YXJlIG9mIGl0cyBmdW5jdGlvbiwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhhdCBpdCdzIHByb2JhYmx5IGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgaGVyZS4gVGhlbiwgd2UgYWxzbyBoYXZlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX09QRU5WU1dJVENIYC4gVGhhdCBtYWtlcyBzZW5zZTsgT3BlbiB2U3dpdGNoIGlzIGEgc2lnbmlmaWNhbnQgcGllY2Ugb2YgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSwgc28gaXQncyBub3Qgc3VycHJpc2luZyBpdCBoYXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbkdpdmVuIHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBhdmFpbGFiaWxpdHkgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEknZCBnbyB0byBjb25maXJtIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkIG9yIGRlcml2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqYWN0dWFsbHkqIGdvaW5nIG9uIGluIHRlcm1zIG9mIGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0LCBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBtb3JlIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IsIHBvdGVudGlhbGx5LCBkZWZhdWx0IHZhbHVlcyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjozMS45NTIwMDU1ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTAxMjY4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjozNC4zNDIxMzczNjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4Mzg4OTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIEkgc2VlIGl0LCBpcyB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHR5cGljYWwgbG9jYXRpb24gZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLiBCeSBleGFtaW5pbmcgdGhlIEtjb25maWcgZmlsZSwgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB3aGljaCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyBhcmUgcmVxdWlyZWQgb3IgYXQgbGVhc3Qgc3VnZ2VzdGVkIGZvciBgT1BFTlZTV0lUQ0hgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjM3LjcyNjAzMTIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTY6MzcuNzI2MTU1MDQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMjEzOTU5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgT1BFTlZTV0lUQ0hgLiBUaGUga2V5IHRoaW5nIHRvIG5vdGUgaW1tZWRpYXRlbHkgaXMgdGhhdCBpdCByZWxpZXMgb24gYElORVRgLiBUaGF0J3MgZXhwZWN0ZWQg4oCTIGl0J3MgbmV0d29ya2luZyBhZnRlciBhbGwsIHNvIHdlIG5lZWQgdGhlIGNvcmUgSW50ZXJuZXQgUHJvdG9jb2wgc3RhY2suXG5cbkJ1dCB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoaXMgY29uZGl0aW9uYWwgZGVwZW5kZW5jeTogYCFORl9DT05OVFJBQ0sgfHwgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgLi4uICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSlgLiBFc3NlbnRpYWxseSwgYE9QRU5WU1dJVENIYCBlaXRoZXIgKmRvZXNuJ3QqIHJlcXVpcmUgTmV0ZmlsdGVyJ3MgY29ubmVjdGlvbiB0cmFja2luZyBhdCBhbGwsIG9yIGl0ICpkb2VzKiByZXF1aXJlIGBORl9DT05OVFJBQ0tgIGFuZCB0aGVuIGhhcyBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSWYgYE5GX0NPTk5UUkFDS2AgaXMgZW5hYmxlZCwgaXQgKmVpdGhlciogbmVlZHMgYE5FVEZJTFRFUl9DT05OQ09VTlRgICpvciogaXQgZG9lc24ndC5cblxuU28sIHRvIGJlIHNhZmUsIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlOiBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCB0byBjb3ZlciBhbGwgb3VyIGJhc2VzIGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gQmV0dGVyIHRvIGhhdmUgdGhlbSBhbmQgbm90IG5lZWQgdGhlbSwgdGhhbiB0aGUgcmV2ZXJzZS5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlcXVpcmVtZW50LCBsZXQncyBnbyBjaGVjayB0aGUgc291cmNlIGZpbGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgZW5hYmxlZCBhbmQgdXNlZC4gVGhhdCB3aWxsIGNsYXJpZnkgaG93IGNydWNpYWwgdGhhdCBvcHRpb24gaXMgYW5kIHdoZXRoZXIgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1Njo0My45NDc1NTQzMjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTE2ODY3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1Njo0Ni4yMzkyNDU1MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMzk5NDY1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm50cmFjayBMaW1pdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGludm9sdmVzIGBORVRGSUxURVJfQ09OTkNPVU5UYCB3aGljaCBpcyB0cmlzdGF0ZSBhbmQgbmVzdGVkIHdpdGhpbiBgaWYgTkZfQ09OTlRSQUNLYC4gU28sIHdlIGRlZmluaXRlbHkgbmVlZCB0byBjb25zaWRlciBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhbmQgYG92c19jdF9leGVjdXRlYC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYG92c19jdF9jaGVja19saW1pdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2V4ZWN1dGVgLiBJdCBhbHNvIHRvdWNoZXMgYG92c19jdF9saW1pdF9pbml0YCBhbmQgdGhlIGluaXQvZXhpdCByb3V0aW5lcy4gVGhvc2UgbmV0bnMgY2FsbGJhY2tzIGFyZSB0cmlnZ2VyZWQgZHVyaW5nIGBjb3B5X25ldF9uc2AgYW5kIGBjbGVhbnVwX25ldGAsIGJ1dCBuZXRucyBmdXp6aW5nIGlzIHN0YW5kYXJkLCBzbyBJIGNhbiBza2lwIGxpc3RpbmcgdGhvc2UgYXMgZXhwbGljaXQgZm9jdXMgc3ltYm9scy5cblxuSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBtaWdodCBiZSBpbmxpbmVkLiBCdXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCBpcyBzdGF0aWMuIEhtbSwgYnV0IHdhaXQuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgZ2VubF9zbWFsbF9vcHNgLiBUaGF0IG1lYW5zIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkIGFuZCB0aGV5J2xsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gdGhleSAqYXJlKiB2YWxpZCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJvbXB0IGV2ZW4gdGVsbHMgbWUgdGhleSBhcmUgb2theSBpbiB0aGlzIGNhc2UuXG5cbkV2ZW4gc28sIGBvdnNfY3RfZXhlY3V0ZWAgaXMgbm9uLXN0YXRpYywgc28gbWF5YmUgSSBzaG91bGQgcHJlZmVyIHRoYXQgaW5zdGVhZC4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uLiBZZXAsIGBvdnNfY3RfZXhlY3V0ZWAgaXMgbm9uLXN0YXRpYzogYGludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKWAuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgZXhwb3J0ZWQgb3IganVzdCBzdGF0aWMuIFl1cCwgaXQncyBzdGF0aWMuIEl0J3MgY2FsbGVkIGJ5IHRoZSBnZW5sIGNvcmUuIEl0J3Mgc2FmZSB0byBpbmNsdWRlIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLiBFdmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkZpbmFsbHksIGxldCBtZSBkb3VibGUgY2hlY2sgYG92c19jdF9leGVjdXRlYCBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMDAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTY6NTYuMjc5MTk0ODIzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1ODI2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBvdnNfY3RfZXhlY3V0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0yMz1pbnQgb3ZzX2N0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoyNTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMjYtXFx0XFx0ICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD01OT1zdGF0aWMgaW5saW5lIGludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02NC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NjU6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjU4LjU3NTA0NzI1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU1ODQ1MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyB0aGUgSW1wYWN0IG9mIGBvdnNfY3RfbGltaXRfY21kX3NldGAqKlxuXG5BbHJpZ2h0LCBJJ20gdHVybmluZyBvdmVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGNvbW1hbmQgaW4gbXkgbWluZC4gT24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYSB3YXkgdG8gbWFuYWdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEJ1dCwgYXMgd2UgYm90aCBrbm93LCB0aGVzZSBzZWVtaW5nbHkgc2ltcGxlIGtub2JzIGNhbiBoYXZlIGZhci1yZWFjaGluZyBlZmZlY3RzIG9uIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggZXhpc3RpbmcgZmlyZXdhbGwgcnVsZXMuIEhvdyBhZ2dyZXNzaXZlbHkgYXJlIHRoZXNlIGxpbWl0cyBiZWluZyBhcHBsaWVkLCBhbmQgd2hhdCdzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlmIG5vdCBleHBsaWNpdGx5IHNldD9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSB0eXBlcyBvZiB0cmFmZmljIHBhdHRlcm5zIHdlJ3JlIGxpa2VseSB0byBzZWUgaW4gb3VyIGVudmlyb25tZW50LiBJcyB0aGlzIHByaW1hcmlseSBzaG9ydC1saXZlZCwgdHJhbnNhY3Rpb25hbCB0cmFmZmljLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGxvbmctbGl2ZWQgZmxvd3MgbGlrZSBzdHJlYW1pbmcgdmlkZW8gb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucz8gVGhlIG9wdGltYWwgc2V0dGluZyB3aWxsIHZhcnkgZHJhc3RpY2FsbHkgZGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIuIFdlIGNhbid0IGFwcGx5IGEgc2luZ2xlLCBnbG9iYWwgc2V0dGluZyB3aXRob3V0IHNvbWUgc2VyaW91cyB0ZXN0aW5nLlxuXG5BbmQsIG9mIGNvdXJzZSwgSSdtIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGFidXNlLiBDb3VsZCBhbiBhdHRhY2tlciBleHBsb2l0IHRoaXMgc2V0dGluZyB0byB0cmlnZ2VyIGEgRG9TIGNvbmRpdGlvbj8gV2hhdCBhcmUgdGhlIG1vbml0b3JpbmcgY2FwYWJpbGl0aWVzIHdlIGhhdmUgaW4gcGxhY2UgdG8gZGV0ZWN0IGFuZCBtaXRpZ2F0ZSB0aGVzZSB0eXBlcyBvZiBhdHRhY2tzIGlmIHRoZXkgd2VyZSB0byB0cnkgdGhpcyBleHBsb2l0PyBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBjYW4gaWRlbnRpZnkgYW5kIHJlYWN0IHRvIGFueSB1bnVzdWFsIHBhdHRlcm5zIGluIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWV0cmljcy5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCB0aHJvdWdocHV0LCBsYXRlbmN5LCBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFdlIGNhbm5vdCBtYWtlIGFzc3VtcHRpb25zLiBXaGF0IHRlc3RzIGNhbiBiZSBkb25lIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgbGltaXRzPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBleHBlcmltZW50YWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHdlIG9wdGltaXplIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbiBuZXR3b3JrIHN0YWJpbGl0eS4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCB3aXRoIG91ciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzowMy40MzA4OTU1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDA4ODM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDQ9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODY4LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODY5OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg3MC17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4My1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk4NDpcXHRcXHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTg1LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU3OjA1LjczMTc4MzY4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAxOTMyNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIEFQSSBFeHBvc3VyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGV4cG9zZSB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0aW5nIHdpdGggU3l6a2FsbGVyLCBrZWVwaW5nIGluIG1pbmQgdGhlIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBsaXN0aW5nIGBvdnNfY3RfbGltaXRfY21kX3NldGAgYmVjYXVzZSBpdCdzIHN0YXRpYywgYnV0IEkgcmVhbGl6ZWQgU3l6a2FsbGVyIGNvdWxkIHN0aWxsIHV0aWxpemUgaXQgaWYgaXQgcGFyc2VzIHRoZSBzeW1ib2wgdGFibGUuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuXG5cblRoZXJlZm9yZSwgSSdsbCBnbyB3aXRoIGBvdnNfY3RfZXhlY3V0ZWAgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZT8gQWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIGBvdnNfY3RfaW5pdGAsIGBvdnNfY3RfZXhpdF9zdGFydGAsIGFuZCBgb3ZzX2N0X2V4aXRfZmluaXNoYCBhcmUgYWxzbyBub24tc3RhdGljLiBCdXQsIHRob3NlIGFyZSBqdXN0IGluaXRpYWxpemF0aW9uIGFuZCBleGl0IGZ1bmN0aW9ucy4gU28sIGluIHRvdGFsLCBJIHRoaW5rIHRoZSBiZXN0IG9wdGlvbiBpcyB0byBpbmNsdWRlIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhcyB0aGV5IHByb3ZpZGUgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSB3aGlsZSBhZGhlcmluZyB0byB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhLlxuXG5CZWZvcmUgc3VibWl0dGluZywgSSBuZWVkIHRvIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJ2xsIG5lZWQgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVURklMVEVSX0NPTk5DT1VOVGAganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoxMS4yMzM3MTk5NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mjc3MDUzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoxMy42NjE0MzA0ODdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxODAyMjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgdHJpc3RhdGVgIHdpdGhpbiBgTkZfQ09OTlRSQUNLYCoqXG5cblJpZ2h0LCBzbyBpdCdzIGEgc2ltcGxlIGB0cmlzdGF0ZWAgb3B0aW9uIG5lc3RlZCBkaXJlY3RseSBpbnNpZGUgdGhlIGBpZiBORl9DT05OVFJBQ0tgIGJsb2NrLiBUaGF0J3MgZ29vZCwgbGVzcyBjb21wbGV4IHRoYW4gSSBpbml0aWFsbHkgYW50aWNpcGF0ZWQuIEl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBmZWF0dXJlLCB3aGF0ZXZlciBpdCBpcywgZG9lc24ndCBicmluZyBpbiBhIHJhZnQgb2Ygb3RoZXIgZGVwZW5kZW5jaWVzIEknbGwgbmVlZCB0byB1bnRhbmdsZSBsYXRlci4gVGhhdCdzIGEgZGVmaW5pdGUgcGx1cyBmb3IgZWFzZSBvZiBpbnRlZ3JhdGlvbiBvciBtb2RpZmljYXRpb24uXG5cblRoZW4gdGhlcmUncyB0aGUgcXVlc3Rpb24gb2YgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJcyBpdCBvbmx5IGVuYWJsZWQgKmJlY2F1c2UqIG9mIHNvbWV0aGluZyBlbHNlLCBvciBjYW4gaXQgYmUgY29uZmlndXJlZCBpbmRlcGVuZGVudGx5PyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBwcm9iYWJseSBwcm9tcHRlZCBieSBzb21ldGhpbmcgZWxzZS4gQnV0IEkgaGF2ZSB0byBjaGVjay4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgcHJvbXB0Li4uSSdsbCBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybS4gSSdsbCBzZWFyY2ggZm9yIGl0LCBhbmQgdGhlbiBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIHNwZWNpZmljIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgY2xlYXIgdXAgd2hldGhlciBJIGNhbiBqdXN0IGVuYWJsZSBpdCBkaXJlY3RseSwgb3IgaWYgSSBoYXZlIHRvIGdvIHRocm91Z2ggYSBkaWZmZXJlbnQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoxNy41Nzk0NTY4NzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0aWYgTkZfQ09OTlRSQUNLXFxuIDExMTpcXHRjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbiAxMTI6XFx0XFx0dHJpc3RhdGVcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxuIDExNTpcXHRcXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuIDExNjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxMTc6XFx0XFx0aGVscFxcbiAxMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gbWFya3MsIHVzZWQgYnkgdGhlXFxuIDExOTpcXHRcXHQgIGBDT05OTUFSSycgdGFyZ2V0IGFuZCBgY29ubm1hcmsnIG1hdGNoLiBTaW1pbGFyIHRvIHRoZSBtYXJrIHZhbHVlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU3OjE3LjU3OTcxNjgzOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYyMDE5MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgSGlkZGVuIEtlcm5lbCBDb25maWcqKlxuXG5SaWdodCwgc28gYE5FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGFwcGFyZW50bHkgbm90IGEgdmlzaWJsZSwgdG9wLWxldmVsIGNvbmZpZyBvcHRpb24uIE5vIHByb21wdCBpbiB0aGUgbWVudXMsIGludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0J3MgYmVpbmcgKnNlbGVjdGVkKiBieSBzb21ldGhpbmcgZWxzZSwgYSBkZXBlbmRlbmN5LCBwcm9iYWJseSBhbm90aGVyIGNvbmZpZyBvcHRpb24uIE5vdywgdGhlIHJlYWwgZnVuIGJlZ2luczogSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdCBwYXRoIHRoYXQgY2F1c2VzIGBORVRGSUxURVJfQ09OTkNPVU5UYCB0byBiZSBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgc2VsZWN0IHN0YXRlbWVudHMgcmV2ZWFsLiBMZXQncyB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUzNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6MjEuNTQxNzM4Mzg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1MTAyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01MTE9Y29uZmlnIE5GVF9DT05OTElNSVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTQtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTE1OlxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxNi1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTIyOD1jb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMzEtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzMjpcXHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjMzLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6MjMuNzQ2ODQ1NTk0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjg5Njk3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBlbmFibGVkLiBJdCBhcHBlYXJzIHRoYXQgYE5GVF9DT05OTElNSVRgIGFuZCBgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVGAgKnNlbGVjdCogdGhpcyBmZWF0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIG9uZSBvZiB0aG9zZSB0byBiZSBhY3RpdmUuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYE9QRU5WU1dJVENIX0NPTk5MSU1JVGAgdG8gc2VlIGlmIGl0J3MgaGFuZGxpbmcgdGhpcyB0b28uIEhtbSwgdGhlIE9wZW4gdlN3aXRjaCBLY29uZmlnIGhhcyBhIGRlcGVuZGVuY3kgb24gYCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlRgLiBTbywgaXQgZG9lc24ndCAqc2VsZWN0KiBpdC4gSXQganVzdCBjaGVja3MgdGhhdCBpdCBpcyBhdmFpbGFibGUuIFNvLCBubyBoZWxwIGZyb20gdGhlcmUuXG5cbk9rYXksIGJhY2sgdG8gdGhlIG1haW4gc3RyYXRlZ3kuIFNpbmNlIGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBhIGhpZGRlbiBjb25maWd1cmF0aW9uIG9wdGlvbiwgSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggZWl0aGVyIGBORlRfQ09OTkxJTUlUYCBvciBgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVGAgdG8gZW5hYmxlIGl0LiBJJ2xsIG5lZWQgdG8gZW5hYmxlICpvbmUqIG9mIHRob3NlIHRvIGFjdHVhbGx5IGdldCB0aGlzIGNvZGUgdG8gd29yay5cblxuU28sIG5leHQgc3RlcDogbGV0J3MgZ28gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZUX0NPTk5MSU1JVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQgbmVlZHMgaW4gb3JkZXIgdG8gYmUgYSB2aWFibGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkxMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoyOC4yNzU4MTgzMzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTE3ODUwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9DT05OTElNSVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTUwND1jb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTExOmNvbmZpZyBORlRfQ09OTkxJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25ubGltaXQgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzozMC41ODc2MDkzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTE5NTA3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25uZWN0aW9uIExpbWl0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBpbnRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCBmb2N1cyBvbiBgTkZUX0NPTk5MSU1JVGAuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlZmluZSB0aGUgYnVpbGQgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb25uZWN0aW9uIGxpbWl0IG1vZHVsZSwgd2hpY2ggc2hvdWxkIGFsbG93IHVzIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIElQIGFkZHJlc3Mgb3IgYSBjb21iaW5hdGlvbiBvZiBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzIGFuZCBwb3J0cywgcmlnaHQ/XG5cbkknbSBsb29raW5nIGZvciB0aGUgdXN1YWw6IHRoZSAqZGVwZW5kcyBvbiogc3RhdGVtZW50cy4gV2hhdCBvdGhlciBOZXRmaWx0ZXIgbW9kdWxlcyBhcmUgcmVxdWlyZWQ/IElzIHRoaXMgaW50ZXJ0d2luZWQgd2l0aCBjb25udHJhY2sgaW4gc29tZSB3YXk/IE9yIHBlcmhhcHMgaXQgbGV2ZXJhZ2VzIG90aGVyIGluZnJhc3RydWN0dXJlIGxpa2UgdGhlIGhhc2ggdGFibGVzIGZvciBsb29rdXBzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSB0aGUgZW50aXJlIHBpY3R1cmUuIEl0J3MgY3J1Y2lhbCB0byBiZSBhYmxlIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBhIHN5c3RlbS5cblxuTmV4dCB1cCwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZGVmYXVsdCBzZXR0aW5nIGFuZCBpdHMgZGVzY3JpcHRpb24uIElzIHRoZXJlIGEgZGVmYXVsdCB2YWx1ZT8gSXMgaXQgc2V0IHRvICd5JyB0byBidWlsZCBhcyBhIG1vZHVsZSBvciBhcyBwYXJ0IG9mIHRoZSBjb3JlPyBJJ2xsIGxvb2sgZm9yIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyDigJMgaG9wZWZ1bGx5IGl0J3MgY2xlYXIgYW5kIGNvbmNpc2UsIGV4cGxhaW5pbmcgdGhlIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSBob3BlIGl0IGluY2x1ZGVzIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGxpbWl0cyB0byBhcHBseSB0byBkaWZmZXJlbnQgcHJvdG9jb2xzLCB3aGljaCBjb3VsZCBiZSBUQ1Agb3IgVURQLiBJJ2QgbGlrZSB0byBzZWUgaWYgdGhlcmUncyBhbnkgbWVudGlvbiBvZiBob3cgdGhlIGxpbWl0cyBhcmUgZW5mb3JjZWQgLSBtYXliZSBhIHJhdGUgbGltaXRpbmcgbWVjaGFuaXNtP1xuXG5GaW5hbGx5LCBsZXQncyBzZWUgaG93IGdyYW51bGFyIHRoZSBjb25maWd1cmF0aW9uIGlzLiBDYW4gd2Ugc2V0IGxpbWl0cyBwZXIgSVAsIHBlciBwb3J0LCBwZXIgYXBwbGljYXRpb24/IEFyZSB0aGVyZSBhbnkgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nIGludGVncmF0aW9uIGZvciBzdGF0ZWZ1bCBmaWx0ZXJpbmc/IEFscmlnaHQsIGxldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6MzkuMTA3MTE5OTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuIDUyMDpcXHRjb25maWcgTkZUX0xPR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzozOS4xMDcyODQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODYzNzE5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgT3BlbiB2U3dpdGNoOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIEknbSBtYWtpbmcgc29tZSBjb25maWd1cmF0aW9uIHVwZGF0ZXMsIGFuZCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZS4gU3BlY2lmaWNhbGx5LCBJJ20gZGVhbGluZyB3aXRoIGBORlRfQ09OTkxJTUlUYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgbm90ZXMgY2xlYXJseSBzdGF0ZSBpdCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBNYWtlcyBzZW5zZSwgb2YgY291cnNlLiBTbywgdGhlIGFjdGlvbiBpdGVtIGhlcmUgaXMgY2xlYXI6IGVuc3VyZSBgTkZUX0NPTk5MSU1JVGAgaXMgZGVmaW5pdGVseSBpbmNsdWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbnMuIERvbid0IHdhbnQgYW55IHN1cnByaXNlcyBkdXJpbmcgZGVwbG95bWVudC5cblxuTm93LCBJJ20gYWxzbyB3b3JraW5nIHdpdGggYE9QRU5WU1dJVENIYCBhbmQgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhZ2Fpbi4gSXQncyBlYXN5IHRvIGdldCBkaXN0cmFjdGVkIGFuZCBmb3JnZXQgYSBzbWFsbCBidXQgY3J1Y2lhbCBkZXRhaWwgdGhhdCBjb21lcyB1cCBpbiBteSB3b3JrIGFsbCB0aGUgdGltZS4gRG91YmxlLWNoZWNraW5nIGlzIGJldHRlciB0aGFuIHNwZW5kaW5nIHRpbWUgZGVidWdnaW5nIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NDMuNDkzNjU5NDExWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBPcGVuIHZTd2l0Y2hcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9QRU5WU1dJVENIXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcXFxcbiAgMTA6XFx0XFx0XFx0ICAgKE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxcbiAgMTQ6XFx0XFx0c2VsZWN0IE1QTFNcXG4gIDE1OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX01QTFNfR1NPXFxuICAxNzpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuICAxODpcXHRcXHRzZWxlY3QgTkVUX05TSFxcbiAgMTk6XFx0XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXFxuICAyMDpcXHRcXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NDMuNDkzNzgwMzUxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDY3Mzc1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIGJ1aWxkIHByb2Nlc3MsIGFuZCBpdCdzIGJlY29taW5nIGNsZWFyIHRoYXQgdGhlcmUncyBhIGRlcGVuZGVuY3kgY2hhaW4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBPUEVOVlNXSVRDSGAgaXRzZWxmIGhpbmdlcyBvbiBgSU5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBuZXR3b3JrIGludGVyYWN0aW9uIGlzIGZ1bmRhbWVudGFsLiBUaGVuLCBJIHNlZSBgTkZfQ09OTlRSQUNLYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYE5GX0NPTk5UUkFDS19PVlNgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIE9WUyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgcmVwcmVzZW50ZWQgYnkgYE5GX0NPTk5UUkFDS19PVlNgLCBjYW4ndCBldmVuIGJlIGNvbnNpZGVyZWQgdW5sZXNzIHRoZSBiYXNlIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQuIFRoaXMgd2hvbGUgYE5GX0NPTk5UUkFDS19PVlNgIHRoaW5nLCBzcGVjaWZpY2FsbHksIGNvbXBlbHMgdGhlIGNvbXBpbGF0aW9uIG9mIGBjb25udHJhY2sub2AuIEkgc2hvdWxkIHZlcmlmeSBgTkZfQ09OTlRSQUNLX09WU2AgaW4gYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29kZSBjb21waWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU3OjQ3LjAwMDUyMTk3NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBPcGVuIHZTd2l0Y2guXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvcGVudnN3aXRjaC15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFjdGlvbnMubyBcXFxcXFxuICAxMDpcXHRcXHRkYXRhcGF0aC5vIFxcXFxcXG4gIDExOlxcdFxcdGRwX25vdGlmeS5vIFxcXFxcXG4gIDEyOlxcdFxcdGZsb3cubyBcXFxcXFxuICAxMzpcXHRcXHRmbG93X25ldGxpbmsubyBcXFxcXFxuICAxNDpcXHRcXHRmbG93X3RhYmxlLm8gXFxcXFxcbiAgMTU6XFx0XFx0bWV0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdHZwb3J0Lm8gXFxcXFxcbiAgMTg6XFx0XFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcXFxcbiAgMTk6XFx0XFx0dnBvcnQtbmV0ZGV2Lm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxcbiAgMjI6XFx0b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbiAgMjM6XFx0ZW5kaWZcXG4gIDI0OlxcdFxcbiAgMjU6XFx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX1ZYTEFOKSs9IHZwb3J0LXZ4bGFuLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NDcuMDAwNjE1NTg1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzkzMDU0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYGNvbm50cmFjay5vYCBpcyBvbmx5IGJ1aWx0IHdoZW4gYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIGRlZmluZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuYWJsZSBib3RoIGBPUEVOVlNXSVRDSGAgYW5kIGBORl9DT05OVFJBQ0tgIGluIG15IGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIHRvIGVuYWJsZSAqdGhpcyBzcGVjaWZpYyogcGF0Y2gsIHRoZSBwYXJ0IGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAsIEkgbmVlZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJ1dCB0aGF0J3MgaGlkZGVuLCBpc24ndCBpdD8gU28sIEkgaGF2ZSB0byBnbyB0aHJvdWdoIGBORlRfQ09OTkxJTUlUYCBvciBgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVGAgdG8gZ2V0IHRvIGl0LiBMZXQncyB1c2UgYE5GVF9DT05OTElNSVRgIHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQga2VlcCB0aGluZ3MgY2xlYW5lci5cblxuU28sIGxldCdzIGluY2x1ZGU6XG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORl9DT05OVFJBQ0tgXG4qICAgYE5GVF9DT05OTElNSVRgXG5cblJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIGBORlRfQ09OTkxJTUlUYCdzIGRlcGVuZGVuY2llcy4gQWggeWVzLCBpdCBkZXBlbmRzIG9uIGJvdGggYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBMZXQncyB0aHJvdyBpbiBgTkVURklMVEVSX0FEVkFOQ0VEYCBhcyB3ZWxsLlxuXG5TbywgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCwgYXQgbGVhc3QgZm9yIG5vdywgYXJlOlxuXG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORl9DT05OVFJBQ0tgXG4qICAgYE5FVEZJTFRFUl9BRFZBTkNFRGBcbiogICBgTkZUX0NPTk5MSU1JVGBcblxuRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGlzIGFjdHVhbGx5IHVzYWJsZSB0aHJvdWdoIGdlbmw6IFllcCwgaXQncyByZWdpc3RlcmVkIGluIGBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseWAsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTg4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NTMuNjM5OTI1MDIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIxMjMyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNjU1PW92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTggY21kLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2NjYtXFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc25kX3NlcSxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTY2NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZHBfY3RfbGltaXRfZ2VubF9mYW1pbHksIDAsIGNtZCk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2NjgtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG92c19jdF9saW1pdF9tdWx0aWNhc3RfZ3JvdXAgPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAwMy1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAwNDpzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDA1LVxcdC5oZHJzaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfaGVhZGVyKSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0xMDA9c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKSB7IH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0xMDUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjEwNjpleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5O1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0xMDctI2VuZGlmXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjgxPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgKiBjb25zdCBkcF9nZW5sX2ZhbWlsaWVzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjg3LSNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY4ODpcXHRcXHUwMDI2ZHBfY3RfbGltaXRfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4OS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NTYuMDYxMTYxMDk5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTQzODQzOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgTGltaXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAgYXJlIGluZGVlZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMg4oCTIHRoZXkncmUgcmVnaXN0ZXJlZCB3aXRoaW4gYGRwX2dlbmxfZmFtaWxpZXNgLCB3aGljaCBpcyByZWdpc3RlcmVkIGluIGBkcF9yZWdpc3Rlcl9nZW5sYC4gVGhpcyBpcyB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuIGBvdnNfY3RfZXhlY3V0ZWAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGgsIHNwZWNpZmljYWxseSB2aWEgYG92c19leGVjdXRlX2FjdGlvbnNgIHdoZW4gYSBjb25udHJhY2sgYWN0aW9uIGlzIHRyaWdnZXJlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6XG5cbiogICBgb3ZzX2N0X2V4ZWN1dGVgXG4qICAgYG92c19jdF9saW1pdF9jbWRfc2V0YFxuKiAgIGBvdnNfY3RfbGltaXRfY21kX2RlbGBcbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgXG5cbkFuZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM6XG5cbiogICBgT1BFTlZTV0lUQ0hgXG4qICAgYE5GX0NPTk5UUkFDS2BcbiogICBgTkVURklMVEVSX0FEVkFOQ0VEYFxuKiAgIGBORlRfQ09OTkxJTUlUYFxuXG5JdCdzIGNydWNpYWwgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLiBJIGNoZWNrZWQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGNvbmZpcm1lZCB0aGF0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBhIHRyaXN0YXRlIGNvbmZpZywgYnV0IGl0J3MgKm5vdCogZGlyZWN0bHkgdXNlci1jb25maWd1cmFibGUuIEluc3RlYWQsIGl0J3Mgc2VsZWN0ZWQgYnkgYE5GVF9DT05OTElNSVRgIChhbmQgYE5FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVRgKS4gIFRoZXJlZm9yZSwgZW5hYmxpbmcgYE5GVF9DT05OTElNSVRgIGlzIHRoZSBjb3JyZWN0IHBhdGggZm9yIGVuYWJsaW5nIGNvbm50cmFjayBsaW1pdCBmdW5jdGlvbmFsaXR5LlxuXG5CZXlvbmQgdGhhdCwgdGhlIGJhc2ljIHJlcXVpcmVtZW50cyBhcmU6IGBJTkVUYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgYE5GX0NPTk5UUkFDS2AgaXMgZXNzZW50aWFsLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgbmVlZGVkIGZvciBgTkZUX0NPTk5MSU1JVGAuXG5cblJldmlld2luZyB0aGUgcGF0Y2gsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHJlbGF0ZWQgZnVuY3Rpb25zOlxuXG4qICAgYG92c19jdF9saW1pdF9pbml0YFxuKiAgIGBvdnNfY3RfbGltaXRfZXhpdF9zdGFydGBcbiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoYFxuKiAgIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgXG4qICAgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGBcbiogICBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YFxuKiAgIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YFxuKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgXG5cbkkgY29uZmlybWVkIHRoYXQgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAgaXMgY2FsbGVkIGJ5IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIGJ5IGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgIGJ5IGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCBieSBgb3ZzX2N0X2NvbW1pdGAsIHdoaWNoIGlzIHN1YnNlcXVlbnRseSBjYWxsZWQgYnkgYG92c19jdF9leGVjdXRlYC4gVGhpcyBwcm92aWRlcyBtZSB0aGUgY29ycmVjdCBlbnRyeSBwb2ludHMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZWZhY3RvcmluZyB0aGUgY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgaW4gT3BlbiB2U3dpdGNoIHRvIHV0aWxpemUgUkNVIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHN0cnVjdHVyZS4gVGhpcyBtaXRpZ2F0ZXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBuZXRucyB0ZWFyZG93biBieSBzcGxpdHRpbmcgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzLCBlbnN1cmluZyBhbiBSQ1UgZ3JhY2UgcGVyaW9kLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHRvIHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE9wZW4gdlN3aXRjaCBuZXR3b3JraW5nIHN1YnN5c3RlbS5cblxuR2l2ZW4gdGhlIGlkZW50aWZpZWQgY29uZmlndXJhdGlvbnMgYW5kIGVudHJ5IHBvaW50cywgdGhpcyBjb2RlIGlzICpkZWZpbml0ZWx5KiBmdXp6YWJsZS4gIFRoZSBmdXp6aW5nIHN0cmF0ZWd5IHNob3VsZCBjZW50ZXIgb24gYm90aCB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIChzZXR0aW5nLCBnZXR0aW5nLCBkZWxldGluZyBsaW1pdHMpIGFuZCB0aGUgcGFja2V0IGV4ZWN1dGlvbiBwYXRoIHdoZXJlIGxpbWl0cyBhcmUgY2hlY2tlZC5cblxuRmluYWxseSwgSSBjaGVja2VkIGBvdnNfY3RfbGltaXRfY21kX3NldGAgdG8gc2VlIGlmIGl0IHdhcyBzdGF0aWMgb3IgaW5saW5lZC4gU2luY2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBzdHJ1Y3QsIGl0IHdpbGwgKm5vdCogYmUgaW5saW5lZC4gVGhlIGNvbXBpbGVyIGNhbid0IGlubGluZSBhIGZ1bmN0aW9uIHRoYXQncyBwYXJ0IG9mIGEgZnVuY3Rpb24gcG9pbnRlciBhcnJheS4gSXQgd2lsbCBoYXZlIGEgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLCBhbmQgaXMgdGh1cyBwZXJmZWN0bHkgc2FmZSB0byBpbmNsdWRlLlxuXG5UaW1lIHRvIGZlZWQgdGhpcyBpbnRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzc0LCJPdXRwdXRUb2tlbnMiOjI4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MjMuNjA1MDA3ODgxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzU3MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GVF9DT05OTElNSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfZXhlY3V0ZVwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBzdHJ1Y3R1cmUsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0bnMgdGVhcmRvd24uIEl0IHNwbGl0cyB0aGUgZXhpdCBsb2dpYyBpbnRvIGBwcmVfZXhpdGAgYW5kIGBleGl0YCBjYWxsYmFja3MgdG8gZW5zdXJlIGFuIFJDVSBncmFjZSBwZXJpb2QgZWxhcHNlcyBiZWZvcmUgZnJlZWluZyB0aGUgY29ubnRyYWNrIGxpbWl0IHN0YXRlLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGdldHRlci9zZXR0ZXIgbmV0bGluayBjb21tYW5kcyBhbmQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggdG8gcHJvcGVybHkgdXNlIFJDVSBkZXJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBPcGVuIHZTd2l0Y2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAsIHdoaWNoIGlzIGEgaGlkZGVuIGNvbmZpZyBzZWxlY3RlZCBieSBgQ09ORklHX05GVF9DT05OTElNSVRgLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgcGFja2V0IGV4ZWN1dGlvbiBwYXRoIHRoYXQgY2hlY2tzIHRoZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORlRfQ09OTkxJTUlUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODoyMy43Mzk3NzM0MDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDY1MjgwOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MjMuNzQwMzE4ODk3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2MDY0NzI4ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbGlmZXRpbWUgaXNzdWUgd2l0aCBgY3RfbGltaXRfaW5mb2AgaW4gdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbiAoYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBldGMuKSBhbmQgc2VwYXJhdGluZyB0aGUgdGVhcmRvd24gaW50byBgLnByZV9leGl0YCBhbmQgYC5leGl0YCBwaGFzZXMgdG8gcmVzcGVjdCBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlLCBhbmQgd2hpbGUgaXQgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBhbGwgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlIChgc3RydWN0IG92c196b25lX2xpbWl0YCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcuIFRoZSBidWdzIHByZXZlbnRlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCAzOGM2ZjM0Nzc2YzI4Li44Y2E1YmIxNTVlZWI5IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoIWN0X2xpbWl0X2luZm8pXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0Y29ubmNvdW50X2tleSA9IGluZm8tXHUwMDNlem9uZS5pZDtcbiBcbiBcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXHUwMDNlem9uZS5pZCk7XG5AQCAtMTU4NSw0MCArMTU4OSw1NSBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4rXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xuK1x0aWYgKCFpbmZvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbitcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuK1x0aW5mby1cdTAwM2VsaW1pdHMgPVxuIFx0XHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpIHtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghaW5mby1cdTAwM2VsaW1pdHMpIHtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXG4tXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzW2ldKTtcbitcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4rXHRpbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbiBcbi1cdGlmIChJU19FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmIChJU19FUlIoaW5mby1cdTAwM2VkYXRhKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4rXHRcdGtmcmVlKGluZm8tXHUwMDNlbGltaXRzKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHByX2VycihcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cIiwgZXJyKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4rc3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuK3tcbitcdHJldHVybiByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK31cbitcbisvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxuKyAqIFJDVSBncmFjZSBwZXJpb2QgbXVzdCBlbGFwc2UgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcnVucy4gIFRoZSBwZXJuZXQgY29yZVxuKyAqIGd1YXJhbnRlZXMgdGhlIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIHRoZSAucHJlX2V4aXQgYW5kIC5leGl0IGNhbGxiYWNrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IGRhdGE7XG4gXHRpbnQgaTtcbiBcbitcdGlmICghaW5mbylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbkBAIC0xNjI2LDcgKzE2NDUsNyBAQCBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbiBcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdF9saW1pdCwgbmV4dCwgaGVhZCwgaGxpc3Rfbm9kZSlcbi1cdFx0XHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XG4rXHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0fVxuIFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuIFx0a2ZyZWUoaW5mbyk7XG5AQCAtMTY2NSwxMiArMTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgKzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNjk1LDYgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiArMTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTczMCw2ICsxNzU0LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgKzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIyLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODQwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUzLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3Miw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTcsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTgsMTIgKzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyB0aGUgUkNVLXByb3RlY3RlZFxuKyAqIGN0X2xpbWl0X2luZm8gYW5kIHN0b3JlcyBpdCBpbiBvdnNfbmV0LVx1MDAzZWN0X2V4aXRfZGF0YSBmb3JcbisgKiBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0aGUgdGVhcmRvd24gYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbit7XG4rI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuK1x0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuK1xuK1x0b3ZzX25ldC1cdTAwM2VjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTtcbisjZW5kaWZcbit9XG4rXG4rLyogQ29tcGxldGVzIHRoZSBDVCBsaW1pdCB0ZWFyZG93bi4gIFRoZSBwZXJuZXQgY29yZSBndWFyYW50ZWVzIGFuIFJDVVxuKyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmRcbisgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4rXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbiAjZW5kaWZcbiBcbiBcdGlmIChvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuaW5kZXggMzE3ZTUyNWM4YTExMy4uYTUxNmU1YmFlNGYzNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXG5AQCAtMTQsNyArMTQsOCBAQCBlbnVtIG92c19rZXlfYXR0cjtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICopO1xuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKTtcbiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTtcbiBpbnQgb3ZzX2N0X2NvcHlfYWN0aW9uKHN0cnVjdCBuZXQgKiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiosXG5AQCAtNDAsNyArNDEsOCBAQCB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggZGVkNDZkOTkzYTRlZC4uMzYyZTMyMmZiNDFmNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI3NTcsMTcgKzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuK3tcbitcdG92c19sb2NrKCk7XG4rXHRvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbitcdG92c191bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbitcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0TElTVF9IRUFEKGhlYWQpO1xuIFxuIFx0b3ZzX2xvY2soKTtcbiBcbi1cdG92c19jdF9leGl0KGRuZXQpO1xuK1x0b3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgXHUwMDI2b3ZzX25ldC1cdTAwM2VkcHMsIGxpc3Rfbm9kZSlcbiBcdFx0X19kcF9kZXN0cm95KGRwKTtcbkBAIC0yNzkxLDYgKzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IG92c19pbml0X25ldCxcbitcdC5wcmVfZXhpdCA9IG92c19wcmVfZXhpdF9uZXQsXG4gXHQuZXhpdCA9IG92c19leGl0X25ldCxcbiBcdC5pZCAgID0gXHUwMDI2b3ZzX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfbmV0KSxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi40NDY1NTNjNTFjMzBlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCwxMCBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8ge1xuICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LlxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXG4gICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy5cbi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLlxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcbisgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4rICogbmV0bnMgdGVhcmRvd24uXG4rICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc1LDggQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODoyMy43NDAzMTk1ODdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0Njk4MzI2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgY29yZSBjb25udHJhY2sgY29kZSB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGFsbG9jYXRpb24gYW5kIGhhbmRsaW5nIG9mIGBjdF9saW1pdF9pbmZvYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgZ2l2ZW4gdGhlIHNjb3BlIChmb3VyIGZpbGVzKSBhbmQgdGhlIGNvcmUgbmF0dXJlIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBzZWUgZm9yIGNvbmN1cnJlbmN5LiBUaGV5J3JlIHVzaW5nIGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhleSdyZSBhaW1pbmcgZm9yIGEgbG9ja2xlc3MgYXBwcm9hY2ggZm9yIHJlYWRzLCBhbmQgY2FyZWZ1bGx5IG1hbmFnaW5nIHdyaXRlcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgb3ZzX2N0X2V4aXRfc3RhcnRgIGFuZCBgb3ZzX2N0X2V4aXRfZmluaXNoYCB3aXRoIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBlcm5ldCBjYWxsYmFja3MgaW5kaWNhdGVzIHRoZXkncmUgY2FyZWZ1bGx5IG1hbmFnaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlLCB3aGljaCBpcyBhbHNvIGEgZ29vZCBzaWduLiBMb29rcyBsaWtlIHRoZXkgZml4ZWQgc29tZSBSQ1UgcmVhZCBsb2NrIHBsYWNlbWVudHMgdG9vLiBTbWFydC5cblxuTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IHNhZmV0eSwgYW5kIHRoYXQncyB3aGVyZSBJIHN0YXJ0IHRvIGRpZyBpbi4gTGV0J3Mgc2VlLi4uIFRoZXkndmUgY2hhbmdlZCB0aGUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGluc3BlY3Rpb24uIFRoZSBvbGQgY29kZSBkaXJlY3RseSBhbGxvY2F0ZWQgdG8gYG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mb2AuIFRoZSBuZXcgY29kZSBsb29rcyBsaWtlIGl0IGFsbG9jYXRlcyBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSwgaW5pdGlhbGl6ZXMgaXQsIGFuZCB0aGVuIGFzc2lnbnMgaXQgdG8gYG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mb2AuXG5cbk9rYXksIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdXNlIG9mIGBrbWFsbG9jX29iamAuIEknbGwgYXNzdW1lIHRoYXQncyBqdXN0IGEgbWFjcm8gZm9yIGBrbWFsbG9jKHNpemVvZihvYmopLCBHRlBfS0VSTkVMKWAgZm9yIG5vdywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZXkncmUgaW5pdGlhbGl6aW5nIGBpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXRgLCBhbGxvY2F0aW5nIGBpbmZvLVx1MDAzZWxpbWl0c2AsIGFuZCBpbml0aWFsaXppbmcgdGhvc2UgaGFzaCBidWNrZXRzLiBUaGV5IGFsc28gaW5pdGlhbGl6ZSBgaW5mby1cdTAwM2VkYXRhYC4gU28gZmFyLCBzbyBnb29kLCBpdCAqbG9va3MqIGxpa2UgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpZWxkcyBpbiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCB0aGF0IGFyZW4ndCBiZWluZyBleHBsaWNpdGx5IHNldC4gR290dGEgY2hlY2sgdGhlIGRlZmluaXRpb24uIEknbGwgbmVlZCB0byBnbyBsb29rIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MsIGJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGEgc3VidGxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpbiBjb25udHJhY2sgY29kZSEgVGhpcyBuZWVkcyBhIHZlcnkgY2FyZWZ1bCBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MzQuMjEwMTU2NTg0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ1NDI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9ODY9c3RydWN0IG92c19jdF9saW1pdCB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk0OnN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyB7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk1LVxcdHUzMiBkZWZhdWx0X2xpbWl0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODozNC4yNzM2MTUxNDdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMTkzMTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYDpcblxuKipEaXZpbmcgaW50byB0aGUgYG92c19jdF9saW1pdF9pbmZvYCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AuIFRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBPVlMgY29ubnRyYWNrIHB1enpsZSwgcmlnaHQ/IEknbSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgY29udGV4dHMgd2hlcmUgSSdkIGVuY291bnRlciB0aGlzIOKAkyBsaWtlbHkgZGVlcCB3aXRoaW4gdGhlIGNvbm50cmFjayBtb2R1bGUgaXRzZWxmLCBwZXJoYXBzIHdoZW4gY29uZmlndXJpbmcgb3IgZXZhbHVhdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gSXQncyB1c2VkIHRvIHN0b3JlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGxpbWl0cyBhcHBsaWVkIHRvIGNvbm5lY3Rpb25zLCBJIGFzc3VtZS4gSSBuZWVkIHRoZSBjb21wbGV0ZSBkZWZpbml0aW9uIHRob3VnaCwgSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoYXQgZmllbGRzIGFyZSBwcmVzZW50LiBXaGF0J3MgdHJhY2tlZD8gSXMgdGhpcyBwZXItZmxvdywgcGVyLXpvbmUsIG9yIHNvbWV0aGluZyBlbHNlPyBJcyBpdCBhIGNvbWJpbmF0aW9uPyBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZXJlIGFyZSBjb3VudGVycyBmb3IgdGhpbmdzIGxpa2UgbnVtYmVyIG9mIGFjdGl2ZSBmbG93cywgcGVyaGFwcyBzb21lIHRpbWVzdGFtcHMgcmVsYXRlZCB0byBob3cgbG9uZyB0aGUgbGltaXQgaGFzIGJlZW4gYWN0aXZlLCBhbmQgbWF5YmUgZXZlbiBmbGFncyBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHN0YXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbGltaXQg4oCTIFwib3ZlciBsaW1pdFwiLCBcImFwcHJvYWNoaW5nIGxpbWl0LFwiIFwiY2xlYXJlZFwiIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgZmllbGRzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGltaXQgYXBwbGljYXRpb24sIHBvbGljeSwgYW5kIGhvdyB0byBiZXN0IG1hbmFnZSBpdCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcmVkaWN0IHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU4OjM3Ljk5NTU0OTMwOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdHUxNiB6b25lO1xcbiAgOTE6XFx0XFx0dTMyIGxpbWl0O1xcbiAgOTI6XFx0fTtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcXG4gIDk1OlxcdFxcdHUzMiBkZWZhdWx0X2xpbWl0O1xcbiAgOTY6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmxpbWl0cztcXG4gIDk3OlxcdFxcdHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqZGF0YTtcXG4gIDk4OlxcdH07XFxuICA5OTpcXHRcXG4gMTAwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdF9saW1pdF9wb2xpY3lbT1ZTX0NUX0xJTUlUX0FUVFJfTUFYICsgMV0gPSB7XFxuIDEwMTpcXHRcXHRbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0gPSB7IC50eXBlID0gTkxBX05FU1RFRCwgfSxcXG4gMTAyOlxcdH07XFxuIDEwMzpcXHQjZW5kaWZcXG4gMTA0OlxcdFxcbiAxMDU6XFx0c3RhdGljIGJvb2wgbGFiZWxzX25vbnplcm8oY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMpO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKTtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0c3RhdGljIHUxNiBrZXlfdG9fbmZwcm90byhjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MzcuOTk1NzcwODE4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MzEyNDQ3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiBhbiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGlzc3VlLCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIG5ldG5zIChuZXR3b3JrIG5hbWVzcGFjZSkgZXhpdCBvciBjb25jdXJyZW50IGFjY2VzcyB0byBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEuIFRoZSBjb3JlIG9mIHRoZSBmaXggcmV2b2x2ZXMgYXJvdW5kIHRoZSBwcm9wZXIgdXNlIG9mIFJDVSBwcmltaXRpdmVzOiBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCwgYW5kIHNvIG9uLiBUaGlzIG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsIGZvciBoYW5kbGluZyBjb25jdXJyZW50IGFjY2VzcyBhbmQgcHJvdGVjdGluZyBkYXRhIGR1cmluZyB1cGRhdGVzIGFuZCBkZWxldGlvbnMgd2l0aGluIGFuIFJDVSBjb250ZXh0LlxuXG5JIHNlZSB0aGV5J3ZlIGFkZGVkIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHdoaWNoIGFyZSBwcm9iYWJseSB0aGVyZSB0byBtYW5hZ2UgdGhlIFJDVSBncmFjZSBwZXJpb2RzIGVmZmVjdGl2ZWx5IGR1cmluZyBhIG5ldG5zIHRlYXJkb3duLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiBhYm91dCB0aGUgbmV0bnMgZXhpdCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBwcmV2ZW50IGEgc2NlbmFyaW8gd2hlcmUgc29tZXRoaW5nIGlzIGZyZWVkIHdoaWxlIGl0J3Mgc3RpbGwgYmVpbmcgYWNjZXNzZWQsIG9yIHdoZXJlIGEgcG9pbnRlciBiZWNvbWVzIE5VTEwgYmVmb3JlIGl0cyB1c2UuIEdvb2QsIHRoYXQncyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgY2xlYXIsIHdlbGwtdW5kZXJzdG9vZCBwcm9ibGVtLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBjYXRjaGluZyB0aGUgZXJyb3JzLCBhbmQgdGhhdCdzIGdvb2QgdmFsaWRhdGlvbiB0b28uXG5cbkkndmUgY2hlY2tlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXM6IGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AsIGFuZCBgZGF0YWAuIEFsbCB0aHJlZSBhcmUgaW5pdGlhbGl6ZWQgaW4gYG92c19jdF9saW1pdF9pbml0YC4gVGhhdCdzIGltcG9ydGFudDsgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhZGluZyB0byB2dWxuZXJhYmlsaXRpZXMgaXMgYSBjb25zdGFudCBjb25jZXJuLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHBhZGRpbmcsIHNvIHRoYXQncyBhbm90aGVyIGNoZWNrLlxuXG5JIGRpZCBhIHF1aWNrIHJldmlldyBvZiB0aGUgZnVuY3Rpb25zIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgIGFuZCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGFuZCB0aGUgcGF0Y2ggbm93IGNhbGxzIHRoZW0gd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuIFRoYXQncyBnb29kIHByYWN0aWNlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgZG9pbmcgYW55dGhpbmcgc25lYWt5IGxpa2UgcGFzc2luZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBidXQgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaXMgb25seSBhYm91dCByZWFkaW5nIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIGRhdGEsIGl0IHNvdW5kcyBsaWtlIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEknbGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gaXQgaXNuJ3Qgc2VuZGluZyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbHdheXMgZ29vZCB0byBkb3VibGUgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODo0Ny43MjcwMTg2NDFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzgwOlxcdFxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG4xNzgxOlxcdH1cXG4xNzgyOlxcdFxcbjE3ODM6XFx0c3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuMTc4NDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpkYXRhLFxcbjE3ODU6XFx0XFx0XFx0XFx0XFx0XFx0IHUxNiB6b25lX2lkLCB1MzIgbGltaXQsXFxuMTc4NjpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbjE3ODc6XFx0e1xcbjE3ODg6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIGN0X3pvbmU7XFxuMTc4OTpcXHRcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtcXG4xNzkwOlxcdFxcdHUzMiBjb25uY291bnRfa2V5ID0gem9uZV9pZDtcXG4xNzkxOlxcdFxcbjE3OTI6XFx0XFx0em9uZV9saW1pdC56b25lX2lkID0gem9uZV9pZDtcXG4xNzkzOlxcdFxcdHpvbmVfbGltaXQubGltaXQgPSBsaW1pdDtcXG4xNzk0OlxcdFxcdG5mX2N0X3pvbmVfaW5pdChcXHUwMDI2Y3Rfem9uZSwgem9uZV9pZCwgTkZfQ1RfREVGQVVMVF9aT05FX0RJUiwgMCk7XFxuMTc5NTpcXHRcXG4xNzk2OlxcdFxcdHpvbmVfbGltaXQuY291bnQgPSBuZl9jb25uY291bnRfY291bnRfc2tiKG5ldCwgTlVMTCwgMCwgZGF0YSxcXG4xNzk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNvbm5jb3VudF9rZXkpO1xcbjE3OTg6XFx0XFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbjE3OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODo0Ny43MjczNjY4NDFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1NTg4ODU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25jZXJucyBSZWdhcmRpbmcgU3RhY2sgQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWU6IGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBnb2luZyB0byBjYXVzZSBhbnkgcHJvYmxlbXMgbGF0ZXIgb24/IFRoaXMgbWVhbnMgdGhlIGRhdGEgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0cmFjZSBteSB0aG91Z2h0cyBmdXJ0aGVyLCBhcyBJIGJlbGlldmUgdGhlIGNvZGUgY291bGQgcG9zc2libHkgaGF2ZSBhIHByb2JsZW0uXG5cbk5vdywgaXQgaW5pdGlhbGl6ZXMgYHpvbmVfbGltaXQuem9uZV9pZGAgYW5kIGB6b25lX2xpbWl0LmxpbWl0YCwgdGhlbiBjYWxscyBgbmZfY3Rfem9uZV9pbml0YC4gU28sIHRoZSBgc3RydWN0YCBpdHNlbGYgaGFzIGhhZCBtZW1iZXJzIGluaXRpYWxpemVkIHdpdGhpbiBpdCwgYnV0IGlzIHRoZSAqZW50aXJlKiBzdHJ1Y3QgdHJ1bHkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQ/IFNwZWNpZmljYWxseSwgSSBzZWUgYHpvbmVfbGltaXQuY291bnRgIGJlaW5nIHBvcHVsYXRlZCAqYWZ0ZXIqIHRoZSBpbml0aWFsIGFzc2lnbm1lbnRzLiBUaGUgY3JpdGljYWwgbGluZSB0byBleGFtaW5lIGlzIGByZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtgLiBUaGF0IGBubGFfcHV0X25vaGRyYCBmdW5jdGlvbiwgaXQncyBleHBlY3RpbmcgYSBmdWxseSBwb3B1bGF0ZWQgYHN0cnVjdGAgLSBvciBhdCBsZWFzdCwgdGhhdCdzIG15IGFzc3VtcHRpb24sIGFuZCBpdCdzIGNlcnRhaW5seSBiZXN0IHByYWN0aWNlLiBTbyB0aGUgbWFpbiBwcm9ibGVtIGhlcmUgaXMgaWYgYG5sYV9wdXRfbm9oZHJgIHdpbGwgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1iZXJzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBgc2l6ZW9mKHpvbmVfbGltaXQpYCBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcsIGFuZCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0IGlzIGJlaW5nIGV4cG9zZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgbWVtYmVycyBpbiBgc3RydWN0IG92c196b25lX2xpbWl0YCB0aGF0IG1heSByZXF1aXJlIGluaXRpYWxpemF0aW9uIGJ5IGBuZl9jdF96b25lX2luaXRgLiBJJ20gY29uY2VybmVkIGFib3V0IHJlbHlpbmcgb24gdGhlIGNvbXBpbGVyIHRvIGluaXRpYWxpemUgYW55IHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgdGhlIGBzdHJ1Y3RgLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW9yIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHN0cnVjdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTUwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6NTIuODgzMjU5MjAzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY1ODcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg9MTE3OD1lbnVtIG92c19jdF9saW1pdF9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oLTExODctXFxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg6MTE4ODpzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQge1xcbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oLTExODktXFx0aW50IHpvbmVfaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU4OjUyLjk1OTkyNzAwNVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM5NDgzOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggS2VybmVsIEhlYWRlcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgT3BlbiB2U3dpdGNoIGtlcm5lbCBpbnRlZ3JhdGlvbiwgYW5kIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBhcmUgcHJvYmFibHkgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oYC4gTm93LCB0aGUgdHJpY2t5IHBhcnQgaXMgcGlucG9pbnRpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIHdpdGhpbiB0aGF0IGhlYWRlci4gQmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSBhbmQgdGhlIG5hdHVyZSBvZiB3aGF0IEknbSBsb29raW5nIGZvciwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE4OCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEknbGwgZm9jdXMgbXkgaW5pdGlhbCBzY2FuIHRoZXJlLCBsb29raW5nIGZvciBzdHJ1Y3R1cmVzLCBlbnVtcywgb3IgbWFjcm9zIHRoYXQgc2VlbSByZWxldmFudCB0byB0aGUgc3BlY2lmaWMgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHJlbGF0ZWQgdG8gdGhlIG92cyBrZXJuZWwgbW9kdWxlIHRoYXQgaXMgY29tbXVuaWNhdGluZyB0byB1c2VyIHNwYWNlLiBMaW5lIDExODggaXMgZ29pbmcgdG8gYmUgbXkgYW5jaG9yIHRvIHN0YXJ0LiBJJ2xsIHpvb20gaW4gcXVpY2tseSwgbG9va2luZyBmb3IgZmFtaWxpYXIgcGF0dGVybnMgYW5kIGxpa2VseSBjYW5kaWRhdGVzIGZvciBjbG9zZXIgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6NTYuOTk5NDEzNzkzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTg1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTg1OlxcdFxcbjExODY6XFx0I2RlZmluZSBPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUgLTFcXG4xMTg3OlxcdFxcbjExODg6XFx0c3RydWN0IG92c196b25lX2xpbWl0IHtcXG4xMTg5OlxcdFxcdGludCB6b25lX2lkO1xcbjExOTA6XFx0XFx0X191MzIgbGltaXQ7XFxuMTE5MTpcXHRcXHRfX3UzMiBjb3VudDtcXG4xMTkyOlxcdH07XFxuMTE5MzpcXHRcXG4xMTk0OlxcdGVudW0gb3ZzX2RlY190dGxfYXR0ciB7XFxuMTE5NTpcXHRcXHRPVlNfREVDX1RUTF9BVFRSX1VOU1BFQyxcXG4xMTk2OlxcdFxcdE9WU19ERUNfVFRMX0FUVFJfQUNUSU9OLFxcdC8qIE5lc3RlZCBzdHJ1Y3QgbmxhdHRyICovXFxuMTE5NzpcXHRcXHRfX09WU19ERUNfVFRMX0FUVFJfTUFYXFxuMTE5ODpcXHR9O1xcbjExOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU4OjU2Ljk5OTU3MzY5M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYyNDAxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IG92c196b25lX2xpbWl0YC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgem9uZV9pZGAsIGBsaW1pdGAsIGFuZCBgY291bnRgLCBhbGwgaW50ZWdlcnMsIGFsbCA0IGJ5dGVzIGVhY2gsIGFkZGluZyB1cCB0byAxMiBieXRlcyB0b3RhbC4gTm8gcGFkZGluZyB0byB3b3JyeSBhYm91dCwgYXNzdW1pbmcgdGhlIHN0YW5kYXJkIDQtYnl0ZSBhbGlnbm1lbnQsIHdoaWNoIGlzIGNvbXBsZXRlbHkgZXhwZWN0ZWQuIFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpbiB0aGlzIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZDogYHpvbmVfaWRgIGhhcyBhIHZhbHVlLCBgbGltaXRgIGhhcyBhIHZhbHVlLCBgY291bnRgIGhhcyBhIHZhbHVlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzdHJ1Y3R1cmUgaXMgY29ycmVjdGx5IHBvcHVsYXRlZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IHRvdWNoIHRoZSBzdHJ1Y3R1cmUncyBmaWVsZHMgb3IgaW5pdGlhbGl6YXRpb247IGl0IG9ubHkgbW9kaWZpZXMgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcm91bmQgaXQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgZGVhbGluZyB3aXRoIHNvbWUgc29ydCBvZiBjb25jdXJyZW5jeSBvciBSQ1UgaXNzdWUuXG5cblRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGxvY2tpbmcgc3VnZ2VzdHMgaXQncyBhaW1pbmcgdG8gZml4IGEgcmFjZSBjb25kaXRpb24uIEl0J3MgbGlrZWx5IHRyeWluZyB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNvbWV0aGluZyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkIGZsYWcuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmIGFnYWluOlxuXG5gYGBjXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuK1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbitcdGlmICghaW5mbylcbmBgYFxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIGBrbWFsbG9jX29iamA/IFRoYXQncyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgbWFjcm8uIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhbiBPcGVuIHZTd2l0Y2gtc3BlY2lmaWMgbWFjcm8uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgT3BlbiB2U3dpdGNoIHNvdXJjZSBvciBpbmNsdWRlIGZpbGVzIHRvIGZpbmQgb3V0IHdoYXQgYGttYWxsb2Nfb2JqYCBhY3R1YWxseSBkb2VzLiBJdCdzIHByb2JhYmx5IGEgd3JhcHBlciBhcm91bmQgYGttYWxsb2NgIHRvIGhhbmRsZSBvYmplY3QgYWxsb2NhdGlvbiwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBpdHMgdXNlIGhlcmUgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgcGF0Y2gncyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU5OjA0LjU2MTk3OTM3M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3Nzk5OTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUga21hbGxvY19vYmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyMC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTIxOiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjItXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzItICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzMzojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzQtXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgQ09VTlQpXFxuLS1cXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxcbmxpYi9kZWNvbXByZXNzX3VueHouYzoxNjQ6I2RlZmluZSBrbWFsbG9jX29iaih0eXBlKSBtYWxsb2Moc2l6ZW9mKHR5cGUpKVxcbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjUtI2RlZmluZSBrZnJlZShwdHIpIGZyZWUocHRyKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19hcnJheSh1bnNpZ25lZCBuLCBzaXplX3QgcywgZ2ZwX3QgZ2ZwKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo2ODojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjktXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSksIDApKVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6NzE6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzItXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSkgKiAoQ09VTlQpLCAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTk6MDYuODM5OTgzNzc1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTY1MDI0ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBhbmQgc2VlIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgZXhwb3NlZC4gYGttYWxsb2Nfb2JqYCwgYXMgSSByZWNhbGwsIHVzZXMgYGttYWxsb2NgLCB3aGljaCBkb2Vzbid0IHplcm8gbWVtb3J5LiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuSSBzZWUgYGluZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmpgLCBhbmQgdGhlbiBpdHMgZmllbGRzIChgZGVmYXVsdF9saW1pdGAsIGBsaW1pdHNgLCBgZGF0YWApIGFyZSBpbml0aWFsaXplZC4gSSBhbHNvIGhhZCBhIHF1aWNrIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGl0c2VsZiB0byBjaGVjayBmb3IgYW55IHBhZGRpbmcgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdGhhdCA0LWJ5dGUgcGFkZGluZyBhZnRlciBgZGVmYXVsdF9saW1pdGAgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIHdoaWNoIGlzIHRoZXJlLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhpcyBzdHJ1Y3R1cmUgZXZlbiBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IE5vLCBpdCdzIGludGVybmFsLiBMaW1pdHMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCwgd2hpY2ggYWxsb2NhdGVzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3RydWN0dXJlLCBgc3RydWN0IG92c196b25lX2xpbWl0YCwgb24gdGhlIHN0YWNrLiBgc3RydWN0IG92c196b25lX2xpbWl0YCBoYXMgbm8gcGFkZGluZy4gU28gdGhlIHBhZGRpbmcgaW4gYG92c19jdF9saW1pdF9pbmZvYCBkb2Vzbid0IG1hdHRlciBmcm9tIGEgdXNlci1zcGFjZSBwZXJzcGVjdGl2ZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgYWJvdXQgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgUkNVLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgZGlyZWN0IGBrbWFsbG9jYCBhbGxvY2F0aW9uIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCwgYW5kIGxhdGVyIGZyZWVkIGl0IGluIGBvdnNfY3RfbGltaXRfZXhpdGAuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBpbmZvYCwgaW5pdGlhbGl6ZXMgaXQgZnVsbHksIGFuZCB0aGVuIHVzZXMgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gc2FmZWx5IG1ha2UgaXQgYXZhaWxhYmxlLiBBY2Nlc3MgaXMgbm93IGRvbmUgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAgYW5kIGBvdnNsX2RlcmVmZXJlbmNlYC4gVGhpcyBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4sIHdoaWNoIEkndmUgc2VlbiBiZWZvcmUuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCBwcm90ZWN0aW5nIGFnYWluc3QgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucywgdGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuXG5cblNvLCB0aGUgYnVncyBiZWluZyBhZGRyZXNzZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIFJDVS4gVGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBzY3JlYW1zIFwiS01TQU5cIiBhdCBtZS4gSXQncyBhIGNsZWFuIFJDVSBmaXguIEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMgdG8gYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhlIHJlYXNvbmluZyBJIGp1c3QgbGFpZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDEwLCJPdXRwdXRUb2tlbnMiOjI0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1OToxOS44MDUwMTEzOTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsaWZldGltZSBpc3N1ZSB3aXRoIGBjdF9saW1pdF9pbmZvYCBpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgcHJvcGVyIFJDVSBwcm90ZWN0aW9uIChgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4pIGFuZCBzZXBhcmF0aW5nIHRoZSB0ZWFyZG93biBpbnRvIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBoYXNlcyB0byByZXNwZWN0IFJDVSBncmFjZSBwZXJpb2RzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIGFuZCB3aGlsZSBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgICh3aGljaCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSksIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgaXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgKGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgKSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29udGFpbnMgbm8gcGFkZGluZy4gVGhlIGJ1Z3MgcHJldmVudGVkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbGlmZXRpbWUgaXNzdWUgd2l0aCBgY3RfbGltaXRfaW5mb2AgaW4gdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbiAoYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBldGMuKSBhbmQgc2VwYXJhdGluZyB0aGUgdGVhcmRvd24gaW50byBgLnByZV9leGl0YCBhbmQgYC5leGl0YCBwaGFzZXMgdG8gcmVzcGVjdCBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlLCBhbmQgd2hpbGUgaXQgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBhbGwgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlIChgc3RydWN0IG92c196b25lX2xpbWl0YCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcuIFRoZSBidWdzIHByZXZlbnRlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhznh8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 09:39:04 +0000 UTC FinishedAt: 2026-08-19 09:59:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_ADVANCED", "NFT_CONNLIMIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_ADVANCED", "NFT_CONNLIMIT" ], "series_id": "33372ded-292a-4abd-a0a9-52d65369fdca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_execute", "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19jdF9leGVjdXRlJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZ2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIGlzc3VlIHdpdGggYGN0X2xpbWl0X2luZm9gIGluIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHByb3RlY3Rpb24gKGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLikgYW5kIHNlcGFyYXRpbmcgdGhlIHRlYXJkb3duIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGhhc2VzIHRvIHJlc3BlY3QgUkNVIGdyYWNlIHBlcmlvZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgYW5kIHdoaWxlIGl0IGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBpdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZSB0aGF0IGlzIHNlbnQgdG8gdXNlciBzcGFjZSAoYHN0cnVjdCBvdnNfem9uZV9saW1pdGApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb250YWlucyBubyBwYWRkaW5nLiBUaGUgYnVncyBwcmV2ZW50ZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggMzhjNmYzNDc3NmMyOC4uOGNhNWJiMTU1ZWViOSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDU1IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiYjNDM7c3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxuJiM0MzsgKiBSQ1UgZ3JhY2UgcGVyaW9kIG11c3QgZWxhcHNlIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuICBUaGUgcGVybmV0IGNvcmVcbiYjNDM7ICogZ3VhcmFudGVlcyB0aGUgZ3JhY2UgcGVyaW9kIGJldHdlZW4gdGhlIC5wcmVfZXhpdCBhbmQgLmV4aXQgY2FsbGJhY2tzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTtcbiBcdGludCBpO1xuIFxuJiM0MztcdGlmICghaW5mbylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTYyNiw3ICYjNDM7MTY0NSw3IEBAIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4gXHRcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xuIFxuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0X2xpbWl0LCBuZXh0LCBoZWFkLCBobGlzdF9ub2RlKVxuLVx0XHRcdGtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTtcbiYjNDM7XHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0fVxuIFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuIFx0a2ZyZWUoaW5mbyk7XG5AQCAtMTY2NSwxMiAmIzQzOzE2ODQsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE2NzksNiAmIzQzOzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiAmIzQzOzE3MzEsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE3MjMsNiAmIzQzOzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3NzMsNiAmIzQzOzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiAmIzQzOzE4MjIsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiAmIzQzOzE4NDAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICYjNDM7MTg1MywxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgJiM0MzsxODcyLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDggJiM0MzsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xODg0LDcgJiM0MzsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggJiM0MzsxOTE3LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgJiM0MzsxOTM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXG5AQCAtMTkzMiwxOCAmIzQzOzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5AQCAtMjAxOCwxMiAmIzQzOzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgdGhlIFJDVS1wcm90ZWN0ZWRcbiYjNDM7ICogY3RfbGltaXRfaW5mbyBhbmQgc3RvcmVzIGl0IGluIG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhIGZvclxuJiM0MzsgKiBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0aGUgdGVhcmRvd24gYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxuJiM0Mzt7XG4mIzQzOyNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4mIzQzO1xuJiM0MztcdG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhID0gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQob3ZzX25ldCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDb21wbGV0ZXMgdGhlIENUIGxpbWl0IHRlYXJkb3duLiAgVGhlIHBlcm5ldCBjb3JlIGd1YXJhbnRlZXMgYW4gUkNVXG4mIzQzOyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmRcbiYjNDM7ICogdGhpcyBjYWxsLCBzbyBubyBSQ1UgcmVhZGVycyByZW1haW4uXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4mIzQzO1x0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XG4gI2VuZGlmXG4gXG4gXHRpZiAob3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbmluZGV4IDMxN2U1MjVjOGExMTMuLmE1MTZlNWJhZTRmMzQgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuQEAgLTE0LDcgJiM0MzsxNCw4IEBAIGVudW0gb3ZzX2tleV9hdHRyO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XG4mIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7XG4gYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKiwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cik7XG4gaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKixcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLFxuQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpO1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkgeyByZXR1cm4gMDsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGRlZDQ2ZDk5M2E0ZWQuLjM2MmUzMjJmYjQxZjQgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yNzU3LDE3ICYjNDM7Mjc1NywyNCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuJiM0Mzt7XG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbiYjNDM7XHRvdnNfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdExJU1RfSEVBRChoZWFkKTtcbiBcbiBcdG92c19sb2NrKCk7XG4gXG4tXHRvdnNfY3RfZXhpdChkbmV0KTtcbiYjNDM7XHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgb3ZzX25ldC1cdTAwM2VjdF9leGl0X2RhdGEpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCBcdTAwMjZvdnNfbmV0LVx1MDAzZWRwcywgbGlzdF9ub2RlKVxuIFx0XHRfX2RwX2Rlc3Ryb3koZHApO1xuQEAgLTI3OTEsNiAmIzQzOzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IG92c19pbml0X25ldCxcbiYjNDM7XHQucHJlX2V4aXQgPSBvdnNfcHJlX2V4aXRfbmV0LFxuIFx0LmV4aXQgPSBvdnNfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNm92c19uZXRfaWQsXG4gXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX25ldCksXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uNDQ2NTUzYzUxYzMwZSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE2NCw3ICYjNDM7MTY0LDEwIEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4mIzQzOyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcbiYjNDM7ICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xuJiM0MzsgKiBuZXRucyB0ZWFyZG93bi5cbiYjNDM7ICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBvdnNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlO1xuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZUX0NPTk5MSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19jdF9leGVjdXRlJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBzdHJ1Y3R1cmUsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0bnMgdGVhcmRvd24uIEl0IHNwbGl0cyB0aGUgZXhpdCBsb2dpYyBpbnRvIGBwcmVfZXhpdGAgYW5kIGBleGl0YCBjYWxsYmFja3MgdG8gZW5zdXJlIGFuIFJDVSBncmFjZSBwZXJpb2QgZWxhcHNlcyBiZWZvcmUgZnJlZWluZyB0aGUgY29ubnRyYWNrIGxpbWl0IHN0YXRlLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGdldHRlci9zZXR0ZXIgbmV0bGluayBjb21tYW5kcyBhbmQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggdG8gcHJvcGVybHkgdXNlIFJDVSBkZXJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBPcGVuIHZTd2l0Y2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAsIHdoaWNoIGlzIGEgaGlkZGVuIGNvbmZpZyBzZWxlY3RlZCBieSBgQ09ORklHX05GVF9DT05OTElNSVRgLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgcGFja2V0IGV4ZWN1dGlvbiBwYXRoIHRoYXQgY2hlY2tzIHRoZSBsaW1pdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMjJjNzk1ZWEwMjU4NTRlOWJjYjY4Njk2MDFlOWFlYzFiMzJkMWYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDk6NTU6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggMzhjNmYzNDc3NmMyOC4uOGNhNWJiMTU1ZWViOSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw1NSBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKJiM0MztzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBOVUxMLAomIzQzOwkJCQkgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIENUIGxpbWl0IHN0YXRlIG11c3QgYmUgZGV0YWNoZWQgYnkgb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoKSBhbmQgYW4KJiM0MzsgKiBSQ1UgZ3JhY2UgcGVyaW9kIG11c3QgZWxhcHNlIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuICBUaGUgcGVybmV0IGNvcmUKJiM0MzsgKiBndWFyYW50ZWVzIHRoZSBncmFjZSBwZXJpb2QgYmV0d2VlbiB0aGUgLnByZV9leGl0IGFuZCAuZXhpdCBjYWxsYmFja3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkKIHsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhOwogCWludCBpOwogCiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybjsKJiM0MzsKIAluZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tJmd0O2RhdGEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CkBAIC0xNjI2LDcgJiM0MzsxNjQ1LDcgQEAgc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKIAkJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CiAKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdF9saW1pdCwgbmV4dCwgaGVhZCwgaGxpc3Rfbm9kZSkKLQkJCWtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTsKJiM0MzsJCQlrZnJlZShjdF9saW1pdCk7CiAJfQogCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiAJa2ZyZWUoaW5mbyk7CkBAIC0xNjY1LDEyICYjNDM7MTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTY3OSw2ICYjNDM7MTY5OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNjk1LDYgJiM0MzsxNzE2LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3MDksMTIgJiM0MzsxNzMxLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNzIzLDYgJiM0MzsxNzQ2LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE3MzAsNiAmIzQzOzE3NTQsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTc3Myw2ICYjNDM7MTc5OCw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksICZhbXA7em9uZV9saW1pdCk7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCkBAIC0xNzk2LDEyICYjNDM7MTgyMiwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQkJJmFtcDt6b25lKSkpIHsKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewotCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7CiAKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJCW5ldCwgaW5mby0mZ3Q7ZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xODE2LDYgJiM0MzsxODQwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiAwOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpCkBAIC0xODI4LDE5ICYjNDM7MTg1MywxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHsKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby0mZ3Q7ZGF0YSwKIAkJCQljdF9saW1pdC0mZ3Q7em9uZSwgY3RfbGltaXQtJmd0O2xpbWl0LCByZXBseSk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKLWV4aXRfZXJyOgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NTAsNyAmIzQzOzE4NzIsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCwKQEAgLTE4NjMsOCAmIzQzOzE4ODQsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xODg0LDcgJiM0MzsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsCkBAIC0xODk3LDggJiM0MzsxOTE3LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTkxOCw3ICYjNDM7MTkzOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsCkBAIC0xOTMyLDE4ICYjNDM7MTk1MiwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQluZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sCiAJCQlyZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0gZWxzZSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLAogCQkJCQkJICAgICAgcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2VycjsKIAogCW5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTsKIAlnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7CkBAIC0yMDE4LDEyICYjNDM7MjAzOSwyOSBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQomIzQzOy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyB0aGUgUkNVLXByb3RlY3RlZAomIzQzOyAqIGN0X2xpbWl0X2luZm8gYW5kIHN0b3JlcyBpdCBpbiBvdnNfbmV0LSZndDtjdF9leGl0X2RhdGEgZm9yCiYjNDM7ICogb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGhlIHRlYXJkb3duIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QuCiYjNDM7ICovCiYjNDM7dm9pZCBvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOyNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQomIzQzOwlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiYjNDM7CiYjNDM7CW92c19uZXQtJmd0O2N0X2V4aXRfZGF0YSA9IG92c19jdF9saW1pdF9leGl0X3N0YXJ0KG92c19uZXQpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MzsvKiBDb21wbGV0ZXMgdGhlIENUIGxpbWl0IHRlYXJkb3duLiAgVGhlIHBlcm5ldCBjb3JlIGd1YXJhbnRlZXMgYW4gUkNVCiYjNDM7ICogZ3JhY2UgcGVyaW9kIGJldHdlZW4gZGV0YWNoaW5nIHRoZSBzdGF0ZSBpbiBvdnNfY3RfZXhpdF9zdGFydCgpIGFuZAomIzQzOyAqIHRoaXMgY2FsbCwgc28gbm8gUkNVIHJlYWRlcnMgcmVtYWluLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCW92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CW92c19jdF9saW1pdF9leGl0X2ZpbmlzaChuZXQsIGRhdGEpOwogI2VuZGlmCiAKIAlpZiAob3ZzX25ldC0mZ3Q7eHRfbGFiZWwpCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKaW5kZXggMzE3ZTUyNWM4YTExMy4uYTUxNmU1YmFlNGYzNCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaApAQCAtMTQsNyAmIzQzOzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTsKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTsKJiM0Mzt2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7dm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKTsKIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpOwogaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLApAQCAtNDAsNyAmIzQzOzQxLDggQEAgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkgeyByZXR1cm4gMDsgfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGRlZDQ2ZDk5M2E0ZWQuLjM2MmUzMjJmYjQxZjQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yNzU3LDE3ICYjNDM7Mjc1NywyNCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCwKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19wcmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKJiM0Mzt7CiYjNDM7CW92c19sb2NrKCk7CiYjNDM7CW92c19jdF9leGl0X3N0YXJ0KGRuZXQpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIHsKLQlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpOwogCXN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0OwomIzQzOwlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAJTElTVF9IRUFEKGhlYWQpOwogCiAJb3ZzX2xvY2soKTsKIAotCW92c19jdF9leGl0KGRuZXQpOwomIzQzOwlvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgb3ZzX25ldC0mZ3Q7Y3RfZXhpdF9kYXRhKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgJmFtcDtvdnNfbmV0LSZndDtkcHMsIGxpc3Rfbm9kZSkKIAkJX19kcF9kZXN0cm95KGRwKTsKQEAgLTI3OTEsNiAmIzQzOzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG92c19uZXRfb3BzID0gewogCS5pbml0ID0gb3ZzX2luaXRfbmV0LAomIzQzOwkucHJlX2V4aXQgPSBvdnNfcHJlX2V4aXRfbmV0LAogCS5leGl0ID0gb3ZzX2V4aXRfbmV0LAogCS5pZCAgID0gJmFtcDtvdnNfbmV0X2lkLAogCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfbmV0KSwKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKaW5kZXggNjk2NjQwZTg4ZmE3ZS4uNDQ2NTUzYzUxYzMwZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE2NCw3ICYjNDM7MTY0LDEwIEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7CiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC4KICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuCiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLgotICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4KJiM0MzsgKiBAY3RfbGltaXRfaW5mbzogSGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4gUHJvdGVjdGVkCiYjNDM7ICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZwomIzQzOyAqIG5ldG5zIHRlYXJkb3duLgomIzQzOyAqIEBjdF9leGl0X2RhdGE6IENUIGxpbWl0IHN0YXRlIGRldGFjaGVkIGF0IC5wcmVfZXhpdCwgZnJlZWQgYXQgLmV4aXQuCiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LgogICovCiBzdHJ1Y3Qgb3ZzX25ldCB7CkBAIC0xNzIsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBvdnNfbmV0IHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7CiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7CiAjZW5kaWYKIAlib29sIHh0X2xhYmVsOwogfTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogT3BlbiB2U3dpdGNoIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCB0ZWxscyBtZSBpdCYjMzk7cyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLCBgLmhgLCBgZGF0YXBhdGguY2AsIGFuZCBgLmhgLiBDcnVjaWFsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgd2F5IGBjdF9saW1pdF9pbmZvYCBpcyBhY2Nlc3NlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBhbmQgc3BsaXR0aW5nIHRoZSBleGl0IGxvZ2ljLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSDigJMgYSBwcmltZSB0YXJnZXQuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIFRoZSBwYXRjaCBhZmZlY3RzIHRoZXNlOiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0X3N0YXJ0YCwgYG92c19jdF9saW1pdF9leGl0X2ZpbmlzaGAsIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYG92c19jdF9leGl0X3N0YXJ0YCwgYG92c19jdF9leGl0X2ZpbmlzaGAsIGBvdnNfcHJlX2V4aXRfbmV0YCwgYW5kIGBvdnNfZXhpdF9uZXRgLgoKU28sIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmdXp6ZXIgYXJlIGdvaW5nIHRvIGJlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCB3aGljaCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAgb3Igc2ltaWxhci4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBsYXR0ZXIsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGNhbGxlcnMgb2YgYG92c19jdF9jaGVja19saW1pdGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gc3RhcnQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzAtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05ODAtXHRcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk4MTpcdFx0XHRlcnIgPSBvdnNfY3RfY2hlY2tfbGltaXQobmV0LCBza2IsIGluZm8pO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cdFx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAzMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgTGltaXRzIGluIE9wZW4gdlN3aXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgYXJlIGhhbmRsZWQgaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZ1bmN0aW9ucy4gSXQgYXBwZWFycyB0aGF0IGBvdnNfY3RfY29tbWl0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhhdCBtYWtlcyBzZW5zZSAtIGBvdnNfY3RfY29tbWl0YCB3b3VsZCBiZSB0aGUgcG9pbnQgd2hlcmUgYSBjb25uZWN0aW9uIGlzIGZpbmFsaXplZCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgd2UmIzM5O2QgbmVlZCB0byBjaGVjayBpZiB3ZSYjMzk7cmUgaGl0dGluZyBhbnkgY29uZmlndXJlZCBsaW1pdHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxpbWl0cyBhcmUgYWN0dWFsbHkgKnNldCosICpkZWxldGVkKiwgYW5kICpyZXRyaWV2ZWQqLiBJIHNlZSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGFyZSBhbGwgR2VuZXJpYyBOZXRsaW5rIChnZW5sKSBjb21tYW5kcy4gU28sIGl0JiMzOTtzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHBhcmFtZXRlcnMsIGFzIGV4cGVjdGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYG92c19jdF9saW1pdF9jbWRfc2V0YCB0byBzZWUgaG93IHRob3NlIGdlbmwgY29tbWFuZHMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBleGVjdXRlZC4gSSYjMzk7bGwgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGl0IHNob3VsZCBiZSBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgYW5kIHRoYXQmIzM5O3MgdGhlIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQ0PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjgtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2OTpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg3MC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTgzLVx0XHRcdFx0XHQgICAgICAgKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTg0Olx0XHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODUtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHJlcHJlc2VudCB0aGUgZm9jdXMgb2YgdGhpcyBzeXN0ZW0sIGFuZCB0aGUga2V5IHN5bWJvbHMgdGhhdCBjYXB0dXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYXJlIGNsZWFybHkgdGhlc2U6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIGVpdGhlciBgb3ZzX2N0X2NvbW1pdGAgb3IsIHBvdGVudGlhbGx5LCB0aGUgbW9yZSBlbmNvbXBhc3NpbmcgYG92c19jdF9leGVjdXRlYCB3aGljaCB0aGVuIGNhbGxzIGBvdnNfY3RfY29tbWl0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgbW9yZSByZWxldmFudCBhbmQgd2hpY2ggaXMgbW9yZSBzZW1hbnRpY2FsbHkgY29ycmVjdC4KCk15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgb3ZzX2N0X2V4ZWN1dGVgIGFuZCBzZWUgaG93IGl0IGZpdHMgd2l0aGluIHRoaXMgZnJhbWV3b3JrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTEyNTU9c3RhdGljIGludCBkb19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODUtXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEzODY6XHRcdFx0ZXJyID0gb3ZzX2N0X2V4ZWN1dGUob3ZzX2RwX2dldF9uZXQoZHApLCBza2IsIGtleSxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM4Ny1cdFx0XHRcdFx0ICAgICBubGFfZGF0YShhKSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo1MzM6c3RydWN0IG5mX2Nvbm4gKm92c19jdF9leGVjdXRlZChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTM0LVx0XHRcdFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzEtXHRpZiAoIWN0KVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcdFx0Y3QgPSBvdnNfY3RfZXhlY3V0ZWQobmV0LCBrZXksIGluZm8sIHNrYiwgXHUwMDI2Y3RfZXhlY3V0ZWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3My1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQyLVx0XHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MjM9aW50IG92c19jdF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICosIHN0cnVjdCBza19idWZmICopO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI0LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjI1OmludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBzd19mbG93X2tleSAqLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI2LVx0XHQgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICopO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD01OT1zdGF0aWMgaW5saW5lIGludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtNjQtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NjU6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTY2LVx0XHRcdFx0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIE9WUyBDb25uZWN0aW9uIFRyYWNraW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBvdnNfY3RfZXhlY3V0ZWAgbG9va3MgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbiB0cmFja2luZyBpcyBoYW5kbGVkIHdpdGhpbiBPcGVuIHZTd2l0Y2guCgpOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWxldmFudCBidWlsZCBpbnN0cnVjdGlvbnM/IEFoLCB5ZXMsIHRoZSBjb2RlIHNob3VsZCBiZSB3aXRoaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2hgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGBjb25udHJhY2suY2AuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlLCBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLCBzYXlzIGFib3V0IHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBgTWFrZWZpbGVgLCBgbmV0L29wZW52c3dpdGNoL01ha2VmaWxlYCwgd2lsbCByZXZlYWwgaG93IHRoaXMgYWxsIGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsIG1vZHVsZS4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgcHJvY2VzcyBpcyBjcnVjaWFsIGZvciBzZWVpbmcgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25udHJhY2subyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL01ha2VmaWxlPTUzPW5mcC1vYmpzICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvTWFrZWZpbGUtNjItXHQgICAgZmxvd2VyL3Fvc19jb25mLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvTWFrZWZpbGU6NjM6XHQgICAgZmxvd2VyL2Nvbm50cmFjay5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL01ha2VmaWxlLTY0LWVuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9MTgwNT1pbnQgbmZwX2ZsX2N0X2hhbmRsZV9wcmVfY3Qoc3RydWN0IG5mcF9mbG93ZXJfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xODE4LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6MTgxOTpcdFx0XHRcdCAgIFwmIzM0O3Vuc3VwcG9ydGVkIG9mZmxvYWQ6IENvbm50cmFjayBhY3Rpb24gZW1wdHkgaW4gY29ubnRyYWNrIG9mZmxvYWRcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmMtMTgyMC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZT0xMj1zZmMtJChDT05GSUdfU0ZDX1NSSU9WKVx0JiM0Mzs9IHNyaW92Lm8gZWYxMF9zcmlvdi5vIGVmMTAwX3NyaW92Lm8gZWYxMDBfcmVwLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZS0xMy0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYWUubyB0Yy5vIHRjX2JpbmRpbmdzLm8gdGNfY291bnRlcnMubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlOjE0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjX2VuY2FwX2FjdGlvbnMubyB0Y19jb25udHJhY2sub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL01ha2VmaWxlLTE1LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTg9c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTQtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oOjU1Olx0LyogVGhlIGNvbm50cmFjayBvZiB0aGUgbWFzdGVyIGNvbm5lY3Rpb24gKi9cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTYtXHRzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQ9bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpICYjNDM7PSBuZl9jb25udHJhY2tfbGFiZWxzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19PVlMpICYjNDM7PSBuZl9jb25udHJhY2tfb3ZzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYtbmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NUX1BST1RPX1NDVFApICYjNDM7PSBuZl9jb25udHJhY2tfcHJvdG9fc2N0cC5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSykgJiM0Mzs9IG5mbmV0bGlua19ob29rLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTMzLSMgY29ubmVjdGlvbiB0cmFja2luZ1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSAmIzQzOz0gbmZfY29ubnRyYWNrLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzUtXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xOTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQpICYjNDM7PSB4dF9jb25ubGltaXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0spICYjNDM7PSB4dF9jb25udHJhY2sub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xOTgtb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DUFUpICYjNDM7PSB4dF9jcHUub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMxOD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyMS0gKiBtYXN0ZXImIzM5O3MgaGVscGVyIGlzIHNhZmUsIGJlY2F1c2UgdGhlIHBhY2tldCBob2xkcyBhIHJlZmVyZW5jZSBvblxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzIyOiAqIHRoZSBjb25udHJhY2sgb2JqZWN0LiBOZXZlciB1c2UgaXQgZnJvbSBjb250cm9sIHBsYW5lLlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzIzLSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTkxPWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYxNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjE2Olx0LyogTG9vayBmb3IgbWFzdGVyIGNvbm50cmFjayBvZiB0aGlzIGV4cGVjdGF0aW9uICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYxNy1cdGggPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCB6b25lLCBcdTAwMjZtYXN0ZXJfdHVwbGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9MjE1PXN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9jb25udHJhY2tfbG9jYWwodm9pZCAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTIzOS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6MjQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfb3BzW10gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTI0MS1cdHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTM5MD1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjZfY29ubnRyYWNrX2xvY2FsKHZvaWQgKnByaXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0zOTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjM5NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX29wc1tdID0ge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0zOTgtXHR7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz00NDM9c3RhdGljIGludCBuZl9jdF9uZXRuc19kb19nZXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0NjI6XHRcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDYzOlx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDY0LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDc5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0ODA6XHRcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDgxOlx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDgyLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NTMyPXN0YXRpYyB2b2lkIG5mX2N0X25ldG5zX2RvX3B1dChzdHJ1Y3QgbmV0ICpuZXQsIHU4IG5mcHJvdG8pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MzktXHRcdGlmIChjbmV0LVx1MDAzZXVzZXJzNCBcdTAwMjZcdTAwMjYgKC0tY25ldC1cdTAwM2V1c2VyczQgPT0gMCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NTQwOlx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2NF9jb25udHJhY2tfb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDE6XHRcdFx0XHRcdFx0QVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQyLVx0XHRcdG5mX2RlZnJhZ19pcHY0X2Rpc2FibGUobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU0Ny1cdFx0aWYgKGNuZXQtXHUwMDNldXNlcnM2IFx1MDAyNlx1MDAyNiAoLS1jbmV0LVx1MDAzZXVzZXJzNiA9PSAwKSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDg6XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0OTpcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NTAtXHRcdFx0bmZfZGVmcmFnX2lwdjZfZGlzYWJsZShuZXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk1NT12b2lkIG5mX2Nvbm50cmFja190Y3Bfc2V0X2Nsb3Npbmcoc3RydWN0IG5mX2Nvbm4gKmN0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtOTU2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk1NzpcdGVudW0gdGNwX2Nvbm50cmFjayBvbGRfc3RhdGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy05NTgtXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0zMDU9c3RhdGljIGJvb2wgbmZfbmF0X21heV9raWxsKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzA5LVx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3NfbmVlZGVkID0gSVBTX1NSQ19OQVQ7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MzEwOlx0ZW51bSB0Y3BfY29ubnRyYWNrIG9sZF9zdGF0ZTtcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0zMTEtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfdHJhY2UuYz05ND1zdGF0aWMgaW50IG5mX3RyYWNlX2ZpbGxfY3RfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfdHJhY2UuYy0xMDctXHRpZiAoIWN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc190cmFjZS5jOjEwODpcdFx0aWYgKGN0aW5mbyAhPSBJUF9DVF9VTlRSQUNLRUQpIC8qIG5vdCBzZWVuIGJ5IGNvbm50cmFjayBvciBpbnZhbGlkICovXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc190cmFjZS5jLTEwOS1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGU9MjE9aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlOjIyOm9wZW52c3dpdGNoLXkgJiM0Mzs9IGNvbm50cmFjay5vXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUtMjMtZW5kaWZcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTEwNzU9aW50IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA1LVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMTA2Olx0LyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGNvbm50cmFjayBvcmlnaW5hbCBkaXJlY3Rpb24gdHVwbGUgbWV0YWRhdGEgb25seVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA3LVx0ICogZm9yIHBhY2tldHMgZm9yIHdoaWNoIGl0IG1ha2VzIHNlbnNlLiAgT3RoZXJ3aXNlIHRoZSBrZXkgbWF5IGJlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2g9Mjc9c2V0dXAoKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2gtNTktXHRcdGdyb19tYXhfc2l6ZSAkTUFYX1NJWkUgZ3NvX21heF9zaXplICRNQVhfU0laRVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2g6NjA6XHQjIHRlc3QgZm9yIG5mX2N0X3NrYl9uZXR3b3JrX3RyaW0gaW4gbmZfY29ubnRyYWNrX292cyB1c2VkIGJ5IFRDIGN0IGFjdGlvbi5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9iaWdfdGNwLnNoLTYxLVx0aXAgbmV0IGV4ZWMgJFJPVVRFUl9OUyB0YyBxZGlzYyBhZGQgZGV2IGxpbmsxIGluZ3Jlc3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZXMgaW50byB0aGF0IHNwZWNpZmljIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIHBhdGNoIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmVhdHVyZXMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSBob3cgYW5kIHdoeSB0aGUgYXV0aG9ycyBhcmUgdXNpbmcgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBjb250ZXh0LiBJcyB0aGlzIGEgbmV3IGZlYXR1cmUsIGEgbW9kaWZpY2F0aW9uIHRvIGV4aXN0aW5nIGJlaGF2aW9yLCBvciBqdXN0IGEgZGVwZW5kZW5jeT8gVW5kZXJzdGFuZGluZyB0aGlzIGxpbmsgYmV0d2VlbiB0aGUgY29uZmlnIG9wdGlvbiBhbmQgdGhlIGBjb25udHJhY2suY2AgY29kZSBpcyBjcnVjaWFsIGZvciBwcm9wZXJseSBhc3Nlc3NpbmcgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBpcyB1c2VkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc5PW9iai0kKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpICYjNDM7PSBuZl9zeW5wcm94eV9jb3JlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODAtXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSAmIzQzOz0gbmZfY29ubmNvdW50Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODItXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTYxPXN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy03OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4MDojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODEtI2RlZmluZSBPVlNfQ1RfTElNSVRfVU5MSU1JVEVEXHQwXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTg2MD1zdGF0aWMgYm9vbCBsYWJlbHNfbm9uemVybyhjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcwLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3MTojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcyLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc3LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk3ODojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc5LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpKSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1NzM9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4OC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg5OiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTkwLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAyMT1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDMzLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMzQ6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMzUtXHRlcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDQ2PXZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNDcte1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwNDg6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNDktXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwNTk9dm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDYyLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwNjM6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNjQtXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTAwPXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSkgeyB9XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTEwNC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoxMDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTA2LWV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjY4MT1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5ICogY29uc3QgZHBfZ2VubF9mYW1pbGllc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI2ODYtXHRcdTAwMjZkcF9tZXRlcl9nZW5sX2ZhbWlseSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI2ODc6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4OC1cdFx1MDAyNmRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oPTE3Mz1zdHJ1Y3Qgb3ZzX25ldCB7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMTc2LVx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDoxNzc6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMTc4LVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcmVxdWlyZW1lbnRzLCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBzcGFjZToKCioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gbmVlZHMgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYC4gSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mIGl0cyBmdW5jdGlvbiwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGhlcmUuIFRoZW4sIHdlIGFsc28gaGF2ZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19PUEVOVlNXSVRDSGAuIFRoYXQgbWFrZXMgc2Vuc2U7IE9wZW4gdlN3aXRjaCBpcyBhIHNpZ25pZmljYW50IHBpZWNlIG9mIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIG5vdCBzdXJwcmlzaW5nIGl0IGhhcyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4KCkdpdmVuIHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBnbyB0byBjb25maXJtIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkIG9yIGRlcml2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmFjdHVhbGx5KiBnb2luZyBvbiBpbiB0ZXJtcyBvZiBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCwgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgbW9yZSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yLCBwb3RlbnRpYWxseSwgZGVmYXVsdCB2YWx1ZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgT1BFTlZTV0lUQ0hgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgSSBzZWUgaXQsIGlzIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgbG9jYXRpb24gZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLiBCeSBleGFtaW5pbmcgdGhlIEtjb25maWcgZmlsZSwgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB3aGljaCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyBhcmUgcmVxdWlyZWQgb3IgYXQgbGVhc3Qgc3VnZ2VzdGVkIGZvciBgT1BFTlZTV0lUQ0hgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE9QRU5WU1dJVENIYC4gVGhlIGtleSB0aGluZyB0byBub3RlIGltbWVkaWF0ZWx5IGlzIHRoYXQgaXQgcmVsaWVzIG9uIGBJTkVUYC4gVGhhdCYjMzk7cyBleHBlY3RlZCDigJMgaXQmIzM5O3MgbmV0d29ya2luZyBhZnRlciBhbGwsIHNvIHdlIG5lZWQgdGhlIGNvcmUgSW50ZXJuZXQgUHJvdG9jb2wgc3RhY2suCgpCdXQgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGlzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3k6IGAhTkZfQ09OTlRSQUNLIHx8IChORl9DT05OVFJBQ0sgJmFtcDsmYW1wOyAuLi4gKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKWAuIEVzc2VudGlhbGx5LCBgT1BFTlZTV0lUQ0hgIGVpdGhlciAqZG9lc24mIzM5O3QqIHJlcXVpcmUgTmV0ZmlsdGVyJiMzOTtzIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXQgYWxsLCBvciBpdCAqZG9lcyogcmVxdWlyZSBgTkZfQ09OTlRSQUNLYCBhbmQgdGhlbiBoYXMgYSBjb25kaXRpb25hbCBiYXNlZCBvbiBgTkVURklMVEVSX0NPTk5DT1VOVGAuIElmIGBORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQsIGl0ICplaXRoZXIqIG5lZWRzIGBORVRGSUxURVJfQ09OTkNPVU5UYCAqb3IqIGl0IGRvZXNuJiMzOTt0LgoKU28sIHRvIGJlIHNhZmUsIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIGVuYWJsZTogYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAgdG8gY292ZXIgYWxsIG91ciBiYXNlcyBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIEJldHRlciB0byBoYXZlIHRoZW0gYW5kIG5vdCBuZWVkIHRoZW0sIHRoYW4gdGhlIHJldmVyc2UuCgpOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgcmVxdWlyZW1lbnQsIGxldCYjMzk7cyBnbyBjaGVjayB0aGUgc291cmNlIGZpbGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGVuYWJsZWQgYW5kIHVzZWQuIFRoYXQgd2lsbCBjbGFyaWZ5IGhvdyBjcnVjaWFsIHRoYXQgb3B0aW9uIGlzIGFuZCB3aGV0aGVyIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgTGltaXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGludm9sdmVzIGBORVRGSUxURVJfQ09OTkNPVU5UYCB3aGljaCBpcyB0cmlzdGF0ZSBhbmQgbmVzdGVkIHdpdGhpbiBgaWYgTkZfQ09OTlRSQUNLYC4gU28sIHdlIGRlZmluaXRlbHkgbmVlZCB0byBjb25zaWRlciBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBmb2N1cyBzeW1ib2xzLiBXZSBoYXZlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2V4ZWN1dGVgLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYG92c19jdF9jaGVja19saW1pdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2V4ZWN1dGVgLiBJdCBhbHNvIHRvdWNoZXMgYG92c19jdF9saW1pdF9pbml0YCBhbmQgdGhlIGluaXQvZXhpdCByb3V0aW5lcy4gVGhvc2UgbmV0bnMgY2FsbGJhY2tzIGFyZSB0cmlnZ2VyZWQgZHVyaW5nIGBjb3B5X25ldF9uc2AgYW5kIGBjbGVhbnVwX25ldGAsIGJ1dCBuZXRucyBmdXp6aW5nIGlzIHN0YW5kYXJkLCBzbyBJIGNhbiBza2lwIGxpc3RpbmcgdGhvc2UgYXMgZXhwbGljaXQgZm9jdXMgc3ltYm9scy4KCkkgaGF2ZSB0byBiZSBjYXJlZnVsIHdpdGggc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggbWlnaHQgYmUgaW5saW5lZC4gQnV0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgc3RhdGljLiBIbW0sIGJ1dCB3YWl0LiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGdlbmxfc21hbGxfb3BzYC4gVGhhdCBtZWFucyB0aGV5ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIHRoZXkmIzM5O2xsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gdGhleSAqYXJlKiB2YWxpZCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJvbXB0IGV2ZW4gdGVsbHMgbWUgdGhleSBhcmUgb2theSBpbiB0aGlzIGNhc2UuCgpFdmVuIHNvLCBgb3ZzX2N0X2V4ZWN1dGVgIGlzIG5vbi1zdGF0aWMsIHNvIG1heWJlIEkgc2hvdWxkIHByZWZlciB0aGF0IGluc3RlYWQuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbi4gWWVwLCBgb3ZzX2N0X2V4ZWN1dGVgIGlzIG5vbi1zdGF0aWM6IGBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgZXhwb3J0ZWQgb3IganVzdCBzdGF0aWMuIFl1cCwgaXQmIzM5O3Mgc3RhdGljLiBJdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGdlbmwgY29yZS4gSXQmIzM5O3Mgc2FmZSB0byBpbmNsdWRlIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLiBFdmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkgYXJlIG5vdCBpbmxpbmVkLgoKRmluYWxseSwgbGV0IG1lIGRvdWJsZSBjaGVjayBgb3ZzX2N0X2V4ZWN1dGVgIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb3ZzX2N0X2V4ZWN1dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0MC0gKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDQxOmludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cdFx0ICAgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oPTIzPWludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0yNC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoyNTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0yNi1cdFx0ICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9NTk9c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8sXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTY0LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjY1OnN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02Ni1cdFx0XHRcdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MzgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyB0aGUgSW1wYWN0IG9mIGBvdnNfY3RfbGltaXRfY21kX3NldGAqKgoKQWxyaWdodCwgSSYjMzk7bSB0dXJuaW5nIG92ZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgY29tbWFuZCBpbiBteSBtaW5kLiBPbiB0aGUgc3VyZmFjZSwgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIHdheSB0byBtYW5hZ2UgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgd2l0aGluIE9wZW4gdlN3aXRjaC4gQnV0LCBhcyB3ZSBib3RoIGtub3csIHRoZXNlIHNlZW1pbmdseSBzaW1wbGUga25vYnMgY2FuIGhhdmUgZmFyLXJlYWNoaW5nIGVmZmVjdHMgb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgZXNwZWNpYWxseSB1bmRlciBsb2FkLiBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggZXhpc3RpbmcgZmlyZXdhbGwgcnVsZXMuIEhvdyBhZ2dyZXNzaXZlbHkgYXJlIHRoZXNlIGxpbWl0cyBiZWluZyBhcHBsaWVkLCBhbmQgd2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpZiBub3QgZXhwbGljaXRseSBzZXQ/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0eXBlcyBvZiB0cmFmZmljIHBhdHRlcm5zIHdlJiMzOTtyZSBsaWtlbHkgdG8gc2VlIGluIG91ciBlbnZpcm9ubWVudC4gSXMgdGhpcyBwcmltYXJpbHkgc2hvcnQtbGl2ZWQsIHRyYW5zYWN0aW9uYWwgdHJhZmZpYywgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBsb25nLWxpdmVkIGZsb3dzIGxpa2Ugc3RyZWFtaW5nIHZpZGVvIG9yIHBlcnNpc3RlbnQgY29ubmVjdGlvbnM/IFRoZSBvcHRpbWFsIHNldHRpbmcgd2lsbCB2YXJ5IGRyYXN0aWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBXZSBjYW4mIzM5O3QgYXBwbHkgYSBzaW5nbGUsIGdsb2JhbCBzZXR0aW5nIHdpdGhvdXQgc29tZSBzZXJpb3VzIHRlc3RpbmcuCgpBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBhYnVzZS4gQ291bGQgYW4gYXR0YWNrZXIgZXhwbG9pdCB0aGlzIHNldHRpbmcgdG8gdHJpZ2dlciBhIERvUyBjb25kaXRpb24/IFdoYXQgYXJlIHRoZSBtb25pdG9yaW5nIGNhcGFiaWxpdGllcyB3ZSBoYXZlIGluIHBsYWNlIHRvIGRldGVjdCBhbmQgbWl0aWdhdGUgdGhlc2UgdHlwZXMgb2YgYXR0YWNrcyBpZiB0aGV5IHdlcmUgdG8gdHJ5IHRoaXMgZXhwbG9pdD8gV2UgbmVlZCB0byBlbnN1cmUgd2UgY2FuIGlkZW50aWZ5IGFuZCByZWFjdCB0byBhbnkgdW51c3VhbCBwYXR0ZXJucyBpbiBjb25uZWN0aW9uIHRyYWNraW5nIG1ldHJpY3MuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQsIGxhdGVuY3ksIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gV2UgY2Fubm90IG1ha2UgYXNzdW1wdGlvbnMuIFdoYXQgdGVzdHMgY2FuIGJlIGRvbmUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBsaW1pdHM/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBleHBlcmltZW50YWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHdlIG9wdGltaXplIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbiBuZXR3b3JrIHN0YWJpbGl0eS4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCB3aXRoIG91ciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDQ9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2OC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODY5OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODcwLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODMtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODQ6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4NS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIEFQSSBFeHBvc3VyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgZXhwb3NlIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHkgZm9yIHRlc3Rpbmcgd2l0aCBTeXprYWxsZXIsIGtlZXBpbmcgaW4gbWluZCB0aGUgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGxpc3RpbmcgYG92c19jdF9saW1pdF9jbWRfc2V0YCBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgYnV0IEkgcmVhbGl6ZWQgU3l6a2FsbGVyIGNvdWxkIHN0aWxsIHV0aWxpemUgaXQgaWYgaXQgcGFyc2VzIHRoZSBzeW1ib2wgdGFibGUuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIGdvIHdpdGggYG92c19jdF9leGVjdXRlYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gTm93LCBhcmUgdGhlcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXZhaWxhYmxlPyBBZnRlciBhIHF1aWNrIHJldmlldywgSSBzZWUgYG92c19jdF9pbml0YCwgYG92c19jdF9leGl0X3N0YXJ0YCwgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEJ1dCwgdGhvc2UgYXJlIGp1c3QgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgZnVuY3Rpb25zLiBTbywgaW4gdG90YWwsIEkgdGhpbmsgdGhlIGJlc3Qgb3B0aW9uIGlzIHRvIGluY2x1ZGUgYG92c19jdF9leGVjdXRlYCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFzIHRoZXkgcHJvdmlkZSB0aGUgbW9zdCBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIHdoaWxlIGFkaGVyaW5nIHRvIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEuCgpCZWZvcmUgc3VibWl0dGluZywgSSBuZWVkIHRvIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtsbCBuZWVkIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRGSUxURVJfQ09OTkNPVU5UYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEyLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGB0cmlzdGF0ZWAgd2l0aGluIGBORl9DT05OVFJBQ0tgKioKClJpZ2h0LCBzbyBpdCYjMzk7cyBhIHNpbXBsZSBgdHJpc3RhdGVgIG9wdGlvbiBuZXN0ZWQgZGlyZWN0bHkgaW5zaWRlIHRoZSBgaWYgTkZfQ09OTlRSQUNLYCBibG9jay4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIGNvbXBsZXggdGhhbiBJIGluaXRpYWxseSBhbnRpY2lwYXRlZC4gSXQgc3VnZ2VzdHMgdGhhdCB0aGlzIGZlYXR1cmUsIHdoYXRldmVyIGl0IGlzLCBkb2VzbiYjMzk7dCBicmluZyBpbiBhIHJhZnQgb2Ygb3RoZXIgZGVwZW5kZW5jaWVzIEkmIzM5O2xsIG5lZWQgdG8gdW50YW5nbGUgbGF0ZXIuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwbHVzIGZvciBlYXNlIG9mIGludGVncmF0aW9uIG9yIG1vZGlmaWNhdGlvbi4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIHF1ZXN0aW9uIG9mIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSXMgaXQgb25seSBlbmFibGVkICpiZWNhdXNlKiBvZiBzb21ldGhpbmcgZWxzZSwgb3IgY2FuIGl0IGJlIGNvbmZpZ3VyZWQgaW5kZXBlbmRlbnRseT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHByb2JhYmx5IHByb21wdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBCdXQgSSBoYXZlIHRvIGNoZWNrLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgcHJvbXB0Li4uSSYjMzk7bGwgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0uIEkmIzM5O2xsIHNlYXJjaCBmb3IgaXQsIGFuZCB0aGVuIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgY2xlYXIgdXAgd2hldGhlciBJIGNhbiBqdXN0IGVuYWJsZSBpdCBkaXJlY3RseSwgb3IgaWYgSSBoYXZlIHRvIGdvIHRocm91Z2ggYSBkaWZmZXJlbnQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdGlmIE5GX0NPTk5UUkFDS1xuIDExMTpcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4gMTEyOlx0XHR0cmlzdGF0ZVxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xuIDExNTpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4gMTE2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gbWFya3MsIHVzZWQgYnkgdGhlXG4gMTE5Olx0XHQgIGBDT05OTUFSSyYjMzk7IHRhcmdldCBhbmQgYGNvbm5tYXJrJiMzOTsgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MzQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgSGlkZGVuIEtlcm5lbCBDb25maWcqKgoKUmlnaHQsIHNvIGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBhcHBhcmVudGx5IG5vdCBhIHZpc2libGUsIHRvcC1sZXZlbCBjb25maWcgb3B0aW9uLiBObyBwcm9tcHQgaW4gdGhlIG1lbnVzLCBpbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCYjMzk7cyBiZWluZyAqc2VsZWN0ZWQqIGJ5IHNvbWV0aGluZyBlbHNlLCBhIGRlcGVuZGVuY3ksIHByb2JhYmx5IGFub3RoZXIgY29uZmlnIG9wdGlvbi4gTm93LCB0aGUgcmVhbCBmdW4gYmVnaW5zOiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2VsZWN0IHBhdGggdGhhdCBjYXVzZXMgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHRvIGJlIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0IHRoZSBzZWxlY3Qgc3RhdGVtZW50cyByZXZlYWwuIExldCYjMzk7cyB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSByb290IGNhdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTExPWNvbmZpZyBORlRfQ09OTkxJTUlUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxNC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTE1Olx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTEyMjg9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIzMS1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzMjpcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIzMy1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGVuYWJsZWQuIEl0IGFwcGVhcnMgdGhhdCBgTkZUX0NPTk5MSU1JVGAgYW5kIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCAqc2VsZWN0KiB0aGlzIGZlYXR1cmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgb25lIG9mIHRob3NlIHRvIGJlIGFjdGl2ZS4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBPUEVOVlNXSVRDSF9DT05OTElNSVRgIHRvIHNlZSBpZiBpdCYjMzk7cyBoYW5kbGluZyB0aGlzIHRvby4gSG1tLCB0aGUgT3BlbiB2U3dpdGNoIEtjb25maWcgaGFzIGEgZGVwZW5kZW5jeSBvbiBgIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVGAuIFNvLCBpdCBkb2VzbiYjMzk7dCAqc2VsZWN0KiBpdC4gSXQganVzdCBjaGVja3MgdGhhdCBpdCBpcyBhdmFpbGFibGUuIFNvLCBubyBoZWxwIGZyb20gdGhlcmUuCgpPa2F5LCBiYWNrIHRvIHRoZSBtYWluIHN0cmF0ZWd5LiBTaW5jZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBvcHRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBlaXRoZXIgYE5GVF9DT05OTElNSVRgIG9yIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCB0byBlbmFibGUgaXQuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlICpvbmUqIG9mIHRob3NlIHRvIGFjdHVhbGx5IGdldCB0aGlzIGNvZGUgdG8gd29yay4KClNvLCBuZXh0IHN0ZXA6IGxldCYjMzk7cyBnbyBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORlRfQ09OTkxJTUlUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCBuZWVkcyBpbiBvcmRlciB0byBiZSBhIHZpYWJsZSBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfQ09OTkxJTUlUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz01MDQ9Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjUxMTpjb25maWcgTkZUX0NPTk5MSU1JVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25uZWN0aW9uIExpbWl0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgaW50byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgZm9jdXMgb24gYE5GVF9DT05OTElNSVRgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlZmluZSB0aGUgYnVpbGQgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb25uZWN0aW9uIGxpbWl0IG1vZHVsZSwgd2hpY2ggc2hvdWxkIGFsbG93IHVzIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIElQIGFkZHJlc3Mgb3IgYSBjb21iaW5hdGlvbiBvZiBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzIGFuZCBwb3J0cywgcmlnaHQ/CgpJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSB1c3VhbDogdGhlICpkZXBlbmRzIG9uKiBzdGF0ZW1lbnRzLiBXaGF0IG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIGFyZSByZXF1aXJlZD8gSXMgdGhpcyBpbnRlcnR3aW5lZCB3aXRoIGNvbm50cmFjayBpbiBzb21lIHdheT8gT3IgcGVyaGFwcyBpdCBsZXZlcmFnZXMgb3RoZXIgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGUgaGFzaCB0YWJsZXMgZm9yIGxvb2t1cHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgdG8gc2VlIHRoZSBlbnRpcmUgcGljdHVyZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBiZSBhYmxlIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBhIHN5c3RlbS4KCk5leHQgdXAsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHNldHRpbmcgYW5kIGl0cyBkZXNjcmlwdGlvbi4gSXMgdGhlcmUgYSBkZWZhdWx0IHZhbHVlPyBJcyBpdCBzZXQgdG8gJiMzOTt5JiMzOTsgdG8gYnVpbGQgYXMgYSBtb2R1bGUgb3IgYXMgcGFydCBvZiB0aGUgY29yZT8gSSYjMzk7bGwgbG9vayBmb3IgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIOKAkyBob3BlZnVsbHkgaXQmIzM5O3MgY2xlYXIgYW5kIGNvbmNpc2UsIGV4cGxhaW5pbmcgdGhlIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSBob3BlIGl0IGluY2x1ZGVzIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGxpbWl0cyB0byBhcHBseSB0byBkaWZmZXJlbnQgcHJvdG9jb2xzLCB3aGljaCBjb3VsZCBiZSBUQ1Agb3IgVURQLiBJJiMzOTtkIGxpa2UgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIGhvdyB0aGUgbGltaXRzIGFyZSBlbmZvcmNlZCAtIG1heWJlIGEgcmF0ZSBsaW1pdGluZyBtZWNoYW5pc20/CgpGaW5hbGx5LCBsZXQmIzM5O3Mgc2VlIGhvdyBncmFudWxhciB0aGUgY29uZmlndXJhdGlvbiBpcy4gQ2FuIHdlIHNldCBsaW1pdHMgcGVyIElQLCBwZXIgcG9ydCwgcGVyIGFwcGxpY2F0aW9uPyBBcmUgdGhlcmUgYW55IGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlZ3JhdGlvbiBmb3Igc3RhdGVmdWwgZmlsdGVyaW5nPyBBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMTpcdGNvbmZpZyBORlRfQ09OTkxJTUlUXG4gNTEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcJiMzNDtcbiA1MTM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNTE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDUxNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbiA1MTY6XHRcdGhlbHBcbiA1MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Y29ubmxpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUxODpcdFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxuIDUxOTpcdFxuIDUyMDpcdGNvbmZpZyBORlRfTE9HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVwZW5kZW5jaWVzIGFuZCBPcGVuIHZTd2l0Y2g6IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIEkmIzM5O20gbWFraW5nIHNvbWUgY29uZmlndXJhdGlvbiB1cGRhdGVzLCBhbmQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBkZWFsaW5nIHdpdGggYE5GVF9DT05OTElNSVRgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBub3RlcyBjbGVhcmx5IHN0YXRlIGl0IHJlbGllcyBvbiBgTkZfQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UuIFNvLCB0aGUgYWN0aW9uIGl0ZW0gaGVyZSBpcyBjbGVhcjogZW5zdXJlIGBORlRfQ09OTkxJTUlUYCBpcyBkZWZpbml0ZWx5IGluY2x1ZGVkIGluIHRoZSBjb25maWd1cmF0aW9ucy4gRG9uJiMzOTt0IHdhbnQgYW55IHN1cnByaXNlcyBkdXJpbmcgZGVwbG95bWVudC4KCk5vdywgSSYjMzk7bSBhbHNvIHdvcmtpbmcgd2l0aCBgT1BFTlZTV0lUQ0hgIGFuZCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhZ2Fpbi4gSXQmIzM5O3MgZWFzeSB0byBnZXQgZGlzdHJhY3RlZCBhbmQgZm9yZ2V0IGEgc21hbGwgYnV0IGNydWNpYWwgZGV0YWlsIHRoYXQgY29tZXMgdXAgaW4gbXkgd29yayBhbGwgdGhlIHRpbWUuIERvdWJsZS1jaGVja2luZyBpcyBiZXR0ZXIgdGhhbiBzcGVuZGluZyB0aW1lIGRlYnVnZ2luZyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gT3BlbiB2U3dpdGNoIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIGJ1aWxkIHByb2Nlc3MsIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYE9QRU5WU1dJVENIYCBpdHNlbGYgaGluZ2VzIG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IG5ldHdvcmsgaW50ZXJhY3Rpb24gaXMgZnVuZGFtZW50YWwuIFRoZW4sIEkgc2VlIGBORl9DT05OVFJBQ0tgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgTkZfQ09OTlRSQUNLX09WU2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgT1ZTIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLCByZXByZXNlbnRlZCBieSBgTkZfQ09OTlRSQUNLX09WU2AsIGNhbiYjMzk7dCBldmVuIGJlIGNvbnNpZGVyZWQgdW5sZXNzIHRoZSBiYXNlIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQuIFRoaXMgd2hvbGUgYE5GX0NPTk5UUkFDS19PVlNgIHRoaW5nLCBzcGVjaWZpY2FsbHksIGNvbXBlbHMgdGhlIGNvbXBpbGF0aW9uIG9mIGBjb25udHJhY2sub2AuIEkgc2hvdWxkIHZlcmlmeSBgTkZfQ09OTlRSQUNLX09WU2AgaW4gYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29kZSBjb21waWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIE9wZW4gdlN3aXRjaC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIKSAmIzQzOz0gb3BlbnZzd2l0Y2gub1xuICAgNzpcdFxuICAgODpcdG9wZW52c3dpdGNoLXkgOj0gXFxcbiAgIDk6XHRcdGFjdGlvbnMubyBcXFxuICAxMDpcdFx0ZGF0YXBhdGgubyBcXFxuICAxMTpcdFx0ZHBfbm90aWZ5Lm8gXFxcbiAgMTI6XHRcdGZsb3cubyBcXFxuICAxMzpcdFx0Zmxvd19uZXRsaW5rLm8gXFxcbiAgMTQ6XHRcdGZsb3dfdGFibGUubyBcXFxuICAxNTpcdFx0bWV0ZXIubyBcXFxuICAxNjpcdFx0b3BlbnZzd2l0Y2hfdHJhY2UubyBcXFxuICAxNzpcdFx0dnBvcnQubyBcXFxuICAxODpcdFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcbiAgMTk6XHRcdHZwb3J0LW5ldGRldi5vXG4gIDIwOlx0XG4gIDIxOlx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxuICAyMjpcdG9wZW52c3dpdGNoLXkgJiM0Mzs9IGNvbm50cmFjay5vXG4gIDIzOlx0ZW5kaWZcbiAgMjQ6XHRcbiAgMjU6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0hfVlhMQU4pJiM0Mzs9IHZwb3J0LXZ4bGFuLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxODgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIGBjb25udHJhY2sub2AgaXMgb25seSBidWlsdCB3aGVuIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbmFibGUgYm90aCBgT1BFTlZTV0lUQ0hgIGFuZCBgTkZfQ09OTlRSQUNLYCBpbiBteSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHRvIGVuYWJsZSAqdGhpcyBzcGVjaWZpYyogcGF0Y2gsIHRoZSBwYXJ0IGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAsIEkgbmVlZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJ1dCB0aGF0JiMzOTtzIGhpZGRlbiwgaXNuJiMzOTt0IGl0PyBTbywgSSBoYXZlIHRvIGdvIHRocm91Z2ggYE5GVF9DT05OTElNSVRgIG9yIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCB0byBnZXQgdG8gaXQuIExldCYjMzk7cyB1c2UgYE5GVF9DT05OTElNSVRgIHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQga2VlcCB0aGluZ3MgY2xlYW5lci4KClNvLCBsZXQmIzM5O3MgaW5jbHVkZToKKiAgIGBPUEVOVlNXSVRDSGAKKiAgIGBORl9DT05OVFJBQ0tgCiogICBgTkZUX0NPTk5MSU1JVGAKClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIGBORlRfQ09OTkxJTUlUYCYjMzk7cyBkZXBlbmRlbmNpZXMuIEFoIHllcywgaXQgZGVwZW5kcyBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYC4gTGV0JiMzOTtzIHRocm93IGluIGBORVRGSUxURVJfQURWQU5DRURgIGFzIHdlbGwuCgpTbywgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCwgYXQgbGVhc3QgZm9yIG5vdywgYXJlOgoKKiAgIGBPUEVOVlNXSVRDSGAKKiAgIGBORl9DT05OVFJBQ0tgCiogICBgTkVURklMVEVSX0FEVkFOQ0VEYAoqICAgYE5GVF9DT05OTElNSVRgCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgYWN0dWFsbHkgdXNhYmxlIHRocm91Z2ggZ2VubDogWWVwLCBpdCYjMzk7cyByZWdpc3RlcmVkIGluIGBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseWAsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcF9jdF9saW1pdF9nZW5sX2ZhbWlseSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTY1NT1vdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHU4IGNtZCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTY2Ni1cdFx0XHRcdFx0aW5mby1cdTAwM2VzbmRfc2VxLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2Njc6XHRcdFx0XHRcdFx1MDAyNmRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5LCAwLCBjbWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2NjgtXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBvdnNfY3RfbGltaXRfbXVsdGljYXN0X2dyb3VwID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDAzLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMDQ6c3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDA1LVx0LmhkcnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0xMDA9c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKSB7IH1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTA1LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjEwNjpleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5O1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTEwNy0jZW5kaWZcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjgxPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgKiBjb25zdCBkcF9nZW5sX2ZhbWlsaWVzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4Ny0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNjg4Olx0XHUwMDI2ZHBfY3RfbGltaXRfZ2VubF9mYW1pbHksXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjg5LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3NAoJCQkJCQkJb3V0cHV0OiAyODgKCQkJCQkJCXRob3VnaHRzOiAxMDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgTGltaXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAgYXJlIGluZGVlZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMg4oCTIHRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgd2l0aGluIGBkcF9nZW5sX2ZhbWlsaWVzYCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBpbiBgZHBfcmVnaXN0ZXJfZ2VubGAuIFRoaXMgaXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLiBgb3ZzX2N0X2V4ZWN1dGVgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLCBzcGVjaWZpY2FsbHkgdmlhIGBvdnNfZXhlY3V0ZV9hY3Rpb25zYCB3aGVuIGEgY29ubnRyYWNrIGFjdGlvbiBpcyB0cmlnZ2VyZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYG92c19jdF9leGVjdXRlYAoqICAgYG92c19jdF9saW1pdF9jbWRfc2V0YAoqICAgYG92c19jdF9saW1pdF9jbWRfZGVsYAoqICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YAoKQW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uczoKCiogICBgT1BFTlZTV0lUQ0hgCiogICBgTkZfQ09OTlRSQUNLYAoqICAgYE5FVEZJTFRFUl9BRFZBTkNFRGAKKiAgIGBORlRfQ09OTkxJTUlUYAoKSXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMuIEkgY2hlY2tlZCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgY29uZmlybWVkIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBidXQgaXQmIzM5O3MgKm5vdCogZGlyZWN0bHkgdXNlci1jb25maWd1cmFibGUuIEluc3RlYWQsIGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBORlRfQ09OTkxJTUlUYCAoYW5kIGBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUYCkuICBUaGVyZWZvcmUsIGVuYWJsaW5nIGBORlRfQ09OTkxJTUlUYCBpcyB0aGUgY29ycmVjdCBwYXRoIGZvciBlbmFibGluZyBjb25udHJhY2sgbGltaXQgZnVuY3Rpb25hbGl0eS4KCkJleW9uZCB0aGF0LCB0aGUgYmFzaWMgcmVxdWlyZW1lbnRzIGFyZTogYElORVRgIGlzIGdlbmVyYWxseSBlbmFibGVkLCBgTkZfQ09OTlRSQUNLYCBpcyBlc3NlbnRpYWwsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBuZWVkZWQgZm9yIGBORlRfQ09OTkxJTUlUYC4KClJldmlld2luZyB0aGUgcGF0Y2gsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyByZWxhdGVkIGZ1bmN0aW9uczoKCiogICBgb3ZzX2N0X2xpbWl0X2luaXRgCiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnRgCiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoYAoqICAgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAKKiAgIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgCiogICBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YAoqICAgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgCiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YAoKSSBjb25maXJtZWQgdGhhdCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCBpcyBjYWxsZWQgYnkgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAgYnkgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYnkgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYW5kIGBvdnNfY3RfY2hlY2tfbGltaXRgIGJ5IGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggaXMgc3Vic2VxdWVudGx5IGNhbGxlZCBieSBgb3ZzX2N0X2V4ZWN1dGVgLiBUaGlzIHByb3ZpZGVzIG1lIHRoZSBjb3JyZWN0IGVudHJ5IHBvaW50cy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZWZhY3RvcmluZyB0aGUgY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgaW4gT3BlbiB2U3dpdGNoIHRvIHV0aWxpemUgUkNVIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHN0cnVjdHVyZS4gVGhpcyBtaXRpZ2F0ZXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBuZXRucyB0ZWFyZG93biBieSBzcGxpdHRpbmcgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzLCBlbnN1cmluZyBhbiBSQ1UgZ3JhY2UgcGVyaW9kLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHRvIHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE9wZW4gdlN3aXRjaCBuZXR3b3JraW5nIHN1YnN5c3RlbS4KCkdpdmVuIHRoZSBpZGVudGlmaWVkIGNvbmZpZ3VyYXRpb25zIGFuZCBlbnRyeSBwb2ludHMsIHRoaXMgY29kZSBpcyAqZGVmaW5pdGVseSogZnV6emFibGUuICBUaGUgZnV6emluZyBzdHJhdGVneSBzaG91bGQgY2VudGVyIG9uIGJvdGggdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyAoc2V0dGluZywgZ2V0dGluZywgZGVsZXRpbmcgbGltaXRzKSBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB3aGVyZSBsaW1pdHMgYXJlIGNoZWNrZWQuCgpGaW5hbGx5LCBJIGNoZWNrZWQgYG92c19jdF9saW1pdF9jbWRfc2V0YCB0byBzZWUgaWYgaXQgd2FzIHN0YXRpYyBvciBpbmxpbmVkLiBTaW5jZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBzdHJ1Y3QsIGl0IHdpbGwgKm5vdCogYmUgaW5saW5lZC4gVGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBpbmxpbmUgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHBhcnQgb2YgYSBmdW5jdGlvbiBwb2ludGVyIGFycmF5LiBJdCB3aWxsIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MsIGFuZCBpcyB0aHVzIHBlcmZlY3RseSBzYWZlIHRvIGluY2x1ZGUuCgpUaW1lIHRvIGZlZWQgdGhpcyBpbnRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GVF9DT05OTElNSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GVF9DT05OTElNSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsaWZldGltZSBpc3N1ZSB3aXRoIGBjdF9saW1pdF9pbmZvYCBpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgcHJvcGVyIFJDVSBwcm90ZWN0aW9uIChgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4pIGFuZCBzZXBhcmF0aW5nIHRoZSB0ZWFyZG93biBpbnRvIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBoYXNlcyB0byByZXNwZWN0IFJDVSBncmFjZSBwZXJpb2RzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIGFuZCB3aGlsZSBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgICh3aGljaCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSksIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgaXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgKGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgKSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29udGFpbnMgbm8gcGFkZGluZy4gVGhlIGJ1Z3MgcHJldmVudGVkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCmluZGV4IDM4YzZmMzQ3NzZjMjguLjhjYTViYjE1NWVlYjkgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNTUgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiYjNDM7c3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBDVCBsaW1pdCBzdGF0ZSBtdXN0IGJlIGRldGFjaGVkIGJ5IG92c19jdF9saW1pdF9leGl0X3N0YXJ0KCkgYW5kIGFuCiYjNDM7ICogUkNVIGdyYWNlIHBlcmlvZCBtdXN0IGVsYXBzZSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBydW5zLiAgVGhlIHBlcm5ldCBjb3JlCiYjNDM7ICogZ3VhcmFudGVlcyB0aGUgZ3JhY2UgcGVyaW9kIGJldHdlZW4gdGhlIC5wcmVfZXhpdCBhbmQgLmV4aXQgY2FsbGJhY2tzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTsKIAlpbnQgaTsKIAomIzQzOwlpZiAoIWluZm8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLSZndDtkYXRhKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwpAQCAtMTYyNiw3ICYjNDM7MTY0NSw3IEBAIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiAJCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OwogCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3RfbGltaXQsIG5leHQsIGhlYWQsIGhsaXN0X25vZGUpCi0JCQlrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7CiYjNDM7CQkJa2ZyZWUoY3RfbGltaXQpOwogCX0KIAlrZnJlZShpbmZvLSZndDtsaW1pdHMpOwogCWtmcmVlKGluZm8pOwpAQCAtMTY2NSwxMiAmIzQzOzE2ODQsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE2NzksNiAmIzQzOzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKApAQCAtMTY5NSw2ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJY3RfbGltaXQtJmd0O2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CkBAIC0xNzA5LDEyICYjNDM7MTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTcyMyw2ICYjNDM7MTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNzMwLDYgJiM0MzsxNzU0LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3NzMsNiAmIzQzOzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCAmYW1wO3pvbmVfbGltaXQpOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLApAQCAtMTc5NiwxMiAmIzQzOzE4MjIsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJCSZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKLQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpOwogCiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCQluZXQsIGluZm8tJmd0O2RhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTgxNiw2ICYjNDM7MTg0MCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KQpAQCAtMTgyOCwxOSAmIzQzOzE4NTMsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCWhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7CiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tJmd0O2RhdGEsCiAJCQkJY3RfbGltaXQtJmd0O3pvbmUsIGN0X2xpbWl0LSZndDtsaW1pdCwgcmVwbHkpOwogCQkJaWYgKGVycikKLQkJCQlnb3RvIGV4aXRfZXJyOwomIzQzOwkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCi1leGl0X2VycjoKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODUwLDcgJiM0MzsxODcyLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsCkBAIC0xODYzLDggJiM0MzsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTg4NCw3ICYjNDM7MTkwNSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLApAQCAtMTg5Nyw4ICYjNDM7MTkxNyw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE5MTgsNyAmIzQzOzE5MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULApAQCAtMTkzMiwxOCAmIzQzOzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJaWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJbmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLAogCQkJcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9IGVsc2UgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbywKIAkJCQkJCSAgICAgIHJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9lcnI7CiAKIAlubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7CiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwpAQCAtMjAxOCwxMiAmIzQzOzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgdGhlIFJDVS1wcm90ZWN0ZWQKJiM0MzsgKiBjdF9saW1pdF9pbmZvIGFuZCBzdG9yZXMgaXQgaW4gb3ZzX25ldC0mZ3Q7Y3RfZXhpdF9kYXRhIGZvcgomIzQzOyAqIG92c19jdF9leGl0X2ZpbmlzaCgpIHRvIGNvbXBsZXRlIHRoZSB0ZWFyZG93biBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKQomIzQzO3sKJiM0MzsjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKJiM0MzsJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwomIzQzOwomIzQzOwlvdnNfbmV0LSZndDtjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ29tcGxldGVzIHRoZSBDVCBsaW1pdCB0ZWFyZG93bi4gIFRoZSBwZXJuZXQgY29yZSBndWFyYW50ZWVzIGFuIFJDVQomIzQzOyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmQKJiM0MzsgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwogCiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpOwomIzQzOwlvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTsKICNlbmRpZgogCiAJaWYgKG92c19uZXQtJmd0O3h0X2xhYmVsKQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCmluZGV4IDMxN2U1MjVjOGExMTMuLmE1MTZlNWJhZTRmMzQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKQEAgLTE0LDcgJiM0MzsxNCw4IEBAIGVudW0gb3ZzX2tleV9hdHRyOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKQogaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7Ci12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKik7CiYjNDM7dm9pZCBvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7CiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTsKIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKiwKQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpOwogCiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIGludCBhdHRyKQogewpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBkZWQ0NmQ5OTNhNGVkLi4zNjJlMzIyZmI0MWY0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMjc1NywxNyAmIzQzOzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfcHJlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiYjNDM7ewomIzQzOwlvdnNfbG9jaygpOwomIzQzOwlvdnNfY3RfZXhpdF9zdGFydChkbmV0KTsKJiM0MzsJb3ZzX3VubG9jaygpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiB7Ci0Jc3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhkbmV0LCBvdnNfbmV0X2lkKTsKIAlzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDsKJiM0MzsJc3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7CiAJc3RydWN0IG5ldCAqbmV0OwogCUxJU1RfSEVBRChoZWFkKTsKIAogCW92c19sb2NrKCk7CiAKLQlvdnNfY3RfZXhpdChkbmV0KTsKJiM0MzsJb3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtJmd0O2N0X2V4aXRfZGF0YSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIGRwX25leHQsICZhbXA7b3ZzX25ldC0mZ3Q7ZHBzLCBsaXN0X25vZGUpCiAJCV9fZHBfZGVzdHJveShkcCk7CkBAIC0yNzkxLDYgJiM0MzsyNzk4LDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHsKIAkuaW5pdCA9IG92c19pbml0X25ldCwKJiM0MzsJLnByZV9leGl0ID0gb3ZzX3ByZV9leGl0X25ldCwKIAkuZXhpdCA9IG92c19leGl0X25ldCwKIAkuaWQgICA9ICZhbXA7b3ZzX25ldF9pZCwKIAkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX25ldCksCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCmluZGV4IDY5NjY0MGU4OGZhN2UuLjQ0NjU1M2M1MWMzMGUgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCkBAIC0xNjQsNyAmIzQzOzE2NCwxMCBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KJiM0MzsgKiBAY3RfZXhpdF9kYXRhOiBDVCBsaW1pdCBzdGF0ZSBkZXRhY2hlZCBhdCAucHJlX2V4aXQsIGZyZWVkIGF0IC5leGl0LgogICogQHh0X2xhYmVsOiBXaGV0aGVyIGNvbm5sYWJsZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBuZXR3b3JrIG9yIG5vdC4KICAqLwogc3RydWN0IG92c19uZXQgewpAQCAtMTcyLDcgJiM0MzsxNzUsOCBAQCBzdHJ1Y3Qgb3ZzX25ldCB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlOwogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCi0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfZXhpdF9kYXRhOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIGNvbm50cmFjayBjb2RlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgb2YgYGN0X2xpbWl0X2luZm9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBnaXZlbiB0aGUgc2NvcGUgKGZvdXIgZmlsZXMpIGFuZCB0aGUgY29yZSBuYXR1cmUgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBzZWUgZm9yIGNvbmN1cnJlbmN5LiBUaGV5JiMzOTtyZSB1c2luZyBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCwgYW5kIGBvdnNsX2RlcmVmZXJlbmNlYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXkmIzM5O3JlIGFpbWluZyBmb3IgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgcmVhZHMsIGFuZCBjYXJlZnVsbHkgbWFuYWdpbmcgd3JpdGVzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHdpdGggYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGVybmV0IGNhbGxiYWNrcyBpbmRpY2F0ZXMgdGhleSYjMzk7cmUgY2FyZWZ1bGx5IG1hbmFnaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlLCB3aGljaCBpcyBhbHNvIGEgZ29vZCBzaWduLiBMb29rcyBsaWtlIHRoZXkgZml4ZWQgc29tZSBSQ1UgcmVhZCBsb2NrIHBsYWNlbWVudHMgdG9vLiBTbWFydC4KCk5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHksIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkgc3RhcnQgdG8gZGlnIGluLiBMZXQmIzM5O3Mgc2VlLi4uIFRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIGFsbG9jYXRpb24sIHdoaWNoIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnNwZWN0aW9uLiBUaGUgb2xkIGNvZGUgZGlyZWN0bHkgYWxsb2NhdGVkIHRvIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYC4gVGhlIG5ldyBjb2RlIGxvb2tzIGxpa2UgaXQgYWxsb2NhdGVzIGEgbG9jYWwgYGluZm9gIHZhcmlhYmxlLCBpbml0aWFsaXplcyBpdCwgYW5kIHRoZW4gYXNzaWducyBpdCB0byBgb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mb2AuCgpPa2F5LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHVzZSBvZiBga21hbGxvY19vYmpgLiBJJiMzOTtsbCBhc3N1bWUgdGhhdCYjMzk7cyBqdXN0IGEgbWFjcm8gZm9yIGBrbWFsbG9jKHNpemVvZihvYmopLCBHRlBfS0VSTkVMKWAgZm9yIG5vdywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZXkmIzM5O3JlIGluaXRpYWxpemluZyBgaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdGAsIGFsbG9jYXRpbmcgYGluZm8tJmd0O2xpbWl0c2AsIGFuZCBpbml0aWFsaXppbmcgdGhvc2UgaGFzaCBidWNrZXRzLiBUaGV5IGFsc28gaW5pdGlhbGl6ZSBgaW5mby0mZ3Q7ZGF0YWAuIFNvIGZhciwgc28gZ29vZCwgaXQgKmxvb2tzKiBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpZWxkcyBpbiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCB0aGF0IGFyZW4mIzM5O3QgYmVpbmcgZXhwbGljaXRseSBzZXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIGRvbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MsIGJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhIHN1YnRsZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaW4gY29ubnRyYWNrIGNvZGUhIFRoaXMgbmVlZHMgYSB2ZXJ5IGNhcmVmdWwgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG92c19jdF9saW1pdF9pbmZvIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTg2PXN0cnVjdCBvdnNfY3RfbGltaXQge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05My1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5NDpzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8ge1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk1LVx0dTMyIGRlZmF1bHRfbGltaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2A6CgoqKkRpdmluZyBpbnRvIHRoZSBgb3ZzX2N0X2xpbWl0X2luZm9gIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgT1ZTIGNvbm50cmFjayBwdXp6bGUsIHJpZ2h0PyBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBjb250ZXh0cyB3aGVyZSBJJiMzOTtkIGVuY291bnRlciB0aGlzIOKAkyBsaWtlbHkgZGVlcCB3aXRoaW4gdGhlIGNvbm50cmFjayBtb2R1bGUgaXRzZWxmLCBwZXJoYXBzIHdoZW4gY29uZmlndXJpbmcgb3IgZXZhbHVhdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gSXQmIzM5O3MgdXNlZCB0byBzdG9yZSB0aGUgc3BlY2lmaWNzIG9mIHRoZSBsaW1pdHMgYXBwbGllZCB0byBjb25uZWN0aW9ucywgSSBhc3N1bWUuIEkgbmVlZCB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiB0aG91Z2gsIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGZpZWxkcyBhcmUgcHJlc2VudC4gV2hhdCYjMzk7cyB0cmFja2VkPyBJcyB0aGlzIHBlci1mbG93LCBwZXItem9uZSwgb3Igc29tZXRoaW5nIGVsc2U/IElzIGl0IGEgY29tYmluYXRpb24/IEkmIzM5O20gZ3Vlc3NpbmcgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGVyZSBhcmUgY291bnRlcnMgZm9yIHRoaW5ncyBsaWtlIG51bWJlciBvZiBhY3RpdmUgZmxvd3MsIHBlcmhhcHMgc29tZSB0aW1lc3RhbXBzIHJlbGF0ZWQgdG8gaG93IGxvbmcgdGhlIGxpbWl0IGhhcyBiZWVuIGFjdGl2ZSwgYW5kIG1heWJlIGV2ZW4gZmxhZ3MgaW5kaWNhdGluZyB0aGUgY3VycmVudCBzdGF0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxpbWl0IOKAkyAmIzM0O292ZXIgbGltaXQmIzM0OywgJiMzNDthcHByb2FjaGluZyBsaW1pdCwmIzM0OyAmIzM0O2NsZWFyZWQmIzM0OyBhbmQgc28gb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZpZWxkcyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxpbWl0IGFwcGxpY2F0aW9uLCBwb2xpY3ksIGFuZCBob3cgdG8gYmVzdCBtYW5hZ2UgaXQgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0dTE2IHpvbmU7XG4gIDkxOlx0XHR1MzIgbGltaXQ7XG4gIDkyOlx0fTtcbiAgOTM6XHRcbiAgOTQ6XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8ge1xuICA5NTpcdFx0dTMyIGRlZmF1bHRfbGltaXQ7XG4gIDk2Olx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqbGltaXRzO1xuICA5NzpcdFx0c3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpkYXRhO1xuICA5ODpcdH07XG4gIDk5Olx0XG4gMTAwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X2xpbWl0X3BvbGljeVtPVlNfQ1RfTElNSVRfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4gMTAxOlx0XHRbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0gPSB7IC50eXBlID0gTkxBX05FU1RFRCwgfSxcbiAxMDI6XHR9O1xuIDEwMzpcdCNlbmRpZlxuIDEwNDpcdFxuIDEwNTpcdHN0YXRpYyBib29sIGxhYmVsc19ub256ZXJvKGNvbnN0IHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscyAqbGFiZWxzKTtcbiAxMDY6XHRcbiAxMDc6XHRzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKTtcbiAxMDg6XHRcbiAxMDk6XHRzdGF0aWMgdTE2IGtleV90b19uZnByb3RvKGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBMaW1pdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBuZXRucyAobmV0d29yayBuYW1lc3BhY2UpIGV4aXQgb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gY29ubmVjdGlvbiB0cmFja2luZyBkYXRhLiBUaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUgcHJvcGVyIHVzZSBvZiBSQ1UgcHJpbWl0aXZlczogYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBgcmN1X3JlcGxhY2VfcG9pbnRlcmAsIGFuZCBzbyBvbi4gVGhpcyBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCBmb3IgaGFuZGxpbmcgY29uY3VycmVudCBhY2Nlc3MgYW5kIHByb3RlY3RpbmcgZGF0YSBkdXJpbmcgdXBkYXRlcyBhbmQgZGVsZXRpb25zIHdpdGhpbiBhbiBSQ1UgY29udGV4dC4KCkkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHdoaWNoIGFyZSBwcm9iYWJseSB0aGVyZSB0byBtYW5hZ2UgdGhlIFJDVSBncmFjZSBwZXJpb2RzIGVmZmVjdGl2ZWx5IGR1cmluZyBhIG5ldG5zIHRlYXJkb3duLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiBhYm91dCB0aGUgbmV0bnMgZXhpdCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBwcmV2ZW50IGEgc2NlbmFyaW8gd2hlcmUgc29tZXRoaW5nIGlzIGZyZWVkIHdoaWxlIGl0JiMzOTtzIHN0aWxsIGJlaW5nIGFjY2Vzc2VkLCBvciB3aGVyZSBhIHBvaW50ZXIgYmVjb21lcyBOVUxMIGJlZm9yZSBpdHMgdXNlLiBHb29kLCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdCB0byBzZWUuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgY2xlYXIsIHdlbGwtdW5kZXJzdG9vZCBwcm9ibGVtLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBjYXRjaGluZyB0aGUgZXJyb3JzLCBhbmQgdGhhdCYjMzk7cyBnb29kIHZhbGlkYXRpb24gdG9vLgoKSSYjMzk7dmUgY2hlY2tlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXM6IGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AsIGFuZCBgZGF0YWAuIEFsbCB0aHJlZSBhcmUgaW5pdGlhbGl6ZWQgaW4gYG92c19jdF9saW1pdF9pbml0YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWRpbmcgdG8gdnVsbmVyYWJpbGl0aWVzIGlzIGEgY29uc3RhbnQgY29uY2Vybi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgcGFkZGluZywgc28gdGhhdCYjMzk7cyBhbm90aGVyIGNoZWNrLgoKSSBkaWQgYSBxdWljayByZXZpZXcgb2YgdGhlIGZ1bmN0aW9ucyBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCBhbmQgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgLCBhbmQgdGhlIHBhdGNoIG5vdyBjYWxscyB0aGVtIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgZG9pbmcgYW55dGhpbmcgc25lYWt5IGxpa2UgcGFzc2luZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBidXQgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaXMgb25seSBhYm91dCByZWFkaW5nIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIGRhdGEsIGl0IHNvdW5kcyBsaWtlIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGl0IGlzbiYjMzk7dCBzZW5kaW5nIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIEFsd2F5cyBnb29kIHRvIGRvdWJsZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODA6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc4MTpcdH1cbjE3ODI6XHRcbjE3ODM6XHRzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbjE3ODQ6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqZGF0YSxcbjE3ODU6XHRcdFx0XHRcdFx0IHUxNiB6b25lX2lkLCB1MzIgbGltaXQsXG4xNzg2Olx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG4xNzg3Olx0e1xuMTc4ODpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIGN0X3pvbmU7XG4xNzg5Olx0XHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtcbjE3OTA6XHRcdHUzMiBjb25uY291bnRfa2V5ID0gem9uZV9pZDtcbjE3OTE6XHRcbjE3OTI6XHRcdHpvbmVfbGltaXQuem9uZV9pZCA9IHpvbmVfaWQ7XG4xNzkzOlx0XHR6b25lX2xpbWl0LmxpbWl0ID0gbGltaXQ7XG4xNzk0Olx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgem9uZV9pZCwgTkZfQ1RfREVGQVVMVF9aT05FX0RJUiwgMCk7XG4xNzk1Olx0XG4xNzk2Olx0XHR6b25lX2xpbWl0LmNvdW50ID0gbmZfY29ubmNvdW50X2NvdW50X3NrYihuZXQsIE5VTEwsIDAsIGRhdGEsXG4xNzk3Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjb25uY291bnRfa2V5KTtcbjE3OTg6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIFN0YWNrIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWU6IGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBnb2luZyB0byBjYXVzZSBhbnkgcHJvYmxlbXMgbGF0ZXIgb24/IFRoaXMgbWVhbnMgdGhlIGRhdGEgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0cmFjZSBteSB0aG91Z2h0cyBmdXJ0aGVyLCBhcyBJIGJlbGlldmUgdGhlIGNvZGUgY291bGQgcG9zc2libHkgaGF2ZSBhIHByb2JsZW0uCgpOb3csIGl0IGluaXRpYWxpemVzIGB6b25lX2xpbWl0LnpvbmVfaWRgIGFuZCBgem9uZV9saW1pdC5saW1pdGAsIHRoZW4gY2FsbHMgYG5mX2N0X3pvbmVfaW5pdGAuIFNvLCB0aGUgYHN0cnVjdGAgaXRzZWxmIGhhcyBoYWQgbWVtYmVycyBpbml0aWFsaXplZCB3aXRoaW4gaXQsIGJ1dCBpcyB0aGUgKmVudGlyZSogc3RydWN0IHRydWx5IGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkPyBTcGVjaWZpY2FsbHksIEkgc2VlIGB6b25lX2xpbWl0LmNvdW50YCBiZWluZyBwb3B1bGF0ZWQgKmFmdGVyKiB0aGUgaW5pdGlhbCBhc3NpZ25tZW50cy4gVGhlIGNyaXRpY2FsIGxpbmUgdG8gZXhhbWluZSBpcyBgcmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgJmFtcDt6b25lX2xpbWl0KTtgLiBUaGF0IGBubGFfcHV0X25vaGRyYCBmdW5jdGlvbiwgaXQmIzM5O3MgZXhwZWN0aW5nIGEgZnVsbHkgcG9wdWxhdGVkIGBzdHJ1Y3RgIC0gb3IgYXQgbGVhc3QsIHRoYXQmIzM5O3MgbXkgYXNzdW1wdGlvbiwgYW5kIGl0JiMzOTtzIGNlcnRhaW5seSBiZXN0IHByYWN0aWNlLiBTbyB0aGUgbWFpbiBwcm9ibGVtIGhlcmUgaXMgaWYgYG5sYV9wdXRfbm9oZHJgIHdpbGwgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1iZXJzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBgc2l6ZW9mKHpvbmVfbGltaXQpYCBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcsIGFuZCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0IGlzIGJlaW5nIGV4cG9zZWQuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG1lbWJlcnMgaW4gYHN0cnVjdCBvdnNfem9uZV9saW1pdGAgdGhhdCBtYXkgcmVxdWlyZSBpbml0aWFsaXphdGlvbiBieSBgbmZfY3Rfem9uZV9pbml0YC4gSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgcmVseWluZyBvbiB0aGUgY29tcGlsZXIgdG8gaW5pdGlhbGl6ZSBhbnkgdW5pbml0aWFsaXplZCBwYXJ0cyBvZiB0aGUgYHN0cnVjdGAsIGFzIHRoYXQgY291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG92c196b25lX2xpbWl0IFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oPTExNzg9ZW51bSBvdnNfY3RfbGltaXRfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4Ny1cbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oOjExODg6c3RydWN0IG92c196b25lX2xpbWl0IHtcbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oLTExODktXHRpbnQgem9uZV9pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggS2VybmVsIEhlYWRlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBPcGVuIHZTd2l0Y2gga2VybmVsIGludGVncmF0aW9uLCBhbmQgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFyZSBwcm9iYWJseSBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmhgLiBOb3csIHRoZSB0cmlja3kgcGFydCBpcyBwaW5wb2ludGluZyB0aGUgZXhhY3QgbG9jYXRpb24gd2l0aGluIHRoYXQgaGVhZGVyLiBCYXNlZCBvbiBwcmlvciBleHBlcmllbmNlIGFuZCB0aGUgbmF0dXJlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE4OCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIGZvY3VzIG15IGluaXRpYWwgc2NhbiB0aGVyZSwgbG9va2luZyBmb3Igc3RydWN0dXJlcywgZW51bXMsIG9yIG1hY3JvcyB0aGF0IHNlZW0gcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHJlbGF0ZWQgdG8gdGhlIG92cyBrZXJuZWwgbW9kdWxlIHRoYXQgaXMgY29tbXVuaWNhdGluZyB0byB1c2VyIHNwYWNlLiBMaW5lIDExODggaXMgZ29pbmcgdG8gYmUgbXkgYW5jaG9yIHRvIHN0YXJ0LiBJJiMzOTtsbCB6b29tIGluIHF1aWNrbHksIGxvb2tpbmcgZm9yIGZhbWlsaWFyIHBhdHRlcm5zIGFuZCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTg1Olx0XG4xMTg2Olx0I2RlZmluZSBPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUgLTFcbjExODc6XHRcbjExODg6XHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQge1xuMTE4OTpcdFx0aW50IHpvbmVfaWQ7XG4xMTkwOlx0XHRfX3UzMiBsaW1pdDtcbjExOTE6XHRcdF9fdTMyIGNvdW50O1xuMTE5MjpcdH07XG4xMTkzOlx0XG4xMTk0Olx0ZW51bSBvdnNfZGVjX3R0bF9hdHRyIHtcbjExOTU6XHRcdE9WU19ERUNfVFRMX0FUVFJfVU5TUEVDLFxuMTE5NjpcdFx0T1ZTX0RFQ19UVExfQVRUUl9BQ1RJT04sXHQvKiBOZXN0ZWQgc3RydWN0IG5sYXR0ciAqL1xuMTE5NzpcdFx0X19PVlNfREVDX1RUTF9BVFRSX01BWFxuMTE5ODpcdH07XG4xMTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgem9uZV9pZGAsIGBsaW1pdGAsIGFuZCBgY291bnRgLCBhbGwgaW50ZWdlcnMsIGFsbCA0IGJ5dGVzIGVhY2gsIGFkZGluZyB1cCB0byAxMiBieXRlcyB0b3RhbC4gTm8gcGFkZGluZyB0byB3b3JyeSBhYm91dCwgYXNzdW1pbmcgdGhlIHN0YW5kYXJkIDQtYnl0ZSBhbGlnbm1lbnQsIHdoaWNoIGlzIGNvbXBsZXRlbHkgZXhwZWN0ZWQuIFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpbiB0aGlzIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZDogYHpvbmVfaWRgIGhhcyBhIHZhbHVlLCBgbGltaXRgIGhhcyBhIHZhbHVlLCBgY291bnRgIGhhcyBhIHZhbHVlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzdHJ1Y3R1cmUgaXMgY29ycmVjdGx5IHBvcHVsYXRlZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCB0b3VjaCB0aGUgc3RydWN0dXJlJiMzOTtzIGZpZWxkcyBvciBpbml0aWFsaXphdGlvbjsgaXQgb25seSBtb2RpZmllcyB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGFyb3VuZCBpdCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgc29ydCBvZiBjb25jdXJyZW5jeSBvciBSQ1UgaXNzdWUuCgpUaGUgZmFjdCB0aGF0IHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBsb2NraW5nIHN1Z2dlc3RzIGl0JiMzOTtzIGFpbWluZyB0byBmaXggYSByYWNlIGNvbmRpdGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNvbWV0aGluZyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkIGZsYWcuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGRpZmYgYWdhaW46CgpgYGBjCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKYGBgCgpIYW5nIG9uIGEgc2Vjb25k4oCmIGBrbWFsbG9jX29iamA/IFRoYXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYW4gT3BlbiB2U3dpdGNoLXNwZWNpZmljIG1hY3JvLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBPcGVuIHZTd2l0Y2ggc291cmNlIG9yIGluY2x1ZGUgZmlsZXMgdG8gZmluZCBvdXQgd2hhdCBga21hbGxvY19vYmpgIGFjdHVhbGx5IGRvZXMuIEl0JiMzOTtzIHByb2JhYmx5IGEgd3JhcHBlciBhcm91bmQgYGttYWxsb2NgIHRvIGhhbmRsZSBvYmplY3QgYWxsb2NhdGlvbiwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZSBoZXJlIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBrbWFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTIwLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEyMTojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTIyLVx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTMyLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzMzojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzQtXHRfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCBDT1VOVClcbi0tXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxubGliL2RlY29tcHJlc3NfdW54ei5jOjE2NDojZGVmaW5lIGttYWxsb2Nfb2JqKHR5cGUpIG1hbGxvYyhzaXplb2YodHlwZSkpXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcbi0tXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg9NjM9c3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX2FycmF5KHVuc2lnbmVkIG4sIHNpemVfdCBzLCBnZnBfdCBnZnApXG4tLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjY4OiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02OS1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo3MTojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03Mi1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDEwCgkJCQkJCQlvdXRwdXQ6IDI0NQoJCQkJCQkJdGhvdWdodHM6IDk1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBhbmQgc2VlIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgZXhwb3NlZC4gYGttYWxsb2Nfb2JqYCwgYXMgSSByZWNhbGwsIHVzZXMgYGttYWxsb2NgLCB3aGljaCBkb2VzbiYjMzk7dCB6ZXJvIG1lbW9yeS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpJIHNlZSBgaW5mb2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iamAsIGFuZCB0aGVuIGl0cyBmaWVsZHMgKGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AsIGBkYXRhYCkgYXJlIGluaXRpYWxpemVkLiBJIGFsc28gaGFkIGEgcXVpY2sgbG9vayBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXRzZWxmIHRvIGNoZWNrIGZvciBhbnkgcGFkZGluZyBpc3N1ZXMsIHNwZWNpZmljYWxseSB0aGF0IDQtYnl0ZSBwYWRkaW5nIGFmdGVyIGBkZWZhdWx0X2xpbWl0YCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaXMgdGhlcmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGlzIHN0cnVjdHVyZSBldmVuIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gTm8sIGl0JiMzOTtzIGludGVybmFsLiBMaW1pdHMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCwgd2hpY2ggYWxsb2NhdGVzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3RydWN0dXJlLCBgc3RydWN0IG92c196b25lX2xpbWl0YCwgb24gdGhlIHN0YWNrLiBgc3RydWN0IG92c196b25lX2xpbWl0YCBoYXMgbm8gcGFkZGluZy4gU28gdGhlIHBhZGRpbmcgaW4gYG92c19jdF9saW1pdF9pbmZvYCBkb2VzbiYjMzk7dCBtYXR0ZXIgZnJvbSBhIHVzZXItc3BhY2UgcGVyc3BlY3RpdmUuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBhYm91dCBjb25jdXJyZW5jeSBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBSQ1UuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBkaXJlY3QgYGttYWxsb2NgIGFsbG9jYXRpb24gZm9yIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYCwgYW5kIGxhdGVyIGZyZWVkIGl0IGluIGBvdnNfY3RfbGltaXRfZXhpdGAuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBpbmZvYCwgaW5pdGlhbGl6ZXMgaXQgZnVsbHksIGFuZCB0aGVuIHVzZXMgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gc2FmZWx5IG1ha2UgaXQgYXZhaWxhYmxlLiBBY2Nlc3MgaXMgbm93IGRvbmUgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAgYW5kIGBvdnNsX2RlcmVmZXJlbmNlYC4gVGhpcyBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4sIHdoaWNoIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLgoKVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLCB0aGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4KClNvLCB0aGUgYnVncyBiZWluZyBhZGRyZXNzZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIFJDVS4gVGhlcmUmIzM5O3Mgbm90aGluZyBpbiB0aGlzIHBhdGNoIHRoYXQgc2NyZWFtcyAmIzM0O0tNU0FOJiMzNDsgYXQgbWUuIEl0JiMzOTtzIGEgY2xlYW4gUkNVIGZpeC4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cyB0byBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgcmVhc29uaW5nIEkganVzdCBsYWlkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIGlzc3VlIHdpdGggYGN0X2xpbWl0X2luZm9gIGluIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHByb3RlY3Rpb24gKGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLikgYW5kIHNlcGFyYXRpbmcgdGhlIHRlYXJkb3duIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGhhc2VzIHRvIHJlc3BlY3QgUkNVIGdyYWNlIHBlcmlvZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgYW5kIHdoaWxlIGl0IGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBpdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZSB0aGF0IGlzIHNlbnQgdG8gdXNlciBzcGFjZSAoYHN0cnVjdCBvdnNfem9uZV9saW1pdGApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb250YWlucyBubyBwYWRkaW5nLiBUaGUgYnVncyBwcmV2ZW50ZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIGlzc3VlIHdpdGggYGN0X2xpbWl0X2luZm9gIGluIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHByb3RlY3Rpb24gKGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLikgYW5kIHNlcGFyYXRpbmcgdGhlIHRlYXJkb3duIGludG8gYC5wcmVfZXhpdGAgYW5kIGAuZXhpdGAgcGhhc2VzIHRvIHJlc3BlY3QgUkNVIGdyYWNlIHBlcmlvZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSwgYW5kIHdoaWxlIGl0IGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jX29iamAgKHdoaWNoIGRvZXMgbm90IHplcm8gbWVtb3J5KSwgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBpdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZSB0aGF0IGlzIHNlbnQgdG8gdXNlciBzcGFjZSAoYHN0cnVjdCBvdnNfem9uZV9saW1pdGApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBjb250YWlucyBubyBwYWRkaW5nLiBUaGUgYnVncyBwcmV2ZW50ZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo0OS4zMDk4MzY5MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA0OTUyMzI1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORlRfQ09OTkxJTUlUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsaWZldGltZSBpc3N1ZSB3aXRoIGBjdF9saW1pdF9pbmZvYCBpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgcHJvcGVyIFJDVSBwcm90ZWN0aW9uIChgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4pIGFuZCBzZXBhcmF0aW5nIHRoZSB0ZWFyZG93biBpbnRvIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBoYXNlcyB0byByZXNwZWN0IFJDVSBncmFjZSBwZXJpb2RzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIGFuZCB3aGlsZSBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgICh3aGljaCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSksIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgaXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgKGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgKSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29udGFpbnMgbm8gcGFkZGluZy4gVGhlIGJ1Z3MgcHJldmVudGVkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo0OS4zMDk4NDM0NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDc1NTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyMmM3OTVlYTAyNTg1NGU5YmNiNjg2OTYwMWU5YWVjMWIzMmQxZjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDk6NTU6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuaW5kZXggMzhjNmYzNDc3NmMyOC4uOGNhNWJiMTU1ZWViOSAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5AQCAtOTMzLDEwICs5MzMsMTQgQEAgc3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4tXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbiBcXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xcbiBcXHR1MzIgY29ubmNvdW50X2tleTtcXG4gXFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmICghY3RfbGltaXRfaW5mbylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRjb25uY291bnRfa2V5ID0gaW5mby1cXHUwMDNlem9uZS5pZDtcXG4gXFxuIFxcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXFx1MDAzZXpvbmUuaWQpO1xcbkBAIC0xNTg1LDQwICsxNTg5LDU1IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pXFxuK1xcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XFxuK1xcdGlmICghaW5mbylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyA9XFxuK1xcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4rXFx0aW5mby1cXHUwMDNlbGltaXRzID1cXG4gXFx0XFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cykge1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VsaW1pdHMpIHtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXFxuLVxcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzW2ldKTtcXG4rXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xcbitcXHRpbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuIFxcbi1cXHRpZiAoSVNfRVJSKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoSVNfRVJSKGluZm8tXFx1MDAzZWRhdGEpKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoaW5mby1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdGtmcmVlKGluZm8tXFx1MDAzZWxpbWl0cyk7XFxuK1xcdFxcdGtmcmVlKGluZm8pO1xcbiBcXHRcXHRwcl9lcnIoXFxcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4rc3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbit7XFxuK1xcdHJldHVybiByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xcbit9XFxuK1xcbisvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxcbisgKiBSQ1UgZ3JhY2UgcGVyaW9kIG11c3QgZWxhcHNlIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuICBUaGUgcGVybmV0IGNvcmVcXG4rICogZ3VhcmFudGVlcyB0aGUgZ3JhY2UgcGVyaW9kIGJldHdlZW4gdGhlIC5wcmVfZXhpdCBhbmQgLmV4aXQgY2FsbGJhY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGlmICghaW5mbylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVxcdTAwM2VkYXRhKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XFxuIFxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG5AQCAtMTYyNiw3ICsxNjQ1LDcgQEAgc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4gXFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuIFxcbiBcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0X2xpbWl0LCBuZXh0LCBoZWFkLCBobGlzdF9ub2RlKVxcbi1cXHRcXHRcXHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XFxuK1xcdFxcdFxcdGtmcmVlKGN0X2xpbWl0KTtcXG4gXFx0fVxcbiBcXHRrZnJlZShpbmZvLVxcdTAwM2VsaW1pdHMpO1xcbiBcXHRrZnJlZShpbmZvKTtcXG5AQCAtMTY2NSwxMiArMTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcXG4tXFx0aW50IHJlbTtcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xcbiBcXHR1MTYgem9uZTtcXG4rXFx0aW50IHJlbTtcXG4gXFxuIFxcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XFxuIFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xcbkBAIC0xNjc5LDYgKzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXFx1MDAzZWxpbWl0O1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXFxuQEAgLTE2OTUsNiArMTcxNiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRjdF9saW1pdC1cXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFxuIFxcdFxcdFxcdG92c19sb2NrKCk7XFxuK1xcdFxcdFxcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbiBcXHRcXHRcXHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH1cXG5AQCAtMTcwOSwxMiArMTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcXG4tXFx0aW50IHJlbTtcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xcbiBcXHR1MTYgem9uZTtcXG4rXFx0aW50IHJlbTtcXG4gXFxuIFxcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XFxuIFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xcbkBAIC0xNzIzLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXFxuQEAgLTE3MzAsNiArMTc1NCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG92c19sb2NrKCk7XFxuK1xcdFxcdFxcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbiBcXHRcXHRcXHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XFxuIFxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fVxcbkBAIC0xNzczLDYgKzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxcbkBAIC0xNzk2LDEyICsxODIyLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0XFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XFxuIFxcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0XFx0bmV0LCBpbmZvLVxcdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xcbi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbkBAIC0xODE2LDYgKzE4NDAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbkBAIC0xODI4LDE5ICsxODUzLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XFxuIFxcdFxcdFxcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cXHUwMDNlZGF0YSxcXG4gXFx0XFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZXpvbmUsIGN0X2xpbWl0LVxcdTAwM2VsaW1pdCwgcmVwbHkpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLWV4aXRfZXJyOlxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTg1MCw3ICsxODcyLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcXG5AQCAtMTg2Myw4ICsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xODg0LDcgKzE5MDUsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxcbkBAIC0xODk3LDggKzE5MTcsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGN0X2xpbWl0X2luZm8pO1xcbitcXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFxuQEAgLTE5MTgsNyArMTkzOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcXG5AQCAtMTkzMiwxOCArMTk1MiwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcXG4gXFx0XFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxcbiBcXHRcXHRcXHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXFxuIFxcdFxcdFxcdHJlcGx5KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlcGx5KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFxuIFxcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcXG4gXFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xcbkBAIC0yMDE4LDEyICsyMDM5LDI5IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgdGhlIFJDVS1wcm90ZWN0ZWRcXG4rICogY3RfbGltaXRfaW5mbyBhbmQgc3RvcmVzIGl0IGluIG92c19uZXQtXFx1MDAzZWN0X2V4aXRfZGF0YSBmb3JcXG4rICogb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGhlIHRlYXJkb3duIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QuXFxuKyAqL1xcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcXG4re1xcbisjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbitcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuK1xcbitcXHRvdnNfbmV0LVxcdTAwM2VjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuKy8qIENvbXBsZXRlcyB0aGUgQ1QgbGltaXQgdGVhcmRvd24uICBUaGUgcGVybmV0IGNvcmUgZ3VhcmFudGVlcyBhbiBSQ1VcXG4rICogZ3JhY2UgcGVyaW9kIGJldHdlZW4gZGV0YWNoaW5nIHRoZSBzdGF0ZSBpbiBvdnNfY3RfZXhpdF9zdGFydCgpIGFuZFxcbisgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi5cXG4rICovXFxuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuIFxcbiAjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbi1cXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xcbitcXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRpZiAob3ZzX25ldC1cXHUwMDNleHRfbGFiZWwpXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxcbmluZGV4IDMxN2U1MjVjOGExMTMuLmE1MTZlNWJhZTRmMzQgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuQEAgLTE0LDcgKzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7XFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTtcXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XFxuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7XFxuIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpO1xcbiBpbnQgb3ZzX2N0X2NvcHlfYWN0aW9uKHN0cnVjdCBuZXQgKiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqLFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiosXFxuQEAgLTQwLDcgKzQxLDggQEAgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggZGVkNDZkOTkzYTRlZC4uMzYyZTMyMmZiNDFmNCAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI3NTcsMTcgKzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfcHJlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXFxuK3tcXG4rXFx0b3ZzX2xvY2soKTtcXG4rXFx0b3ZzX2N0X2V4aXRfc3RhcnQoZG5ldCk7XFxuK1xcdG92c191bmxvY2soKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcXG4ge1xcbi1cXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhkbmV0LCBvdnNfbmV0X2lkKTtcXG4gXFx0c3RydWN0IHZwb3J0ICp2cG9ydCwgKnZwb3J0X25leHQ7XFxuK1xcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIFxcdExJU1RfSEVBRChoZWFkKTtcXG4gXFxuIFxcdG92c19sb2NrKCk7XFxuIFxcbi1cXHRvdnNfY3RfZXhpdChkbmV0KTtcXG4rXFx0b3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtXFx1MDAzZWN0X2V4aXRfZGF0YSk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIGRwX25leHQsIFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VkcHMsIGxpc3Rfbm9kZSlcXG4gXFx0XFx0X19kcF9kZXN0cm95KGRwKTtcXG5AQCAtMjc5MSw2ICsyNzk4LDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XFxuIFxcdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxcbitcXHQucHJlX2V4aXQgPSBvdnNfcHJlX2V4aXRfbmV0LFxcbiBcXHQuZXhpdCA9IG92c19leGl0X25ldCxcXG4gXFx0LmlkICAgPSBcXHUwMDI2b3ZzX25ldF9pZCxcXG4gXFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19uZXQpLFxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uNDQ2NTUzYzUxYzMwZSAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuQEAgLTE2NCw3ICsxNjQsMTAgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcXG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXFxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXFxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXFxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXFxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcXG4rICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xcbisgKiBuZXRucyB0ZWFyZG93bi5cXG4rICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cXG4gICogQHh0X2xhYmVsOiBXaGV0aGVyIGNvbm5sYWJsZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBuZXR3b3JrIG9yIG5vdC5cXG4gICovXFxuIHN0cnVjdCBvdnNfbmV0IHtcXG5AQCAtMTcyLDcgKzE3NSw4IEBAIHN0cnVjdCBvdnNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfZXhpdF9kYXRhO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbCB4dF9sYWJlbDtcXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTU6NDkuODU1MzAzNDgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUzODg0NDY1MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZUX0NPTk5MSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9leGVjdXRlXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgbWFuYWdlbWVudCB0byB1c2UgUkNVIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHN0cnVjdHVyZSwgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXRucyB0ZWFyZG93bi4gSXQgc3BsaXRzIHRoZSBleGl0IGxvZ2ljIGludG8gYHByZV9leGl0YCBhbmQgYGV4aXRgIGNhbGxiYWNrcyB0byBlbnN1cmUgYW4gUkNVIGdyYWNlIHBlcmlvZCBlbGFwc2VzIGJlZm9yZSBmcmVlaW5nIHRoZSBjb25udHJhY2sgbGltaXQgc3RhdGUuIEl0IGFsc28gdXBkYXRlcyB0aGUgZ2V0dGVyL3NldHRlciBuZXRsaW5rIGNvbW1hbmRzIGFuZCB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aCB0byBwcm9wZXJseSB1c2UgUkNVIGRlcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9wZW4gdlN3aXRjaCBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgcGFja2V0IHByb2Nlc3NpbmcsIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCwgd2hpY2ggaXMgYSBoaWRkZW4gY29uZmlnIHNlbGVjdGVkIGJ5IGBDT05GSUdfTkZUX0NPTk5MSU1JVGAuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBwYWNrZXQgZXhlY3V0aW9uIHBhdGggdGhhdCBjaGVja3MgdGhlIGxpbWl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCAzOGM2ZjM0Nzc2YzI4Li44Y2E1YmIxNTVlZWI5IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoIWN0X2xpbWl0X2luZm8pXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0Y29ubmNvdW50X2tleSA9IGluZm8tXHUwMDNlem9uZS5pZDtcbiBcbiBcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXHUwMDNlem9uZS5pZCk7XG5AQCAtMTU4NSw0MCArMTU4OSw1NSBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4rXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xuK1x0aWYgKCFpbmZvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbitcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuK1x0aW5mby1cdTAwM2VsaW1pdHMgPVxuIFx0XHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpIHtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghaW5mby1cdTAwM2VsaW1pdHMpIHtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXG4tXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzW2ldKTtcbitcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4rXHRpbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbiBcbi1cdGlmIChJU19FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmIChJU19FUlIoaW5mby1cdTAwM2VkYXRhKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4rXHRcdGtmcmVlKGluZm8tXHUwMDNlbGltaXRzKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHByX2VycihcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cIiwgZXJyKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4rc3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuK3tcbitcdHJldHVybiByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK31cbitcbisvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxuKyAqIFJDVSBncmFjZSBwZXJpb2QgbXVzdCBlbGFwc2UgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcnVucy4gIFRoZSBwZXJuZXQgY29yZVxuKyAqIGd1YXJhbnRlZXMgdGhlIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIHRoZSAucHJlX2V4aXQgYW5kIC5leGl0IGNhbGxiYWNrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IGRhdGE7XG4gXHRpbnQgaTtcbiBcbitcdGlmICghaW5mbylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbkBAIC0xNjI2LDcgKzE2NDUsNyBAQCBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbiBcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdF9saW1pdCwgbmV4dCwgaGVhZCwgaGxpc3Rfbm9kZSlcbi1cdFx0XHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XG4rXHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0fVxuIFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuIFx0a2ZyZWUoaW5mbyk7XG5AQCAtMTY2NSwxMiArMTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgKzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNjk1LDYgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiArMTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTczMCw2ICsxNzU0LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgKzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIyLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODQwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUzLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3Miw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTcsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTgsMTIgKzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyB0aGUgUkNVLXByb3RlY3RlZFxuKyAqIGN0X2xpbWl0X2luZm8gYW5kIHN0b3JlcyBpdCBpbiBvdnNfbmV0LVx1MDAzZWN0X2V4aXRfZGF0YSBmb3JcbisgKiBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0aGUgdGVhcmRvd24gYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbit7XG4rI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuK1x0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuK1xuK1x0b3ZzX25ldC1cdTAwM2VjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTtcbisjZW5kaWZcbit9XG4rXG4rLyogQ29tcGxldGVzIHRoZSBDVCBsaW1pdCB0ZWFyZG93bi4gIFRoZSBwZXJuZXQgY29yZSBndWFyYW50ZWVzIGFuIFJDVVxuKyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmRcbisgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4rXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbiAjZW5kaWZcbiBcbiBcdGlmIChvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuaW5kZXggMzE3ZTUyNWM4YTExMy4uYTUxNmU1YmFlNGYzNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXG5AQCAtMTQsNyArMTQsOCBAQCBlbnVtIG92c19rZXlfYXR0cjtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICopO1xuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKTtcbiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTtcbiBpbnQgb3ZzX2N0X2NvcHlfYWN0aW9uKHN0cnVjdCBuZXQgKiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiosXG5AQCAtNDAsNyArNDEsOCBAQCB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggZGVkNDZkOTkzYTRlZC4uMzYyZTMyMmZiNDFmNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI3NTcsMTcgKzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuK3tcbitcdG92c19sb2NrKCk7XG4rXHRvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbitcdG92c191bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbitcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0TElTVF9IRUFEKGhlYWQpO1xuIFxuIFx0b3ZzX2xvY2soKTtcbiBcbi1cdG92c19jdF9leGl0KGRuZXQpO1xuK1x0b3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgXHUwMDI2b3ZzX25ldC1cdTAwM2VkcHMsIGxpc3Rfbm9kZSlcbiBcdFx0X19kcF9kZXN0cm95KGRwKTtcbkBAIC0yNzkxLDYgKzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IG92c19pbml0X25ldCxcbitcdC5wcmVfZXhpdCA9IG92c19wcmVfZXhpdF9uZXQsXG4gXHQuZXhpdCA9IG92c19leGl0X25ldCxcbiBcdC5pZCAgID0gXHUwMDI2b3ZzX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfbmV0KSxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi40NDY1NTNjNTFjMzBlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCwxMCBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8ge1xuICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LlxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXG4gICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy5cbi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLlxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcbisgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4rICogbmV0bnMgdGVhcmRvd24uXG4rICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc1LDggQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo0OS44NTUzMDQ4MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODQ4NTUzNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCB0ZWxscyBtZSBpdCdzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyB0b3VjaGluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgYC5oYCwgYGRhdGFwYXRoLmNgLCBhbmQgYC5oYC4gQ3J1Y2lhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgd2F5IGBjdF9saW1pdF9pbmZvYCBpcyBhY2Nlc3NlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBhbmQgc3BsaXR0aW5nIHRoZSBleGl0IGxvZ2ljLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSDigJMgYSBwcmltZSB0YXJnZXQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggYWZmZWN0cyB0aGVzZTogYG92c19jdF9jaGVja19saW1pdGAsIGBvdnNfY3RfbGltaXRfaW5pdGAsIGBvdnNfY3RfbGltaXRfZXhpdF9zdGFydGAsIGBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2hgLCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfZXhpdF9zdGFydGAsIGBvdnNfY3RfZXhpdF9maW5pc2hgLCBgb3ZzX3ByZV9leGl0X25ldGAsIGFuZCBgb3ZzX2V4aXRfbmV0YC5cblxuU28sIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmdXp6ZXIgYXJlIGdvaW5nIHRvIGJlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCB3aGljaCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAgb3Igc2ltaWxhci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGxhdHRlciwgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzIG9mIGBvdnNfY3RfY2hlY2tfbGltaXRgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIHN0YXJ0IGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NTo1OC43MDM4NjExNzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3ODgwMTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfY2hlY2tfbGltaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlxcdFxcdFxcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjAxLjE4MjY2NzE3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDAxMjgzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm50cmFjayBMaW1pdHMgaW4gT3BlbiB2U3dpdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgYXJlIGhhbmRsZWQgaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZ1bmN0aW9ucy4gSXQgYXBwZWFycyB0aGF0IGBvdnNfY3RfY29tbWl0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhhdCBtYWtlcyBzZW5zZSAtIGBvdnNfY3RfY29tbWl0YCB3b3VsZCBiZSB0aGUgcG9pbnQgd2hlcmUgYSBjb25uZWN0aW9uIGlzIGZpbmFsaXplZCwgYW5kIHRoZXJlZm9yZSwgd2hlcmUgd2UnZCBuZWVkIHRvIGNoZWNrIGlmIHdlJ3JlIGhpdHRpbmcgYW55IGNvbmZpZ3VyZWQgbGltaXRzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxpbWl0cyBhcmUgYWN0dWFsbHkgKnNldCosICpkZWxldGVkKiwgYW5kICpyZXRyaWV2ZWQqLiBJIHNlZSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGFyZSBhbGwgR2VuZXJpYyBOZXRsaW5rIChnZW5sKSBjb21tYW5kcy4gU28sIGl0J3MgYSBzdGFuZGFyZCBpbnRlcmZhY2UgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgcGFyYW1ldGVycywgYXMgZXhwZWN0ZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIGBvdnNfY3RfbGltaXRfY21kX3NldGAgdG8gc2VlIGhvdyB0aG9zZSBnZW5sIGNvbW1hbmRzIGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgZXhlY3V0ZWQuIEknbGwgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIGl0IHNob3VsZCBiZSBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgYW5kIHRoYXQncyB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjA2LjAyMjgwMDMyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ3ODA5MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQ0PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2OC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2OTpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NzAte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODMtXFx0XFx0XFx0XFx0XFx0ICAgICAgICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODQ6XFx0XFx0LmRvaXQgPSBvdnNfY3RfbGltaXRfY21kX3NldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4NS1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjowOC4zNzA2MTQyMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwOTI4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHJlcHJlc2VudCB0aGUgZm9jdXMgb2YgdGhpcyBzeXN0ZW0sIGFuZCB0aGUga2V5IHN5bWJvbHMgdGhhdCBjYXB0dXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYXJlIGNsZWFybHkgdGhlc2U6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIGVpdGhlciBgb3ZzX2N0X2NvbW1pdGAgb3IsIHBvdGVudGlhbGx5LCB0aGUgbW9yZSBlbmNvbXBhc3NpbmcgYG92c19jdF9leGVjdXRlYCB3aGljaCB0aGVuIGNhbGxzIGBvdnNfY3RfY29tbWl0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgbW9yZSByZWxldmFudCBhbmQgd2hpY2ggaXMgbW9yZSBzZW1hbnRpY2FsbHkgY29ycmVjdC5cblxuTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBvdnNfY3RfZXhlY3V0ZWAgYW5kIHNlZSBob3cgaXQgZml0cyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTY6MTIuNDgxNTQ2NjM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjgzMDg5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2V4ZWN1dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMjU1PXN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODUtXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxMzg2OlxcdFxcdFxcdGVyciA9IG92c19jdF9leGVjdXRlKG92c19kcF9nZXRfbmV0KGRwKSwgc2tiLCBrZXksXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMzg3LVxcdFxcdFxcdFxcdFxcdCAgICAgbmxhX2RhdGEoYSkpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTMzOnN0cnVjdCBuZl9jb25uICpvdnNfY3RfZXhlY3V0ZWQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01MzQtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTYxPXN0YXRpYyBib29sIHNrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTcxLVxcdGlmICghY3QpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcXHRcXHRjdCA9IG92c19jdF9leGVjdXRlZChuZXQsIGtleSwgaW5mbywgc2tiLCBcXHUwMDI2Y3RfZXhlY3V0ZWQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzMtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0yMz1pbnQgb3ZzX2N0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoyNTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMjYtXFx0XFx0ICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD01OT1zdGF0aWMgaW5saW5lIGludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02NC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NjU6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjE0Ljc0OTg1OTI4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjI3MzE4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPVlMgQ29ubmVjdGlvbiBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBvdnNfY3RfZXhlY3V0ZWAgbG9va3MgbGlrZSBhIGtleSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgY29ubmVjdGlvbiB0cmFja2luZyBpcyBoYW5kbGVkIHdpdGhpbiBPcGVuIHZTd2l0Y2guXG5cbk5vdywgd2hlcmUgZG8gSSBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGV2YW50IGJ1aWxkIGluc3RydWN0aW9ucz8gQWgsIHllcywgdGhlIGNvZGUgc2hvdWxkIGJlIHdpdGhpbiB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYGNvbm50cmFjay5jYC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSwgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCwgc2F5cyBhYm91dCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgYE1ha2VmaWxlYCwgYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAsIHdpbGwgcmV2ZWFsIGhvdyB0aGlzIGFsbCBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBtb2R1bGUuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgY3J1Y2lhbCBmb3Igc2VlaW5nIGhvdyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjoxOC42MTI1OTU0NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzMwMDY5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29ubnRyYWNrLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9NYWtlZmlsZT01Mz1uZnAtb2JqcyArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL01ha2VmaWxlLTYyLVxcdCAgICBmbG93ZXIvcW9zX2NvbmYubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9NYWtlZmlsZTo2MzpcXHQgICAgZmxvd2VyL2Nvbm50cmFjay5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9NYWtlZmlsZS02NC1lbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9MTgwNT1pbnQgbmZwX2ZsX2N0X2hhbmRsZV9wcmVfY3Qoc3RydWN0IG5mcF9mbG93ZXJfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jLTE4MTgtXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYzoxODE5OlxcdFxcdFxcdFxcdCAgIFxcXCJ1bnN1cHBvcnRlZCBvZmZsb2FkOiBDb25udHJhY2sgYWN0aW9uIGVtcHR5IGluIGNvbm50cmFjayBvZmZsb2FkXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmMtMTgyMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGU9MTI9c2ZjLSQoQ09ORklHX1NGQ19TUklPVilcXHQrPSBzcmlvdi5vIGVmMTBfc3Jpb3YubyBlZjEwMF9zcmlvdi5vIGVmMTAwX3JlcC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUtMTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFlLm8gdGMubyB0Y19iaW5kaW5ncy5vIHRjX2NvdW50ZXJzLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9NYWtlZmlsZToxNDogICAgICAgICAgICAgICAgICAgICAgICAgICB0Y19lbmNhcF9hY3Rpb25zLm8gdGNfY29ubnRyYWNrLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvTWFrZWZpbGUtMTUtXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPTE4PXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTQtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDo1NTpcXHQvKiBUaGUgY29ubnRyYWNrIG9mIHRoZSBtYXN0ZXIgY29ubmVjdGlvbiAqL1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNTYtXFx0c3RydWN0IG5mX2Nvbm4gKm1hc3RlcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQ9bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpICs9IG5mX2Nvbm50cmFja19sYWJlbHMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19PVlMpICs9IG5mX2Nvbm50cmFja19vdnMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYtbmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NUX1BST1RPX1NDVFApICs9IG5mX2Nvbm50cmFja19wcm90b19zY3RwLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICs9IG5mbmV0bGlua19ob29rLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzMtIyBjb25uZWN0aW9uIHRyYWNraW5nXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSArPSBuZl9jb25udHJhY2sub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE5Nj1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCkgKz0geHRfY29ubmxpbWl0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSykgKz0geHRfY29ubnRyYWNrLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE5OC1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NQVSkgKz0geHRfY3B1Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMxOD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzIxLSAqIG1hc3RlcidzIGhlbHBlciBpcyBzYWZlLCBiZWNhdXNlIHRoZSBwYWNrZXQgaG9sZHMgYSByZWZlcmVuY2Ugb25cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzozMjI6ICogdGhlIGNvbm50cmFjayBvYmplY3QuIE5ldmVyIHVzZSBpdCBmcm9tIGNvbnRyb2wgcGxhbmUuXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzIzLSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1OTE9Y3RuZXRsaW5rX2NyZWF0ZV9leHBlY3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MTUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM2MTY6XFx0LyogTG9vayBmb3IgbWFzdGVyIGNvbm50cmFjayBvZiB0aGlzIGV4cGVjdGF0aW9uICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MTctXFx0aCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsIFxcdTAwMjZtYXN0ZXJfdHVwbGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz0yMTU9c3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2Nvbm50cmFja19sb2NhbCh2b2lkICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy0yMzktICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzoyNDA6c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19vcHNbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTI0MS1cXHR7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTM5MD1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjZfY29ubnRyYWNrX2xvY2FsKHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTM5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjM5NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjZfY29ubnRyYWNrX29wc1tdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtMzk4LVxcdHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NDQzPXN0YXRpYyBpbnQgbmZfY3RfbmV0bnNfZG9fZ2V0KHN0cnVjdCBuZXQgKm5ldCwgdTggbmZwcm90bylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDYyOlxcdFxcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ2MzpcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ2NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy00NzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0ODA6XFx0XFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9jb25udHJhY2tfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDgxOlxcdFxcdFxcdFxcdFxcdCAgICBBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDgyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTUzMj1zdGF0aWMgdm9pZCBuZl9jdF9uZXRuc19kb19wdXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MzktXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzNCBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2VyczQgPT0gMCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MDpcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MTpcXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGlwdjRfY29ubnRyYWNrX29wcykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQyLVxcdFxcdFxcdG5mX2RlZnJhZ19pcHY0X2Rpc2FibGUobmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQ3LVxcdFxcdGlmIChjbmV0LVxcdTAwM2V1c2VyczYgXFx1MDAyNlxcdTAwMjYgKC0tY25ldC1cXHUwMDNldXNlcnM2ID09IDApKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDg6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NDk6XFx0XFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU1MC1cXHRcXHRcXHRuZl9kZWZyYWdfaXB2Nl9kaXNhYmxlKG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz05NTU9dm9pZCBuZl9jb25udHJhY2tfdGNwX3NldF9jbG9zaW5nKHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy05NTYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjk1NzpcXHRlbnVtIHRjcF9jb25udHJhY2sgb2xkX3N0YXRlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTk1OC1cXHRjb25zdCB1bnNpZ25lZCBpbnQgKnRpbWVvdXRzO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTMwNT1zdGF0aWMgYm9vbCBuZl9uYXRfbWF5X2tpbGwoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMwOS1cXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFnc19uZWVkZWQgPSBJUFNfU1JDX05BVDtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MzEwOlxcdGVudW0gdGNwX2Nvbm50cmFjayBvbGRfc3RhdGU7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMxMS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX3RyYWNlLmM9OTQ9c3RhdGljIGludCBuZl90cmFjZV9maWxsX2N0X2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfdHJhY2UuYy0xMDctXFx0aWYgKCFjdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX3RyYWNlLmM6MTA4OlxcdFxcdGlmIChjdGluZm8gIT0gSVBfQ1RfVU5UUkFDS0VEKSAvKiBub3Qgc2VlbiBieSBjb25udHJhY2sgb3IgaW52YWxpZCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX3RyYWNlLmMtMTA5LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlPTIxPWlmbmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLClcXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGU6MjI6b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS0yMy1lbmRpZlxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz0xMDc1PWludCBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA1LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MTEwNjpcXHQvKiBDaGVjayB0aGF0IHdlIGhhdmUgY29ubnRyYWNrIG9yaWdpbmFsIGRpcmVjdGlvbiB0dXBsZSBtZXRhZGF0YSBvbmx5XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMTA3LVxcdCAqIGZvciBwYWNrZXRzIGZvciB3aGljaCBpdCBtYWtlcyBzZW5zZS4gIE90aGVyd2lzZSB0aGUga2V5IG1heSBiZVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2JpZ190Y3Auc2g9Mjc9c2V0dXAoKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcC5zaC01OS1cXHRcXHRncm9fbWF4X3NpemUgJE1BWF9TSVpFIGdzb19tYXhfc2l6ZSAkTUFYX1NJWkVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcC5zaDo2MDpcXHQjIHRlc3QgZm9yIG5mX2N0X3NrYl9uZXR3b3JrX3RyaW0gaW4gbmZfY29ubnRyYWNrX292cyB1c2VkIGJ5IFRDIGN0IGFjdGlvbi5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYmlnX3RjcC5zaC02MS1cXHRpcCBuZXQgZXhlYyAkUk9VVEVSX05TIHRjIHFkaXNjIGFkZCBkZXYgbGluazEgaW5ncmVzc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjoyMS4wODU2MDk1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzY1MjU1NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoYXQgc3BlY2lmaWMgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbi4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0IHRoZSBwYXRjaCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZlYXR1cmVzLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBwcmVjaXNlbHkgaG93IGFuZCB3aHkgdGhlIGF1dGhvcnMgYXJlIHVzaW5nIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAgd2l0aGluIHRoYXQgc3BlY2lmaWMgY29udGV4dC4gSXMgdGhpcyBhIG5ldyBmZWF0dXJlLCBhIG1vZGlmaWNhdGlvbiB0byBleGlzdGluZyBiZWhhdmlvciwgb3IganVzdCBhIGRlcGVuZGVuY3k/IFVuZGVyc3RhbmRpbmcgdGhpcyBsaW5rIGJldHdlZW4gdGhlIGNvbmZpZyBvcHRpb24gYW5kIHRoZSBgY29ubnRyYWNrLmNgIGNvZGUgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgYXNzZXNzaW5nIHRoZSBwYXRjaCdzIGltcGFjdC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCBpcyB1c2VkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY4MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjI1Ljg1MDg2OTg0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4ODQyMjAyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc5PW9iai0kKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpICs9IG5mX3N5bnByb3h5X2NvcmUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODAtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkgKz0gbmZfY29ubmNvdW50Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgyLVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTYxPXN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTc5LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4MDojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04MS0jZGVmaW5lIE9WU19DVF9MSU1JVF9VTkxJTUlURURcXHQwXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9ODYwPXN0YXRpYyBib29sIGxhYmVsc19ub256ZXJvKGNvbnN0IHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscyAqbGFiZWxzKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3MC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6ODcxOiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3Mi1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmN0X2xpbWl0X2hhc2hfYnVja2V0KFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NzctXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk3ODojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NzktXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNm92c19jdF9saW1pdF9lbmFibGVkKSkge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1NzM9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTg4LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg5OiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1OTAtc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwMjE9aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDMzLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyMDM0OiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMzUtXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDQ2PXZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDQ3LXtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjA0ODojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDQ5LVxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDU5PXZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDYyLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyMDYzOiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwNjQtXFx0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTAwPXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSkgeyB9XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTA0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoxMDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTEwNi1leHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5O1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjY4MT1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5ICogY29uc3QgZHBfZ2VubF9mYW1pbGllc1tdID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4Ni1cXHRcXHUwMDI2ZHBfbWV0ZXJfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY4NzojaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI2ODgtXFx0XFx1MDAyNmRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MTczPXN0cnVjdCBvdnNfbmV0IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTE3Ni1cXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDoxNzc6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0xNzgtXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjoyOC4wMzkyOTU3NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjcwNzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgcmVxdWlyZW1lbnRzLCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBzcGFjZTpcblxuKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIG5lZWRzIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAuIEknbSBhbHJlYWR5IGF3YXJlIG9mIGl0cyBmdW5jdGlvbiwgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhhdCBpdCdzIHByb2JhYmx5IGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgaGVyZS4gVGhlbiwgd2UgYWxzbyBoYXZlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX09QRU5WU1dJVENIYC4gVGhhdCBtYWtlcyBzZW5zZTsgT3BlbiB2U3dpdGNoIGlzIGEgc2lnbmlmaWNhbnQgcGllY2Ugb2YgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSwgc28gaXQncyBub3Qgc3VycHJpc2luZyBpdCBoYXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbkdpdmVuIHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBhdmFpbGFiaWxpdHkgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEknZCBnbyB0byBjb25maXJtIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkIG9yIGRlcml2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqYWN0dWFsbHkqIGdvaW5nIG9uIGluIHRlcm1zIG9mIGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0LCBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBtb3JlIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IsIHBvdGVudGlhbGx5LCBkZWZhdWx0IHZhbHVlcyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjozMS45NTIwMDU1ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTAxMjY4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NjozNC4zNDIxMzczNjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4Mzg4OTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIEkgc2VlIGl0LCBpcyB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHR5cGljYWwgbG9jYXRpb24gZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLiBCeSBleGFtaW5pbmcgdGhlIEtjb25maWcgZmlsZSwgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB3aGljaCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyBhcmUgcmVxdWlyZWQgb3IgYXQgbGVhc3Qgc3VnZ2VzdGVkIGZvciBgT1BFTlZTV0lUQ0hgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjM3LjcyNjAzMTIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTY6MzcuNzI2MTU1MDQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMjEzOTU5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgT1BFTlZTV0lUQ0hgLiBUaGUga2V5IHRoaW5nIHRvIG5vdGUgaW1tZWRpYXRlbHkgaXMgdGhhdCBpdCByZWxpZXMgb24gYElORVRgLiBUaGF0J3MgZXhwZWN0ZWQg4oCTIGl0J3MgbmV0d29ya2luZyBhZnRlciBhbGwsIHNvIHdlIG5lZWQgdGhlIGNvcmUgSW50ZXJuZXQgUHJvdG9jb2wgc3RhY2suXG5cbkJ1dCB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoaXMgY29uZGl0aW9uYWwgZGVwZW5kZW5jeTogYCFORl9DT05OVFJBQ0sgfHwgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgLi4uICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSlgLiBFc3NlbnRpYWxseSwgYE9QRU5WU1dJVENIYCBlaXRoZXIgKmRvZXNuJ3QqIHJlcXVpcmUgTmV0ZmlsdGVyJ3MgY29ubmVjdGlvbiB0cmFja2luZyBhdCBhbGwsIG9yIGl0ICpkb2VzKiByZXF1aXJlIGBORl9DT05OVFJBQ0tgIGFuZCB0aGVuIGhhcyBhIGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSWYgYE5GX0NPTk5UUkFDS2AgaXMgZW5hYmxlZCwgaXQgKmVpdGhlciogbmVlZHMgYE5FVEZJTFRFUl9DT05OQ09VTlRgICpvciogaXQgZG9lc24ndC5cblxuU28sIHRvIGJlIHNhZmUsIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlOiBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCB0byBjb3ZlciBhbGwgb3VyIGJhc2VzIGFuZCBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gQmV0dGVyIHRvIGhhdmUgdGhlbSBhbmQgbm90IG5lZWQgdGhlbSwgdGhhbiB0aGUgcmV2ZXJzZS5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlcXVpcmVtZW50LCBsZXQncyBnbyBjaGVjayB0aGUgc291cmNlIGZpbGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgZW5hYmxlZCBhbmQgdXNlZC4gVGhhdCB3aWxsIGNsYXJpZnkgaG93IGNydWNpYWwgdGhhdCBvcHRpb24gaXMgYW5kIHdoZXRoZXIgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1Njo0My45NDc1NTQzMjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTE2ODY3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1Njo0Ni4yMzkyNDU1MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMzk5NDY1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm50cmFjayBMaW1pdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGludm9sdmVzIGBORVRGSUxURVJfQ09OTkNPVU5UYCB3aGljaCBpcyB0cmlzdGF0ZSBhbmQgbmVzdGVkIHdpdGhpbiBgaWYgTkZfQ09OTlRSQUNLYC4gU28sIHdlIGRlZmluaXRlbHkgbmVlZCB0byBjb25zaWRlciBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhbmQgYG92c19jdF9leGVjdXRlYC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYG92c19jdF9jaGVja19saW1pdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2V4ZWN1dGVgLiBJdCBhbHNvIHRvdWNoZXMgYG92c19jdF9saW1pdF9pbml0YCBhbmQgdGhlIGluaXQvZXhpdCByb3V0aW5lcy4gVGhvc2UgbmV0bnMgY2FsbGJhY2tzIGFyZSB0cmlnZ2VyZWQgZHVyaW5nIGBjb3B5X25ldF9uc2AgYW5kIGBjbGVhbnVwX25ldGAsIGJ1dCBuZXRucyBmdXp6aW5nIGlzIHN0YW5kYXJkLCBzbyBJIGNhbiBza2lwIGxpc3RpbmcgdGhvc2UgYXMgZXhwbGljaXQgZm9jdXMgc3ltYm9scy5cblxuSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBtaWdodCBiZSBpbmxpbmVkLiBCdXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCBpcyBzdGF0aWMuIEhtbSwgYnV0IHdhaXQuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgZ2VubF9zbWFsbF9vcHNgLiBUaGF0IG1lYW5zIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkIGFuZCB0aGV5J2xsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gdGhleSAqYXJlKiB2YWxpZCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJvbXB0IGV2ZW4gdGVsbHMgbWUgdGhleSBhcmUgb2theSBpbiB0aGlzIGNhc2UuXG5cbkV2ZW4gc28sIGBvdnNfY3RfZXhlY3V0ZWAgaXMgbm9uLXN0YXRpYywgc28gbWF5YmUgSSBzaG91bGQgcHJlZmVyIHRoYXQgaW5zdGVhZC4gTGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uLiBZZXAsIGBvdnNfY3RfZXhlY3V0ZWAgaXMgbm9uLXN0YXRpYzogYGludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKWAuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgZXhwb3J0ZWQgb3IganVzdCBzdGF0aWMuIFl1cCwgaXQncyBzdGF0aWMuIEl0J3MgY2FsbGVkIGJ5IHRoZSBnZW5sIGNvcmUuIEl0J3Mgc2FmZSB0byBpbmNsdWRlIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLiBFdmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkZpbmFsbHksIGxldCBtZSBkb3VibGUgY2hlY2sgYG92c19jdF9leGVjdXRlYCBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMDAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTY6NTYuMjc5MTk0ODIzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1ODI2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBvdnNfY3RfZXhlY3V0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0yMz1pbnQgb3ZzX2N0X2FjdGlvbl90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTI0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaDoyNTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMjYtXFx0XFx0ICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD01OT1zdGF0aWMgaW5saW5lIGludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02NC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NjU6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC02Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU2OjU4LjU3NTA0NzI1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU1ODQ1MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyB0aGUgSW1wYWN0IG9mIGBvdnNfY3RfbGltaXRfY21kX3NldGAqKlxuXG5BbHJpZ2h0LCBJJ20gdHVybmluZyBvdmVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGNvbW1hbmQgaW4gbXkgbWluZC4gT24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYSB3YXkgdG8gbWFuYWdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEJ1dCwgYXMgd2UgYm90aCBrbm93LCB0aGVzZSBzZWVtaW5nbHkgc2ltcGxlIGtub2JzIGNhbiBoYXZlIGZhci1yZWFjaGluZyBlZmZlY3RzIG9uIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggZXhpc3RpbmcgZmlyZXdhbGwgcnVsZXMuIEhvdyBhZ2dyZXNzaXZlbHkgYXJlIHRoZXNlIGxpbWl0cyBiZWluZyBhcHBsaWVkLCBhbmQgd2hhdCdzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlmIG5vdCBleHBsaWNpdGx5IHNldD9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSB0eXBlcyBvZiB0cmFmZmljIHBhdHRlcm5zIHdlJ3JlIGxpa2VseSB0byBzZWUgaW4gb3VyIGVudmlyb25tZW50LiBJcyB0aGlzIHByaW1hcmlseSBzaG9ydC1saXZlZCwgdHJhbnNhY3Rpb25hbCB0cmFmZmljLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGxvbmctbGl2ZWQgZmxvd3MgbGlrZSBzdHJlYW1pbmcgdmlkZW8gb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucz8gVGhlIG9wdGltYWwgc2V0dGluZyB3aWxsIHZhcnkgZHJhc3RpY2FsbHkgZGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIuIFdlIGNhbid0IGFwcGx5IGEgc2luZ2xlLCBnbG9iYWwgc2V0dGluZyB3aXRob3V0IHNvbWUgc2VyaW91cyB0ZXN0aW5nLlxuXG5BbmQsIG9mIGNvdXJzZSwgSSdtIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGFidXNlLiBDb3VsZCBhbiBhdHRhY2tlciBleHBsb2l0IHRoaXMgc2V0dGluZyB0byB0cmlnZ2VyIGEgRG9TIGNvbmRpdGlvbj8gV2hhdCBhcmUgdGhlIG1vbml0b3JpbmcgY2FwYWJpbGl0aWVzIHdlIGhhdmUgaW4gcGxhY2UgdG8gZGV0ZWN0IGFuZCBtaXRpZ2F0ZSB0aGVzZSB0eXBlcyBvZiBhdHRhY2tzIGlmIHRoZXkgd2VyZSB0byB0cnkgdGhpcyBleHBsb2l0PyBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBjYW4gaWRlbnRpZnkgYW5kIHJlYWN0IHRvIGFueSB1bnVzdWFsIHBhdHRlcm5zIGluIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWV0cmljcy5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCB0aHJvdWdocHV0LCBsYXRlbmN5LCBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIFdlIGNhbm5vdCBtYWtlIGFzc3VtcHRpb25zLiBXaGF0IHRlc3RzIGNhbiBiZSBkb25lIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgbGltaXRzPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBleHBlcmltZW50YWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHdlIG9wdGltaXplIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbiBuZXR3b3JrIHN0YWJpbGl0eS4gV2UgaGF2ZSB0byBiZSB0aG9yb3VnaCB3aXRoIG91ciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzowMy40MzA4OTU1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDA4ODM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDQ9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODY4LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODY5OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg3MC17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4My1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk4NDpcXHRcXHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTg1LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU3OjA1LjczMTc4MzY4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAxOTMyNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIEFQSSBFeHBvc3VyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGV4cG9zZSB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0aW5nIHdpdGggU3l6a2FsbGVyLCBrZWVwaW5nIGluIG1pbmQgdGhlIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBsaXN0aW5nIGBvdnNfY3RfbGltaXRfY21kX3NldGAgYmVjYXVzZSBpdCdzIHN0YXRpYywgYnV0IEkgcmVhbGl6ZWQgU3l6a2FsbGVyIGNvdWxkIHN0aWxsIHV0aWxpemUgaXQgaWYgaXQgcGFyc2VzIHRoZSBzeW1ib2wgdGFibGUuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuXG5cblRoZXJlZm9yZSwgSSdsbCBnbyB3aXRoIGBvdnNfY3RfZXhlY3V0ZWAgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZT8gQWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIGBvdnNfY3RfaW5pdGAsIGBvdnNfY3RfZXhpdF9zdGFydGAsIGFuZCBgb3ZzX2N0X2V4aXRfZmluaXNoYCBhcmUgYWxzbyBub24tc3RhdGljLiBCdXQsIHRob3NlIGFyZSBqdXN0IGluaXRpYWxpemF0aW9uIGFuZCBleGl0IGZ1bmN0aW9ucy4gU28sIGluIHRvdGFsLCBJIHRoaW5rIHRoZSBiZXN0IG9wdGlvbiBpcyB0byBpbmNsdWRlIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhcyB0aGV5IHByb3ZpZGUgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSB3aGlsZSBhZGhlcmluZyB0byB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhLlxuXG5CZWZvcmUgc3VibWl0dGluZywgSSBuZWVkIHRvIGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJ2xsIG5lZWQgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVURklMVEVSX0NPTk5DT1VOVGAganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoxMS4yMzM3MTk5NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mjc3MDUzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoxMy42NjE0MzA0ODdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxODAyMjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgdHJpc3RhdGVgIHdpdGhpbiBgTkZfQ09OTlRSQUNLYCoqXG5cblJpZ2h0LCBzbyBpdCdzIGEgc2ltcGxlIGB0cmlzdGF0ZWAgb3B0aW9uIG5lc3RlZCBkaXJlY3RseSBpbnNpZGUgdGhlIGBpZiBORl9DT05OVFJBQ0tgIGJsb2NrLiBUaGF0J3MgZ29vZCwgbGVzcyBjb21wbGV4IHRoYW4gSSBpbml0aWFsbHkgYW50aWNpcGF0ZWQuIEl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBmZWF0dXJlLCB3aGF0ZXZlciBpdCBpcywgZG9lc24ndCBicmluZyBpbiBhIHJhZnQgb2Ygb3RoZXIgZGVwZW5kZW5jaWVzIEknbGwgbmVlZCB0byB1bnRhbmdsZSBsYXRlci4gVGhhdCdzIGEgZGVmaW5pdGUgcGx1cyBmb3IgZWFzZSBvZiBpbnRlZ3JhdGlvbiBvciBtb2RpZmljYXRpb24uXG5cblRoZW4gdGhlcmUncyB0aGUgcXVlc3Rpb24gb2YgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJcyBpdCBvbmx5IGVuYWJsZWQgKmJlY2F1c2UqIG9mIHNvbWV0aGluZyBlbHNlLCBvciBjYW4gaXQgYmUgY29uZmlndXJlZCBpbmRlcGVuZGVudGx5PyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBwcm9iYWJseSBwcm9tcHRlZCBieSBzb21ldGhpbmcgZWxzZS4gQnV0IEkgaGF2ZSB0byBjaGVjay4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgcHJvbXB0Li4uSSdsbCBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybS4gSSdsbCBzZWFyY2ggZm9yIGl0LCBhbmQgdGhlbiBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIHNwZWNpZmljIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgY2xlYXIgdXAgd2hldGhlciBJIGNhbiBqdXN0IGVuYWJsZSBpdCBkaXJlY3RseSwgb3IgaWYgSSBoYXZlIHRvIGdvIHRocm91Z2ggYSBkaWZmZXJlbnQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoxNy41Nzk0NTY4NzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0aWYgTkZfQ09OTlRSQUNLXFxuIDExMTpcXHRjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbiAxMTI6XFx0XFx0dHJpc3RhdGVcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxuIDExNTpcXHRcXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuIDExNjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxMTc6XFx0XFx0aGVscFxcbiAxMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gbWFya3MsIHVzZWQgYnkgdGhlXFxuIDExOTpcXHRcXHQgIGBDT05OTUFSSycgdGFyZ2V0IGFuZCBgY29ubm1hcmsnIG1hdGNoLiBTaW1pbGFyIHRvIHRoZSBtYXJrIHZhbHVlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU3OjE3LjU3OTcxNjgzOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYyMDE5MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgSGlkZGVuIEtlcm5lbCBDb25maWcqKlxuXG5SaWdodCwgc28gYE5FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGFwcGFyZW50bHkgbm90IGEgdmlzaWJsZSwgdG9wLWxldmVsIGNvbmZpZyBvcHRpb24uIE5vIHByb21wdCBpbiB0aGUgbWVudXMsIGludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0J3MgYmVpbmcgKnNlbGVjdGVkKiBieSBzb21ldGhpbmcgZWxzZSwgYSBkZXBlbmRlbmN5LCBwcm9iYWJseSBhbm90aGVyIGNvbmZpZyBvcHRpb24uIE5vdywgdGhlIHJlYWwgZnVuIGJlZ2luczogSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdCBwYXRoIHRoYXQgY2F1c2VzIGBORVRGSUxURVJfQ09OTkNPVU5UYCB0byBiZSBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgc2VsZWN0IHN0YXRlbWVudHMgcmV2ZWFsLiBMZXQncyB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUzNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6MjEuNTQxNzM4Mzg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1MTAyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01MTE9Y29uZmlnIE5GVF9DT05OTElNSVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTQtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTE1OlxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxNi1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTIyOD1jb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMzEtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzMjpcXHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjMzLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6MjMuNzQ2ODQ1NTk0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjg5Njk3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBlbmFibGVkLiBJdCBhcHBlYXJzIHRoYXQgYE5GVF9DT05OTElNSVRgIGFuZCBgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVGAgKnNlbGVjdCogdGhpcyBmZWF0dXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIG9uZSBvZiB0aG9zZSB0byBiZSBhY3RpdmUuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYE9QRU5WU1dJVENIX0NPTk5MSU1JVGAgdG8gc2VlIGlmIGl0J3MgaGFuZGxpbmcgdGhpcyB0b28uIEhtbSwgdGhlIE9wZW4gdlN3aXRjaCBLY29uZmlnIGhhcyBhIGRlcGVuZGVuY3kgb24gYCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlRgLiBTbywgaXQgZG9lc24ndCAqc2VsZWN0KiBpdC4gSXQganVzdCBjaGVja3MgdGhhdCBpdCBpcyBhdmFpbGFibGUuIFNvLCBubyBoZWxwIGZyb20gdGhlcmUuXG5cbk9rYXksIGJhY2sgdG8gdGhlIG1haW4gc3RyYXRlZ3kuIFNpbmNlIGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBhIGhpZGRlbiBjb25maWd1cmF0aW9uIG9wdGlvbiwgSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggZWl0aGVyIGBORlRfQ09OTkxJTUlUYCBvciBgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVGAgdG8gZW5hYmxlIGl0LiBJJ2xsIG5lZWQgdG8gZW5hYmxlICpvbmUqIG9mIHRob3NlIHRvIGFjdHVhbGx5IGdldCB0aGlzIGNvZGUgdG8gd29yay5cblxuU28sIG5leHQgc3RlcDogbGV0J3MgZ28gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZUX0NPTk5MSU1JVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQgbmVlZHMgaW4gb3JkZXIgdG8gYmUgYSB2aWFibGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkxMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzoyOC4yNzU4MTgzMzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTE3ODUwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9DT05OTElNSVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTUwND1jb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTExOmNvbmZpZyBORlRfQ09OTkxJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25ubGltaXQgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzozMC41ODc2MDkzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTE5NTA3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25uZWN0aW9uIExpbWl0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBpbnRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCBmb2N1cyBvbiBgTkZUX0NPTk5MSU1JVGAuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlZmluZSB0aGUgYnVpbGQgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb25uZWN0aW9uIGxpbWl0IG1vZHVsZSwgd2hpY2ggc2hvdWxkIGFsbG93IHVzIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIElQIGFkZHJlc3Mgb3IgYSBjb21iaW5hdGlvbiBvZiBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzIGFuZCBwb3J0cywgcmlnaHQ/XG5cbkknbSBsb29raW5nIGZvciB0aGUgdXN1YWw6IHRoZSAqZGVwZW5kcyBvbiogc3RhdGVtZW50cy4gV2hhdCBvdGhlciBOZXRmaWx0ZXIgbW9kdWxlcyBhcmUgcmVxdWlyZWQ/IElzIHRoaXMgaW50ZXJ0d2luZWQgd2l0aCBjb25udHJhY2sgaW4gc29tZSB3YXk/IE9yIHBlcmhhcHMgaXQgbGV2ZXJhZ2VzIG90aGVyIGluZnJhc3RydWN0dXJlIGxpa2UgdGhlIGhhc2ggdGFibGVzIGZvciBsb29rdXBzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSB0aGUgZW50aXJlIHBpY3R1cmUuIEl0J3MgY3J1Y2lhbCB0byBiZSBhYmxlIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBhIHN5c3RlbS5cblxuTmV4dCB1cCwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZGVmYXVsdCBzZXR0aW5nIGFuZCBpdHMgZGVzY3JpcHRpb24uIElzIHRoZXJlIGEgZGVmYXVsdCB2YWx1ZT8gSXMgaXQgc2V0IHRvICd5JyB0byBidWlsZCBhcyBhIG1vZHVsZSBvciBhcyBwYXJ0IG9mIHRoZSBjb3JlPyBJJ2xsIGxvb2sgZm9yIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyDigJMgaG9wZWZ1bGx5IGl0J3MgY2xlYXIgYW5kIGNvbmNpc2UsIGV4cGxhaW5pbmcgdGhlIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSBob3BlIGl0IGluY2x1ZGVzIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGxpbWl0cyB0byBhcHBseSB0byBkaWZmZXJlbnQgcHJvdG9jb2xzLCB3aGljaCBjb3VsZCBiZSBUQ1Agb3IgVURQLiBJJ2QgbGlrZSB0byBzZWUgaWYgdGhlcmUncyBhbnkgbWVudGlvbiBvZiBob3cgdGhlIGxpbWl0cyBhcmUgZW5mb3JjZWQgLSBtYXliZSBhIHJhdGUgbGltaXRpbmcgbWVjaGFuaXNtP1xuXG5GaW5hbGx5LCBsZXQncyBzZWUgaG93IGdyYW51bGFyIHRoZSBjb25maWd1cmF0aW9uIGlzLiBDYW4gd2Ugc2V0IGxpbWl0cyBwZXIgSVAsIHBlciBwb3J0LCBwZXIgYXBwbGljYXRpb24/IEFyZSB0aGVyZSBhbnkgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nIGludGVncmF0aW9uIGZvciBzdGF0ZWZ1bCBmaWx0ZXJpbmc/IEFscmlnaHQsIGxldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6MzkuMTA3MTE5OTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuIDUyMDpcXHRjb25maWcgTkZUX0xPR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1NzozOS4xMDcyODQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODYzNzE5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgT3BlbiB2U3dpdGNoOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIEknbSBtYWtpbmcgc29tZSBjb25maWd1cmF0aW9uIHVwZGF0ZXMsIGFuZCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZS4gU3BlY2lmaWNhbGx5LCBJJ20gZGVhbGluZyB3aXRoIGBORlRfQ09OTkxJTUlUYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgbm90ZXMgY2xlYXJseSBzdGF0ZSBpdCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBNYWtlcyBzZW5zZSwgb2YgY291cnNlLiBTbywgdGhlIGFjdGlvbiBpdGVtIGhlcmUgaXMgY2xlYXI6IGVuc3VyZSBgTkZUX0NPTk5MSU1JVGAgaXMgZGVmaW5pdGVseSBpbmNsdWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbnMuIERvbid0IHdhbnQgYW55IHN1cnByaXNlcyBkdXJpbmcgZGVwbG95bWVudC5cblxuTm93LCBJJ20gYWxzbyB3b3JraW5nIHdpdGggYE9QRU5WU1dJVENIYCBhbmQgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhZ2Fpbi4gSXQncyBlYXN5IHRvIGdldCBkaXN0cmFjdGVkIGFuZCBmb3JnZXQgYSBzbWFsbCBidXQgY3J1Y2lhbCBkZXRhaWwgdGhhdCBjb21lcyB1cCBpbiBteSB3b3JrIGFsbCB0aGUgdGltZS4gRG91YmxlLWNoZWNraW5nIGlzIGJldHRlciB0aGFuIHNwZW5kaW5nIHRpbWUgZGVidWdnaW5nIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NDMuNDkzNjU5NDExWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBPcGVuIHZTd2l0Y2hcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9QRU5WU1dJVENIXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcXFxcbiAgMTA6XFx0XFx0XFx0ICAgKE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxcbiAgMTQ6XFx0XFx0c2VsZWN0IE1QTFNcXG4gIDE1OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX01QTFNfR1NPXFxuICAxNzpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuICAxODpcXHRcXHRzZWxlY3QgTkVUX05TSFxcbiAgMTk6XFx0XFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXFxuICAyMDpcXHRcXHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NDMuNDkzNzgwMzUxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDY3Mzc1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIGJ1aWxkIHByb2Nlc3MsIGFuZCBpdCdzIGJlY29taW5nIGNsZWFyIHRoYXQgdGhlcmUncyBhIGRlcGVuZGVuY3kgY2hhaW4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBPUEVOVlNXSVRDSGAgaXRzZWxmIGhpbmdlcyBvbiBgSU5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBuZXR3b3JrIGludGVyYWN0aW9uIGlzIGZ1bmRhbWVudGFsLiBUaGVuLCBJIHNlZSBgTkZfQ09OTlRSQUNLYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYE5GX0NPTk5UUkFDS19PVlNgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIE9WUyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgcmVwcmVzZW50ZWQgYnkgYE5GX0NPTk5UUkFDS19PVlNgLCBjYW4ndCBldmVuIGJlIGNvbnNpZGVyZWQgdW5sZXNzIHRoZSBiYXNlIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQuIFRoaXMgd2hvbGUgYE5GX0NPTk5UUkFDS19PVlNgIHRoaW5nLCBzcGVjaWZpY2FsbHksIGNvbXBlbHMgdGhlIGNvbXBpbGF0aW9uIG9mIGBjb25udHJhY2sub2AuIEkgc2hvdWxkIHZlcmlmeSBgTkZfQ09OTlRSQUNLX09WU2AgaW4gYG5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29kZSBjb21waWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU3OjQ3LjAwMDUyMTk3NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBPcGVuIHZTd2l0Y2guXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvcGVudnN3aXRjaC15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFjdGlvbnMubyBcXFxcXFxuICAxMDpcXHRcXHRkYXRhcGF0aC5vIFxcXFxcXG4gIDExOlxcdFxcdGRwX25vdGlmeS5vIFxcXFxcXG4gIDEyOlxcdFxcdGZsb3cubyBcXFxcXFxuICAxMzpcXHRcXHRmbG93X25ldGxpbmsubyBcXFxcXFxuICAxNDpcXHRcXHRmbG93X3RhYmxlLm8gXFxcXFxcbiAgMTU6XFx0XFx0bWV0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdHZwb3J0Lm8gXFxcXFxcbiAgMTg6XFx0XFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcXFxcbiAgMTk6XFx0XFx0dnBvcnQtbmV0ZGV2Lm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxcbiAgMjI6XFx0b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbiAgMjM6XFx0ZW5kaWZcXG4gIDI0OlxcdFxcbiAgMjU6XFx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX1ZYTEFOKSs9IHZwb3J0LXZ4bGFuLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NDcuMDAwNjE1NTg1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzkzMDU0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYGNvbm50cmFjay5vYCBpcyBvbmx5IGJ1aWx0IHdoZW4gYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIGRlZmluZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuYWJsZSBib3RoIGBPUEVOVlNXSVRDSGAgYW5kIGBORl9DT05OVFJBQ0tgIGluIG15IGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIHRvIGVuYWJsZSAqdGhpcyBzcGVjaWZpYyogcGF0Y2gsIHRoZSBwYXJ0IGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAsIEkgbmVlZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJ1dCB0aGF0J3MgaGlkZGVuLCBpc24ndCBpdD8gU28sIEkgaGF2ZSB0byBnbyB0aHJvdWdoIGBORlRfQ09OTkxJTUlUYCBvciBgTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVGAgdG8gZ2V0IHRvIGl0LiBMZXQncyB1c2UgYE5GVF9DT05OTElNSVRgIHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQga2VlcCB0aGluZ3MgY2xlYW5lci5cblxuU28sIGxldCdzIGluY2x1ZGU6XG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORl9DT05OVFJBQ0tgXG4qICAgYE5GVF9DT05OTElNSVRgXG5cblJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIGBORlRfQ09OTkxJTUlUYCdzIGRlcGVuZGVuY2llcy4gQWggeWVzLCBpdCBkZXBlbmRzIG9uIGJvdGggYE5GX0NPTk5UUkFDS2AgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBMZXQncyB0aHJvdyBpbiBgTkVURklMVEVSX0FEVkFOQ0VEYCBhcyB3ZWxsLlxuXG5TbywgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCwgYXQgbGVhc3QgZm9yIG5vdywgYXJlOlxuXG4qICAgYE9QRU5WU1dJVENIYFxuKiAgIGBORl9DT05OVFJBQ0tgXG4qICAgYE5FVEZJTFRFUl9BRFZBTkNFRGBcbiogICBgTkZUX0NPTk5MSU1JVGBcblxuRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGlzIGFjdHVhbGx5IHVzYWJsZSB0aHJvdWdoIGdlbmw6IFllcCwgaXQncyByZWdpc3RlcmVkIGluIGBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseWAsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTg4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NTMuNjM5OTI1MDIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIxMjMyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNjU1PW92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTggY21kLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2NjYtXFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc25kX3NlcSxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTY2NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZHBfY3RfbGltaXRfZ2VubF9mYW1pbHksIDAsIGNtZCk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2NjgtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG92c19jdF9saW1pdF9tdWx0aWNhc3RfZ3JvdXAgPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAwMy1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAwNDpzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDA1LVxcdC5oZHJzaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfaGVhZGVyKSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0xMDA9c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKSB7IH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0xMDUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oOjEwNjpleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5O1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC0xMDctI2VuZGlmXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjgxPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgKiBjb25zdCBkcF9nZW5sX2ZhbWlsaWVzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjg3LSNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY4ODpcXHRcXHUwMDI2ZHBfY3RfbGltaXRfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY4OS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTc6NTYuMDYxMTYxMDk5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTQzODQzOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgTGltaXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAgYXJlIGluZGVlZCByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMg4oCTIHRoZXkncmUgcmVnaXN0ZXJlZCB3aXRoaW4gYGRwX2dlbmxfZmFtaWxpZXNgLCB3aGljaCBpcyByZWdpc3RlcmVkIGluIGBkcF9yZWdpc3Rlcl9nZW5sYC4gVGhpcyBpcyB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuIGBvdnNfY3RfZXhlY3V0ZWAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGgsIHNwZWNpZmljYWxseSB2aWEgYG92c19leGVjdXRlX2FjdGlvbnNgIHdoZW4gYSBjb25udHJhY2sgYWN0aW9uIGlzIHRyaWdnZXJlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6XG5cbiogICBgb3ZzX2N0X2V4ZWN1dGVgXG4qICAgYG92c19jdF9saW1pdF9jbWRfc2V0YFxuKiAgIGBvdnNfY3RfbGltaXRfY21kX2RlbGBcbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgXG5cbkFuZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM6XG5cbiogICBgT1BFTlZTV0lUQ0hgXG4qICAgYE5GX0NPTk5UUkFDS2BcbiogICBgTkVURklMVEVSX0FEVkFOQ0VEYFxuKiAgIGBORlRfQ09OTkxJTUlUYFxuXG5JdCdzIGNydWNpYWwgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLiBJIGNoZWNrZWQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGNvbmZpcm1lZCB0aGF0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBhIHRyaXN0YXRlIGNvbmZpZywgYnV0IGl0J3MgKm5vdCogZGlyZWN0bHkgdXNlci1jb25maWd1cmFibGUuIEluc3RlYWQsIGl0J3Mgc2VsZWN0ZWQgYnkgYE5GVF9DT05OTElNSVRgIChhbmQgYE5FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVRgKS4gIFRoZXJlZm9yZSwgZW5hYmxpbmcgYE5GVF9DT05OTElNSVRgIGlzIHRoZSBjb3JyZWN0IHBhdGggZm9yIGVuYWJsaW5nIGNvbm50cmFjayBsaW1pdCBmdW5jdGlvbmFsaXR5LlxuXG5CZXlvbmQgdGhhdCwgdGhlIGJhc2ljIHJlcXVpcmVtZW50cyBhcmU6IGBJTkVUYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgYE5GX0NPTk5UUkFDS2AgaXMgZXNzZW50aWFsLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgbmVlZGVkIGZvciBgTkZUX0NPTk5MSU1JVGAuXG5cblJldmlld2luZyB0aGUgcGF0Y2gsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHJlbGF0ZWQgZnVuY3Rpb25zOlxuXG4qICAgYG92c19jdF9saW1pdF9pbml0YFxuKiAgIGBvdnNfY3RfbGltaXRfZXhpdF9zdGFydGBcbiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoYFxuKiAgIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgXG4qICAgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGBcbiogICBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YFxuKiAgIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YFxuKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgXG5cbkkgY29uZmlybWVkIHRoYXQgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAgaXMgY2FsbGVkIGJ5IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIGJ5IGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgIGJ5IGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCBieSBgb3ZzX2N0X2NvbW1pdGAsIHdoaWNoIGlzIHN1YnNlcXVlbnRseSBjYWxsZWQgYnkgYG92c19jdF9leGVjdXRlYC4gVGhpcyBwcm92aWRlcyBtZSB0aGUgY29ycmVjdCBlbnRyeSBwb2ludHMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZWZhY3RvcmluZyB0aGUgY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgaW4gT3BlbiB2U3dpdGNoIHRvIHV0aWxpemUgUkNVIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHN0cnVjdHVyZS4gVGhpcyBtaXRpZ2F0ZXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBuZXRucyB0ZWFyZG93biBieSBzcGxpdHRpbmcgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzLCBlbnN1cmluZyBhbiBSQ1UgZ3JhY2UgcGVyaW9kLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHRvIHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE9wZW4gdlN3aXRjaCBuZXR3b3JraW5nIHN1YnN5c3RlbS5cblxuR2l2ZW4gdGhlIGlkZW50aWZpZWQgY29uZmlndXJhdGlvbnMgYW5kIGVudHJ5IHBvaW50cywgdGhpcyBjb2RlIGlzICpkZWZpbml0ZWx5KiBmdXp6YWJsZS4gIFRoZSBmdXp6aW5nIHN0cmF0ZWd5IHNob3VsZCBjZW50ZXIgb24gYm90aCB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIChzZXR0aW5nLCBnZXR0aW5nLCBkZWxldGluZyBsaW1pdHMpIGFuZCB0aGUgcGFja2V0IGV4ZWN1dGlvbiBwYXRoIHdoZXJlIGxpbWl0cyBhcmUgY2hlY2tlZC5cblxuRmluYWxseSwgSSBjaGVja2VkIGBvdnNfY3RfbGltaXRfY21kX3NldGAgdG8gc2VlIGlmIGl0IHdhcyBzdGF0aWMgb3IgaW5saW5lZC4gU2luY2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSBzdHJ1Y3QsIGl0IHdpbGwgKm5vdCogYmUgaW5saW5lZC4gVGhlIGNvbXBpbGVyIGNhbid0IGlubGluZSBhIGZ1bmN0aW9uIHRoYXQncyBwYXJ0IG9mIGEgZnVuY3Rpb24gcG9pbnRlciBhcnJheS4gSXQgd2lsbCBoYXZlIGEgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLCBhbmQgaXMgdGh1cyBwZXJmZWN0bHkgc2FmZSB0byBpbmNsdWRlLlxuXG5UaW1lIHRvIGZlZWQgdGhpcyBpbnRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzc0LCJPdXRwdXRUb2tlbnMiOjI4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MjMuNjA1MDA3ODgxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzU3MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GVF9DT05OTElNSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfZXhlY3V0ZVwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBzdHJ1Y3R1cmUsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0bnMgdGVhcmRvd24uIEl0IHNwbGl0cyB0aGUgZXhpdCBsb2dpYyBpbnRvIGBwcmVfZXhpdGAgYW5kIGBleGl0YCBjYWxsYmFja3MgdG8gZW5zdXJlIGFuIFJDVSBncmFjZSBwZXJpb2QgZWxhcHNlcyBiZWZvcmUgZnJlZWluZyB0aGUgY29ubnRyYWNrIGxpbWl0IHN0YXRlLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGdldHRlci9zZXR0ZXIgbmV0bGluayBjb21tYW5kcyBhbmQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGggdG8gcHJvcGVybHkgdXNlIFJDVSBkZXJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBPcGVuIHZTd2l0Y2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIHBhY2tldCBwcm9jZXNzaW5nLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAsIHdoaWNoIGlzIGEgaGlkZGVuIGNvbmZpZyBzZWxlY3RlZCBieSBgQ09ORklHX05GVF9DT05OTElNSVRgLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgcGFja2V0IGV4ZWN1dGlvbiBwYXRoIHRoYXQgY2hlY2tzIHRoZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORlRfQ09OTkxJTUlUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1UgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2Agc3RydWN0dXJlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gZHVyaW5nIG5ldG5zIHRlYXJkb3duLiBJdCBzcGxpdHMgdGhlIGV4aXQgbG9naWMgaW50byBgcHJlX2V4aXRgIGFuZCBgZXhpdGAgY2FsbGJhY2tzIHRvIGVuc3VyZSBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGVsYXBzZXMgYmVmb3JlIGZyZWVpbmcgdGhlIGNvbm50cmFjayBsaW1pdCBzdGF0ZS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBnZXR0ZXIvc2V0dGVyIG5ldGxpbmsgY29tbWFuZHMgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoIHRvIHByb3Blcmx5IHVzZSBSQ1UgZGVyZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT3BlbiB2U3dpdGNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZywgc28gaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCB3aGljaCBpcyBhIGhpZGRlbiBjb25maWcgc2VsZWN0ZWQgYnkgYENPTkZJR19ORlRfQ09OTkxJTUlUYC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIHBhY2tldCBleGVjdXRpb24gcGF0aCB0aGF0IGNoZWNrcyB0aGUgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODoyMy43Mzk3NzM0MDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDY1MjgwOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MjMuNzQwMzE4ODk3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2MDY0NzI4ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbGlmZXRpbWUgaXNzdWUgd2l0aCBgY3RfbGltaXRfaW5mb2AgaW4gdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbiAoYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBldGMuKSBhbmQgc2VwYXJhdGluZyB0aGUgdGVhcmRvd24gaW50byBgLnByZV9leGl0YCBhbmQgYC5leGl0YCBwaGFzZXMgdG8gcmVzcGVjdCBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlLCBhbmQgd2hpbGUgaXQgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBhbGwgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlIChgc3RydWN0IG92c196b25lX2xpbWl0YCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcuIFRoZSBidWdzIHByZXZlbnRlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjIyYzc5NWVhMDI1ODU0ZTliY2I2ODY5NjAxZTlhZWMxYjMyZDFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjU1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCAzOGM2ZjM0Nzc2YzI4Li44Y2E1YmIxNTVlZWI5IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoIWN0X2xpbWl0X2luZm8pXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0Y29ubmNvdW50X2tleSA9IGluZm8tXHUwMDNlem9uZS5pZDtcbiBcbiBcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXHUwMDNlem9uZS5pZCk7XG5AQCAtMTU4NSw0MCArMTU4OSw1NSBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4rXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xuK1x0aWYgKCFpbmZvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbitcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuK1x0aW5mby1cdTAwM2VsaW1pdHMgPVxuIFx0XHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpIHtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghaW5mby1cdTAwM2VsaW1pdHMpIHtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXG4tXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzW2ldKTtcbitcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4rXHRpbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbiBcbi1cdGlmIChJU19FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmIChJU19FUlIoaW5mby1cdTAwM2VkYXRhKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4rXHRcdGtmcmVlKGluZm8tXHUwMDNlbGltaXRzKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHByX2VycihcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cIiwgZXJyKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4rc3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuK3tcbitcdHJldHVybiByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK31cbitcbisvKiBUaGUgQ1QgbGltaXQgc3RhdGUgbXVzdCBiZSBkZXRhY2hlZCBieSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydCgpIGFuZCBhblxuKyAqIFJDVSBncmFjZSBwZXJpb2QgbXVzdCBlbGFwc2UgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcnVucy4gIFRoZSBwZXJuZXQgY29yZVxuKyAqIGd1YXJhbnRlZXMgdGhlIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIHRoZSAucHJlX2V4aXQgYW5kIC5leGl0IGNhbGxiYWNrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IGRhdGE7XG4gXHRpbnQgaTtcbiBcbitcdGlmICghaW5mbylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbkBAIC0xNjI2LDcgKzE2NDUsNyBAQCBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbiBcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdF9saW1pdCwgbmV4dCwgaGVhZCwgaGxpc3Rfbm9kZSlcbi1cdFx0XHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XG4rXHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0fVxuIFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuIFx0a2ZyZWUoaW5mbyk7XG5AQCAtMTY2NSwxMiArMTY4NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgKzE2OTksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNjk1LDYgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiArMTczMSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTczMCw2ICsxNzU0LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgKzE3OTgsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIyLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODQwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUzLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3Miw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODg0LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA1LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTcsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTIsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTgsMTIgKzIwMzksMjkgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyB0aGUgUkNVLXByb3RlY3RlZFxuKyAqIGN0X2xpbWl0X2luZm8gYW5kIHN0b3JlcyBpdCBpbiBvdnNfbmV0LVx1MDAzZWN0X2V4aXRfZGF0YSBmb3JcbisgKiBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0aGUgdGVhcmRvd24gYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZC5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbit7XG4rI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuK1x0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuK1xuK1x0b3ZzX25ldC1cdTAwM2VjdF9leGl0X2RhdGEgPSBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChvdnNfbmV0KTtcbisjZW5kaWZcbit9XG4rXG4rLyogQ29tcGxldGVzIHRoZSBDVCBsaW1pdCB0ZWFyZG93bi4gIFRoZSBwZXJuZXQgY29yZSBndWFyYW50ZWVzIGFuIFJDVVxuKyAqIGdyYWNlIHBlcmlvZCBiZXR3ZWVuIGRldGFjaGluZyB0aGUgc3RhdGUgaW4gb3ZzX2N0X2V4aXRfc3RhcnQoKSBhbmRcbisgKiB0aGlzIGNhbGwsIHNvIG5vIFJDVSByZWFkZXJzIHJlbWFpbi5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4rXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbiAjZW5kaWZcbiBcbiBcdGlmIChvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuaW5kZXggMzE3ZTUyNWM4YTExMy4uYTUxNmU1YmFlNGYzNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXG5AQCAtMTQsNyArMTQsOCBAQCBlbnVtIG92c19rZXlfYXR0cjtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICopO1xuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcbit2b2lkIG92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCk7XG4rdm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKTtcbiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTtcbiBpbnQgb3ZzX2N0X2NvcHlfYWN0aW9uKHN0cnVjdCBuZXQgKiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKiosXG5AQCAtNDAsNyArNDEsOCBAQCB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggZGVkNDZkOTkzYTRlZC4uMzYyZTMyMmZiNDFmNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI3NTcsMTcgKzI3NTcsMjQgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX3ByZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuK3tcbitcdG92c19sb2NrKCk7XG4rXHRvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbitcdG92c191bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbitcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0TElTVF9IRUFEKGhlYWQpO1xuIFxuIFx0b3ZzX2xvY2soKTtcbiBcbi1cdG92c19jdF9leGl0KGRuZXQpO1xuK1x0b3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIG92c19uZXQtXHUwMDNlY3RfZXhpdF9kYXRhKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgXHUwMDI2b3ZzX25ldC1cdTAwM2VkcHMsIGxpc3Rfbm9kZSlcbiBcdFx0X19kcF9kZXN0cm95KGRwKTtcbkBAIC0yNzkxLDYgKzI3OTgsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgb3ZzX25ldF9vcHMgPSB7XG4gXHQuaW5pdCA9IG92c19pbml0X25ldCxcbitcdC5wcmVfZXhpdCA9IG92c19wcmVfZXhpdF9uZXQsXG4gXHQuZXhpdCA9IG92c19leGl0X25ldCxcbiBcdC5pZCAgID0gXHUwMDI2b3ZzX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBvdnNfbmV0KSxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi40NDY1NTNjNTFjMzBlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCwxMCBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8ge1xuICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LlxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXG4gICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy5cbi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLlxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcbisgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4rICogbmV0bnMgdGVhcmRvd24uXG4rICogQGN0X2V4aXRfZGF0YTogQ1QgbGltaXQgc3RhdGUgZGV0YWNoZWQgYXQgLnByZV9leGl0LCBmcmVlZCBhdCAuZXhpdC5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc1LDggQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9leGl0X2RhdGE7XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODoyMy43NDAzMTk1ODdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0Njk4MzI2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgY29yZSBjb25udHJhY2sgY29kZSB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGFsbG9jYXRpb24gYW5kIGhhbmRsaW5nIG9mIGBjdF9saW1pdF9pbmZvYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgZ2l2ZW4gdGhlIHNjb3BlIChmb3VyIGZpbGVzKSBhbmQgdGhlIGNvcmUgbmF0dXJlIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBzZWUgZm9yIGNvbmN1cnJlbmN5LiBUaGV5J3JlIHVzaW5nIGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhleSdyZSBhaW1pbmcgZm9yIGEgbG9ja2xlc3MgYXBwcm9hY2ggZm9yIHJlYWRzLCBhbmQgY2FyZWZ1bGx5IG1hbmFnaW5nIHdyaXRlcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgb3ZzX2N0X2V4aXRfc3RhcnRgIGFuZCBgb3ZzX2N0X2V4aXRfZmluaXNoYCB3aXRoIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBlcm5ldCBjYWxsYmFja3MgaW5kaWNhdGVzIHRoZXkncmUgY2FyZWZ1bGx5IG1hbmFnaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlLCB3aGljaCBpcyBhbHNvIGEgZ29vZCBzaWduLiBMb29rcyBsaWtlIHRoZXkgZml4ZWQgc29tZSBSQ1UgcmVhZCBsb2NrIHBsYWNlbWVudHMgdG9vLiBTbWFydC5cblxuTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IHNhZmV0eSwgYW5kIHRoYXQncyB3aGVyZSBJIHN0YXJ0IHRvIGRpZyBpbi4gTGV0J3Mgc2VlLi4uIFRoZXkndmUgY2hhbmdlZCB0aGUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGluc3BlY3Rpb24uIFRoZSBvbGQgY29kZSBkaXJlY3RseSBhbGxvY2F0ZWQgdG8gYG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mb2AuIFRoZSBuZXcgY29kZSBsb29rcyBsaWtlIGl0IGFsbG9jYXRlcyBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSwgaW5pdGlhbGl6ZXMgaXQsIGFuZCB0aGVuIGFzc2lnbnMgaXQgdG8gYG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mb2AuXG5cbk9rYXksIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdXNlIG9mIGBrbWFsbG9jX29iamAuIEknbGwgYXNzdW1lIHRoYXQncyBqdXN0IGEgbWFjcm8gZm9yIGBrbWFsbG9jKHNpemVvZihvYmopLCBHRlBfS0VSTkVMKWAgZm9yIG5vdywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoZXkncmUgaW5pdGlhbGl6aW5nIGBpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXRgLCBhbGxvY2F0aW5nIGBpbmZvLVx1MDAzZWxpbWl0c2AsIGFuZCBpbml0aWFsaXppbmcgdGhvc2UgaGFzaCBidWNrZXRzLiBUaGV5IGFsc28gaW5pdGlhbGl6ZSBgaW5mby1cdTAwM2VkYXRhYC4gU28gZmFyLCBzbyBnb29kLCBpdCAqbG9va3MqIGxpa2UgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpZWxkcyBpbiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCB0aGF0IGFyZW4ndCBiZWluZyBleHBsaWNpdGx5IHNldC4gR290dGEgY2hlY2sgdGhlIGRlZmluaXRpb24uIEknbGwgbmVlZCB0byBnbyBsb29rIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MsIGJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGEgc3VidGxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpbiBjb25udHJhY2sgY29kZSEgVGhpcyBuZWVkcyBhIHZlcnkgY2FyZWZ1bCBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MzQuMjEwMTU2NTg0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ1NDI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9ODY9c3RydWN0IG92c19jdF9saW1pdCB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk0OnN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyB7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk1LVxcdHUzMiBkZWZhdWx0X2xpbWl0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODozNC4yNzM2MTUxNDdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMTkzMTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYDpcblxuKipEaXZpbmcgaW50byB0aGUgYG92c19jdF9saW1pdF9pbmZvYCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AuIFRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBPVlMgY29ubnRyYWNrIHB1enpsZSwgcmlnaHQ/IEknbSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgY29udGV4dHMgd2hlcmUgSSdkIGVuY291bnRlciB0aGlzIOKAkyBsaWtlbHkgZGVlcCB3aXRoaW4gdGhlIGNvbm50cmFjayBtb2R1bGUgaXRzZWxmLCBwZXJoYXBzIHdoZW4gY29uZmlndXJpbmcgb3IgZXZhbHVhdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gSXQncyB1c2VkIHRvIHN0b3JlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGxpbWl0cyBhcHBsaWVkIHRvIGNvbm5lY3Rpb25zLCBJIGFzc3VtZS4gSSBuZWVkIHRoZSBjb21wbGV0ZSBkZWZpbml0aW9uIHRob3VnaCwgSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoYXQgZmllbGRzIGFyZSBwcmVzZW50LiBXaGF0J3MgdHJhY2tlZD8gSXMgdGhpcyBwZXItZmxvdywgcGVyLXpvbmUsIG9yIHNvbWV0aGluZyBlbHNlPyBJcyBpdCBhIGNvbWJpbmF0aW9uPyBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZXJlIGFyZSBjb3VudGVycyBmb3IgdGhpbmdzIGxpa2UgbnVtYmVyIG9mIGFjdGl2ZSBmbG93cywgcGVyaGFwcyBzb21lIHRpbWVzdGFtcHMgcmVsYXRlZCB0byBob3cgbG9uZyB0aGUgbGltaXQgaGFzIGJlZW4gYWN0aXZlLCBhbmQgbWF5YmUgZXZlbiBmbGFncyBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHN0YXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbGltaXQg4oCTIFwib3ZlciBsaW1pdFwiLCBcImFwcHJvYWNoaW5nIGxpbWl0LFwiIFwiY2xlYXJlZFwiIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGUgZmllbGRzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGltaXQgYXBwbGljYXRpb24sIHBvbGljeSwgYW5kIGhvdyB0byBiZXN0IG1hbmFnZSBpdCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcmVkaWN0IHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU4OjM3Ljk5NTU0OTMwOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdHUxNiB6b25lO1xcbiAgOTE6XFx0XFx0dTMyIGxpbWl0O1xcbiAgOTI6XFx0fTtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcXG4gIDk1OlxcdFxcdHUzMiBkZWZhdWx0X2xpbWl0O1xcbiAgOTY6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmxpbWl0cztcXG4gIDk3OlxcdFxcdHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqZGF0YTtcXG4gIDk4OlxcdH07XFxuICA5OTpcXHRcXG4gMTAwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdF9saW1pdF9wb2xpY3lbT1ZTX0NUX0xJTUlUX0FUVFJfTUFYICsgMV0gPSB7XFxuIDEwMTpcXHRcXHRbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0gPSB7IC50eXBlID0gTkxBX05FU1RFRCwgfSxcXG4gMTAyOlxcdH07XFxuIDEwMzpcXHQjZW5kaWZcXG4gMTA0OlxcdFxcbiAxMDU6XFx0c3RhdGljIGJvb2wgbGFiZWxzX25vbnplcm8oY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMpO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKTtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0c3RhdGljIHUxNiBrZXlfdG9fbmZwcm90byhjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6MzcuOTk1NzcwODE4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MzEyNDQ3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiBhbiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGlzc3VlLCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIG5ldG5zIChuZXR3b3JrIG5hbWVzcGFjZSkgZXhpdCBvciBjb25jdXJyZW50IGFjY2VzcyB0byBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEuIFRoZSBjb3JlIG9mIHRoZSBmaXggcmV2b2x2ZXMgYXJvdW5kIHRoZSBwcm9wZXIgdXNlIG9mIFJDVSBwcmltaXRpdmVzOiBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCwgYW5kIHNvIG9uLiBUaGlzIG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsIGZvciBoYW5kbGluZyBjb25jdXJyZW50IGFjY2VzcyBhbmQgcHJvdGVjdGluZyBkYXRhIGR1cmluZyB1cGRhdGVzIGFuZCBkZWxldGlvbnMgd2l0aGluIGFuIFJDVSBjb250ZXh0LlxuXG5JIHNlZSB0aGV5J3ZlIGFkZGVkIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHdoaWNoIGFyZSBwcm9iYWJseSB0aGVyZSB0byBtYW5hZ2UgdGhlIFJDVSBncmFjZSBwZXJpb2RzIGVmZmVjdGl2ZWx5IGR1cmluZyBhIG5ldG5zIHRlYXJkb3duLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiBhYm91dCB0aGUgbmV0bnMgZXhpdCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBwcmV2ZW50IGEgc2NlbmFyaW8gd2hlcmUgc29tZXRoaW5nIGlzIGZyZWVkIHdoaWxlIGl0J3Mgc3RpbGwgYmVpbmcgYWNjZXNzZWQsIG9yIHdoZXJlIGEgcG9pbnRlciBiZWNvbWVzIE5VTEwgYmVmb3JlIGl0cyB1c2UuIEdvb2QsIHRoYXQncyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgY2xlYXIsIHdlbGwtdW5kZXJzdG9vZCBwcm9ibGVtLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBjYXRjaGluZyB0aGUgZXJyb3JzLCBhbmQgdGhhdCdzIGdvb2QgdmFsaWRhdGlvbiB0b28uXG5cbkkndmUgY2hlY2tlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXM6IGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AsIGFuZCBgZGF0YWAuIEFsbCB0aHJlZSBhcmUgaW5pdGlhbGl6ZWQgaW4gYG92c19jdF9saW1pdF9pbml0YC4gVGhhdCdzIGltcG9ydGFudDsgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhZGluZyB0byB2dWxuZXJhYmlsaXRpZXMgaXMgYSBjb25zdGFudCBjb25jZXJuLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHBhZGRpbmcsIHNvIHRoYXQncyBhbm90aGVyIGNoZWNrLlxuXG5JIGRpZCBhIHF1aWNrIHJldmlldyBvZiB0aGUgZnVuY3Rpb25zIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgIGFuZCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGFuZCB0aGUgcGF0Y2ggbm93IGNhbGxzIHRoZW0gd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuIFRoYXQncyBnb29kIHByYWN0aWNlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgZG9pbmcgYW55dGhpbmcgc25lYWt5IGxpa2UgcGFzc2luZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBidXQgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaXMgb25seSBhYm91dCByZWFkaW5nIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIGRhdGEsIGl0IHNvdW5kcyBsaWtlIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEknbGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gaXQgaXNuJ3Qgc2VuZGluZyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbHdheXMgZ29vZCB0byBkb3VibGUgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODo0Ny43MjcwMTg2NDFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzgwOlxcdFxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG4xNzgxOlxcdH1cXG4xNzgyOlxcdFxcbjE3ODM6XFx0c3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuMTc4NDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpkYXRhLFxcbjE3ODU6XFx0XFx0XFx0XFx0XFx0XFx0IHUxNiB6b25lX2lkLCB1MzIgbGltaXQsXFxuMTc4NjpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbjE3ODc6XFx0e1xcbjE3ODg6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIGN0X3pvbmU7XFxuMTc4OTpcXHRcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtcXG4xNzkwOlxcdFxcdHUzMiBjb25uY291bnRfa2V5ID0gem9uZV9pZDtcXG4xNzkxOlxcdFxcbjE3OTI6XFx0XFx0em9uZV9saW1pdC56b25lX2lkID0gem9uZV9pZDtcXG4xNzkzOlxcdFxcdHpvbmVfbGltaXQubGltaXQgPSBsaW1pdDtcXG4xNzk0OlxcdFxcdG5mX2N0X3pvbmVfaW5pdChcXHUwMDI2Y3Rfem9uZSwgem9uZV9pZCwgTkZfQ1RfREVGQVVMVF9aT05FX0RJUiwgMCk7XFxuMTc5NTpcXHRcXG4xNzk2OlxcdFxcdHpvbmVfbGltaXQuY291bnQgPSBuZl9jb25uY291bnRfY291bnRfc2tiKG5ldCwgTlVMTCwgMCwgZGF0YSxcXG4xNzk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNvbm5jb3VudF9rZXkpO1xcbjE3OTg6XFx0XFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbjE3OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1ODo0Ny43MjczNjY4NDFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1NTg4ODU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25jZXJucyBSZWdhcmRpbmcgU3RhY2sgQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWU6IGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBnb2luZyB0byBjYXVzZSBhbnkgcHJvYmxlbXMgbGF0ZXIgb24/IFRoaXMgbWVhbnMgdGhlIGRhdGEgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0cmFjZSBteSB0aG91Z2h0cyBmdXJ0aGVyLCBhcyBJIGJlbGlldmUgdGhlIGNvZGUgY291bGQgcG9zc2libHkgaGF2ZSBhIHByb2JsZW0uXG5cbk5vdywgaXQgaW5pdGlhbGl6ZXMgYHpvbmVfbGltaXQuem9uZV9pZGAgYW5kIGB6b25lX2xpbWl0LmxpbWl0YCwgdGhlbiBjYWxscyBgbmZfY3Rfem9uZV9pbml0YC4gU28sIHRoZSBgc3RydWN0YCBpdHNlbGYgaGFzIGhhZCBtZW1iZXJzIGluaXRpYWxpemVkIHdpdGhpbiBpdCwgYnV0IGlzIHRoZSAqZW50aXJlKiBzdHJ1Y3QgdHJ1bHkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQ/IFNwZWNpZmljYWxseSwgSSBzZWUgYHpvbmVfbGltaXQuY291bnRgIGJlaW5nIHBvcHVsYXRlZCAqYWZ0ZXIqIHRoZSBpbml0aWFsIGFzc2lnbm1lbnRzLiBUaGUgY3JpdGljYWwgbGluZSB0byBleGFtaW5lIGlzIGByZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtgLiBUaGF0IGBubGFfcHV0X25vaGRyYCBmdW5jdGlvbiwgaXQncyBleHBlY3RpbmcgYSBmdWxseSBwb3B1bGF0ZWQgYHN0cnVjdGAgLSBvciBhdCBsZWFzdCwgdGhhdCdzIG15IGFzc3VtcHRpb24sIGFuZCBpdCdzIGNlcnRhaW5seSBiZXN0IHByYWN0aWNlLiBTbyB0aGUgbWFpbiBwcm9ibGVtIGhlcmUgaXMgaWYgYG5sYV9wdXRfbm9oZHJgIHdpbGwgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1iZXJzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBgc2l6ZW9mKHpvbmVfbGltaXQpYCBjb3JyZWN0bHkgcmVmbGVjdHMgdGhlIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHBhZGRpbmcsIGFuZCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0IGlzIGJlaW5nIGV4cG9zZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgbWVtYmVycyBpbiBgc3RydWN0IG92c196b25lX2xpbWl0YCB0aGF0IG1heSByZXF1aXJlIGluaXRpYWxpemF0aW9uIGJ5IGBuZl9jdF96b25lX2luaXRgLiBJJ20gY29uY2VybmVkIGFib3V0IHJlbHlpbmcgb24gdGhlIGNvbXBpbGVyIHRvIGluaXRpYWxpemUgYW55IHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgdGhlIGBzdHJ1Y3RgLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW9yIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHN0cnVjdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTUwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6NTIuODgzMjU5MjAzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY1ODcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg9MTE3OD1lbnVtIG92c19jdF9saW1pdF9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oLTExODctXFxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg6MTE4ODpzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQge1xcbmluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oLTExODktXFx0aW50IHpvbmVfaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU4OjUyLjk1OTkyNzAwNVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM5NDgzOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggS2VybmVsIEhlYWRlcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgT3BlbiB2U3dpdGNoIGtlcm5lbCBpbnRlZ3JhdGlvbiwgYW5kIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBhcmUgcHJvYmFibHkgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oYC4gTm93LCB0aGUgdHJpY2t5IHBhcnQgaXMgcGlucG9pbnRpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIHdpdGhpbiB0aGF0IGhlYWRlci4gQmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSBhbmQgdGhlIG5hdHVyZSBvZiB3aGF0IEknbSBsb29raW5nIGZvciwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTE4OCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEknbGwgZm9jdXMgbXkgaW5pdGlhbCBzY2FuIHRoZXJlLCBsb29raW5nIGZvciBzdHJ1Y3R1cmVzLCBlbnVtcywgb3IgbWFjcm9zIHRoYXQgc2VlbSByZWxldmFudCB0byB0aGUgc3BlY2lmaWMgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHJlbGF0ZWQgdG8gdGhlIG92cyBrZXJuZWwgbW9kdWxlIHRoYXQgaXMgY29tbXVuaWNhdGluZyB0byB1c2VyIHNwYWNlLiBMaW5lIDExODggaXMgZ29pbmcgdG8gYmUgbXkgYW5jaG9yIHRvIHN0YXJ0LiBJJ2xsIHpvb20gaW4gcXVpY2tseSwgbG9va2luZyBmb3IgZmFtaWxpYXIgcGF0dGVybnMgYW5kIGxpa2VseSBjYW5kaWRhdGVzIGZvciBjbG9zZXIgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTg6NTYuOTk5NDEzNzkzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTg1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTg1OlxcdFxcbjExODY6XFx0I2RlZmluZSBPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUgLTFcXG4xMTg3OlxcdFxcbjExODg6XFx0c3RydWN0IG92c196b25lX2xpbWl0IHtcXG4xMTg5OlxcdFxcdGludCB6b25lX2lkO1xcbjExOTA6XFx0XFx0X191MzIgbGltaXQ7XFxuMTE5MTpcXHRcXHRfX3UzMiBjb3VudDtcXG4xMTkyOlxcdH07XFxuMTE5MzpcXHRcXG4xMTk0OlxcdGVudW0gb3ZzX2RlY190dGxfYXR0ciB7XFxuMTE5NTpcXHRcXHRPVlNfREVDX1RUTF9BVFRSX1VOU1BFQyxcXG4xMTk2OlxcdFxcdE9WU19ERUNfVFRMX0FUVFJfQUNUSU9OLFxcdC8qIE5lc3RlZCBzdHJ1Y3QgbmxhdHRyICovXFxuMTE5NzpcXHRcXHRfX09WU19ERUNfVFRMX0FUVFJfTUFYXFxuMTE5ODpcXHR9O1xcbjExOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU4OjU2Ljk5OTU3MzY5M1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYyNDAxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IG92c196b25lX2xpbWl0YC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgem9uZV9pZGAsIGBsaW1pdGAsIGFuZCBgY291bnRgLCBhbGwgaW50ZWdlcnMsIGFsbCA0IGJ5dGVzIGVhY2gsIGFkZGluZyB1cCB0byAxMiBieXRlcyB0b3RhbC4gTm8gcGFkZGluZyB0byB3b3JyeSBhYm91dCwgYXNzdW1pbmcgdGhlIHN0YW5kYXJkIDQtYnl0ZSBhbGlnbm1lbnQsIHdoaWNoIGlzIGNvbXBsZXRlbHkgZXhwZWN0ZWQuIFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpbiB0aGlzIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZDogYHpvbmVfaWRgIGhhcyBhIHZhbHVlLCBgbGltaXRgIGhhcyBhIHZhbHVlLCBgY291bnRgIGhhcyBhIHZhbHVlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzdHJ1Y3R1cmUgaXMgY29ycmVjdGx5IHBvcHVsYXRlZCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IHRvdWNoIHRoZSBzdHJ1Y3R1cmUncyBmaWVsZHMgb3IgaW5pdGlhbGl6YXRpb247IGl0IG9ubHkgbW9kaWZpZXMgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcm91bmQgaXQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgZGVhbGluZyB3aXRoIHNvbWUgc29ydCBvZiBjb25jdXJyZW5jeSBvciBSQ1UgaXNzdWUuXG5cblRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGxvY2tpbmcgc3VnZ2VzdHMgaXQncyBhaW1pbmcgdG8gZml4IGEgcmFjZSBjb25kaXRpb24uIEl0J3MgbGlrZWx5IHRyeWluZyB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNvbWV0aGluZyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkIGZsYWcuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmIGFnYWluOlxuXG5gYGBjXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuK1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbitcdGlmICghaW5mbylcbmBgYFxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIGBrbWFsbG9jX29iamA/IFRoYXQncyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgbWFjcm8uIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhbiBPcGVuIHZTd2l0Y2gtc3BlY2lmaWMgbWFjcm8uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgT3BlbiB2U3dpdGNoIHNvdXJjZSBvciBpbmNsdWRlIGZpbGVzIHRvIGZpbmQgb3V0IHdoYXQgYGttYWxsb2Nfb2JqYCBhY3R1YWxseSBkb2VzLiBJdCdzIHByb2JhYmx5IGEgd3JhcHBlciBhcm91bmQgYGttYWxsb2NgIHRvIGhhbmRsZSBvYmplY3QgYWxsb2NhdGlvbiwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBpdHMgdXNlIGhlcmUgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgcGF0Y2gncyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjU5OjA0LjU2MTk3OTM3M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3Nzk5OTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUga21hbGxvY19vYmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEyMC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTIxOiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjItXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzItICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzMzojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzQtXFx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgQ09VTlQpXFxuLS1cXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxcbmxpYi9kZWNvbXByZXNzX3VueHouYzoxNjQ6I2RlZmluZSBrbWFsbG9jX29iaih0eXBlKSBtYWxsb2Moc2l6ZW9mKHR5cGUpKVxcbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjUtI2RlZmluZSBrZnJlZShwdHIpIGZyZWUocHRyKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oPTYzPXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19hcnJheSh1bnNpZ25lZCBuLCBzaXplX3QgcywgZ2ZwX3QgZ2ZwKVxcbi0tXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo2ODojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjktXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSksIDApKVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6NzE6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzItXFx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSkgKiAoQ09VTlQpLCAwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTk6MDYuODM5OTgzNzc1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTY1MDI0ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBhbmQgc2VlIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgZXhwb3NlZC4gYGttYWxsb2Nfb2JqYCwgYXMgSSByZWNhbGwsIHVzZXMgYGttYWxsb2NgLCB3aGljaCBkb2Vzbid0IHplcm8gbWVtb3J5LiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuSSBzZWUgYGluZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmpgLCBhbmQgdGhlbiBpdHMgZmllbGRzIChgZGVmYXVsdF9saW1pdGAsIGBsaW1pdHNgLCBgZGF0YWApIGFyZSBpbml0aWFsaXplZC4gSSBhbHNvIGhhZCBhIHF1aWNrIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGl0c2VsZiB0byBjaGVjayBmb3IgYW55IHBhZGRpbmcgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdGhhdCA0LWJ5dGUgcGFkZGluZyBhZnRlciBgZGVmYXVsdF9saW1pdGAgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIHdoaWNoIGlzIHRoZXJlLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhpcyBzdHJ1Y3R1cmUgZXZlbiBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IE5vLCBpdCdzIGludGVybmFsLiBMaW1pdHMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCwgd2hpY2ggYWxsb2NhdGVzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3RydWN0dXJlLCBgc3RydWN0IG92c196b25lX2xpbWl0YCwgb24gdGhlIHN0YWNrLiBgc3RydWN0IG92c196b25lX2xpbWl0YCBoYXMgbm8gcGFkZGluZy4gU28gdGhlIHBhZGRpbmcgaW4gYG92c19jdF9saW1pdF9pbmZvYCBkb2Vzbid0IG1hdHRlciBmcm9tIGEgdXNlci1zcGFjZSBwZXJzcGVjdGl2ZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgYWJvdXQgY29uY3VycmVuY3kgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgUkNVLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgZGlyZWN0IGBrbWFsbG9jYCBhbGxvY2F0aW9uIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCwgYW5kIGxhdGVyIGZyZWVkIGl0IGluIGBvdnNfY3RfbGltaXRfZXhpdGAuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBpbmZvYCwgaW5pdGlhbGl6ZXMgaXQgZnVsbHksIGFuZCB0aGVuIHVzZXMgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gc2FmZWx5IG1ha2UgaXQgYXZhaWxhYmxlLiBBY2Nlc3MgaXMgbm93IGRvbmUgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAgYW5kIGBvdnNsX2RlcmVmZXJlbmNlYC4gVGhpcyBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4sIHdoaWNoIEkndmUgc2VlbiBiZWZvcmUuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCBwcm90ZWN0aW5nIGFnYWluc3QgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucywgdGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuXG5cblNvLCB0aGUgYnVncyBiZWluZyBhZGRyZXNzZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIFJDVS4gVGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBzY3JlYW1zIFwiS01TQU5cIiBhdCBtZS4gSXQncyBhIGNsZWFuIFJDVSBmaXguIEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMgdG8gYE5lZWRzS01TQU49ZmFsc2VgIHdpdGggdGhlIHJlYXNvbmluZyBJIGp1c3QgbGFpZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDEwLCJPdXRwdXRUb2tlbnMiOjI0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1OToxOS44MDUwMTEzOTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsaWZldGltZSBpc3N1ZSB3aXRoIGBjdF9saW1pdF9pbmZvYCBpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgcHJvcGVyIFJDVSBwcm90ZWN0aW9uIChgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4pIGFuZCBzZXBhcmF0aW5nIHRoZSB0ZWFyZG93biBpbnRvIGAucHJlX2V4aXRgIGFuZCBgLmV4aXRgIHBoYXNlcyB0byByZXNwZWN0IFJDVSBncmFjZSBwZXJpb2RzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUsIGFuZCB3aGlsZSBpdCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgICh3aGljaCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSksIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgaXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgKGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgKSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgY29udGFpbnMgbm8gcGFkZGluZy4gVGhlIGJ1Z3MgcHJldmVudGVkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbGlmZXRpbWUgaXNzdWUgd2l0aCBgY3RfbGltaXRfaW5mb2AgaW4gdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbiAoYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBldGMuKSBhbmQgc2VwYXJhdGluZyB0aGUgdGVhcmRvd24gaW50byBgLnByZV9leGl0YCBhbmQgYC5leGl0YCBwaGFzZXMgdG8gcmVzcGVjdCBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlLCBhbmQgd2hpbGUgaXQgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCAod2hpY2ggZG9lcyBub3QgemVybyBtZW1vcnkpLCBhbGwgaXRzIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlIChgc3RydWN0IG92c196b25lX2xpbWl0YCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcuIFRoZSBidWdzIHByZXZlbnRlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhznh8[1] Phase: Succeeded StartedAt: 2026-08-19 09:59:32 +0000 UTC FinishedAt: 2026-08-19 09:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 09:59:32 +0000 UTC FinishedAt: 2026-08-19 09:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2] Phase: Succeeded StartedAt: 2026-08-19 09:59:32 +0000 UTC FinishedAt: 2026-08-19 13:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 09:59:32 +0000 UTC FinishedAt: 2026-08-19 13:41:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 09:59:32 +0000 UTC FinishedAt: 2026-08-19 09:59:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 09:59:32 +0000 UTC FinishedAt: 2026-08-19 09:59:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowhznh8/series-workflowhznh8-convert-artifact-990174419/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 09:59:42 +0000 UTC FinishedAt: 2026-08-19 10:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 09:59:42 +0000 UTC FinishedAt: 2026-08-19 10:16:16 +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:*adb08182-d640-4477-a855-543153faa79d,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-workflowhznh8/series-workflowhznh8-convert-artifact-990174419/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": "465b88da-869b-4b7a-ac78-9b5b21e2c05c", "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-workflowhznh8/series-workflowhznh8-build-action-183771137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 09:59:42 +0000 UTC FinishedAt: 2026-08-19 10:16:06 +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:*adb08182-d640-4477-a855-543153faa79d,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-workflowhznh8/series-workflowhznh8-convert-artifact-990174419/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": "465b88da-869b-4b7a-ac78-9b5b21e2c05c", "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-workflowhznh8/series-workflowhznh8-build-action-183771137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 10:16:16 +0000 UTC FinishedAt: 2026-08-19 10:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 10:16:16 +0000 UTC FinishedAt: 2026-08-19 10:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 10:16:16 +0000 UTC FinishedAt: 2026-08-19 10:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 10:16:16 +0000 UTC FinishedAt: 2026-08-19 10:16:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowhznh8/series-workflowhznh8-convert-artifact-1192048074/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 10:16:26 +0000 UTC FinishedAt: 2026-08-19 10:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 10:16:26 +0000 UTC FinishedAt: 2026-08-19 10:18:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*465b88da-869b-4b7a-ac78-9b5b21e2c05c,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-workflowhznh8/series-workflowhznh8-build-action-183771137/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-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 10:18:30 +0000 UTC FinishedAt: 2026-08-19 10:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 10:18:30 +0000 UTC FinishedAt: 2026-08-19 10:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 10:18:30 +0000 UTC FinishedAt: 2026-08-19 10:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 10:18:30 +0000 UTC FinishedAt: 2026-08-19 10:35:57 +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:*adb08182-d640-4477-a855-543153faa79d,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-workflowhznh8/series-workflowhznh8-convert-artifact-1192048074/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": "4ee80491-7523-4a7e-955a-ac0b6f081f3d", "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-workflowhznh8/series-workflowhznh8-build-action-2019924462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 10:18:30 +0000 UTC FinishedAt: 2026-08-19 10:35:47 +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:*adb08182-d640-4477-a855-543153faa79d,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-workflowhznh8/series-workflowhznh8-convert-artifact-1192048074/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": "4ee80491-7523-4a7e-955a-ac0b6f081f3d", "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-workflowhznh8/series-workflowhznh8-build-action-2019924462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 10:35:57 +0000 UTC FinishedAt: 2026-08-19 10:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 10:35:57 +0000 UTC FinishedAt: 2026-08-19 10:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 10:35:57 +0000 UTC FinishedAt: 2026-08-19 10:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 10:35:57 +0000 UTC FinishedAt: 2026-08-19 10:37:46 +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:*4ee80491-7523-4a7e-955a-ac0b6f081f3d,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-workflowhznh8/series-workflowhznh8-build-action-2019924462/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-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 10:37:56 +0000 UTC FinishedAt: 2026-08-19 13:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 10:37:56 +0000 UTC FinishedAt: 2026-08-19 13:41:01 +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":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"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:*465b88da-869b-4b7a-ac78-9b5b21e2c05c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4ee80491-7523-4a7e-955a-ac0b6f081f3d,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-workflowhznh8/series-workflowhznh8-build-action-183771137/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-workflowhznh8/series-workflowhznh8-build-action-2019924462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 10:37:56 +0000 UTC FinishedAt: 2026-08-19 10:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 10:37:56 +0000 UTC FinishedAt: 2026-08-19 10:38:00 +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":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"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-workflowhznh8/series-workflowhznh8-convert-artifact-393276511/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 10:37:56 +0000 UTC FinishedAt: 2026-08-19 10:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 10:37:56 +0000 UTC FinishedAt: 2026-08-19 10:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 10:37:56 +0000 UTC FinishedAt: 2026-08-19 10:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 10:38:06 +0000 UTC FinishedAt: 2026-08-19 13:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhznh8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_execute","ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_ADVANCED","NFT_CONNLIMIT"],"series_id":"33372ded-292a-4abd-a0a9-52d65369fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 10:38:06 +0000 UTC FinishedAt: 2026-08-19 13:40:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*465b88da-869b-4b7a-ac78-9b5b21e2c05c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4ee80491-7523-4a7e-955a-ac0b6f081f3d,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-workflowhznh8/series-workflowhznh8-build-action-183771137/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-workflowhznh8/series-workflowhznh8-build-action-2019924462/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-workflowhznh8/series-workflowhznh8-convert-artifact-393276511/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,}