Name: series-workflow6l9bp Phase: Succeeded StartedAt: 2026-08-11 09:58:20 +0000 UTC FinishedAt: 2026-08-11 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[0] Phase: Succeeded StartedAt: 2026-08-11 09:58:20 +0000 UTC FinishedAt: 2026-08-11 10:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 09:58:20 +0000 UTC FinishedAt: 2026-08-11 10:15:44 +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": "f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "39a107c6-a4a9-41fd-b199-17f0428dd2b7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_execute" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgZmVhdHVyZSwgZml4aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGxpbWl0IGNoZWNraW5nIGxvZ2ljIGR1cmluZyBwYWNrZXQgZXhlY3V0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGZlYXR1cmVzIGluIG9wZW52c3dpdGNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDk5ZWQwOTQxMzg3YjNkOWMwOWM2YTQyNGI5ZmY2MzZkY2E0MDM0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEwOjE0OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uY2M2ZWE0MDE0YzE2YSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuJiM0MztcdC8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi9cbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTY2NSwxMiAmIzQzOzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE2NzksNiAmIzQzOzE2OTEsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICYjNDM7MTcwOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiAmIzQzOzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE3MjMsNiAmIzQzOzE3MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiAmIzQzOzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3NzMsNiAmIzQzOzE3OTAsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiAmIzQzOzE4MTQsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiAmIzQzOzE4MzIsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICYjNDM7MTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgJiM0MzsxODY0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDggJiM0MzsxODc2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xODg0LDcgJiM0MzsxODk3LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggJiM0MzsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgJiM0MzsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXG5AQCAtMTkzMiwxOCAmIzQzOzE5NDQsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uMDZjNjk1NmZiMWRjNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE2NCw3ICYjNDM7MTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcbiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC5cbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXG4tICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy5cbiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuJiM0MzsgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4mIzQzOyAqIG5ldG5zIHRlYXJkb3duLlxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXG4gICovXG4gc3RydWN0IG92c19uZXQge1xuQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgZmVhdHVyZSwgZml4aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGxpbWl0IGNoZWNraW5nIGxvZ2ljIGR1cmluZyBwYWNrZXQgZXhlY3V0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGZlYXR1cmVzIGluIG9wZW52c3dpdGNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDk5ZWQwOTQxMzg3YjNkOWMwOWM2YTQyNGI5ZmY2MzZkY2E0MDM0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDEwOjE0OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCmluZGV4IDk1Njk3ZDRlMTZlNjQuLmNjNmVhNDAxNGMxNmEgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCWludCBpOwogCiYjNDM7CWluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sIE5VTEwsCiYjNDM7CQkJCSAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwomIzQzOwkvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwogCW5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby0mZ3Q7ZGF0YSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKQEAgLTE2NjUsMTIgJiM0MzsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNjc5LDYgJiM0MzsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE2OTUsNiAmIzQzOzE3MDgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCWN0X2xpbWl0LSZndDtsaW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJY3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTcwOSwxMiAmIzQzOzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE3MjMsNiAmIzQzOzE3MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKApAQCAtMTczMCw2ICYjNDM7MTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJT1ZTX05MRVJSKHRydWUsICYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiAJCX0gZWxzZSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJY3RfbGltaXRfZGVsKGluZm8sIHpvbmUpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CkBAIC0xNzczLDYgJiM0MzsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgJmFtcDt6b25lX2xpbWl0KTsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKQEAgLTE3OTYsMTIgJiM0MzsxODE0LDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCQkmYW1wO3pvbmUpKSkgewogCQkJT1ZTX05MRVJSKHRydWUsICYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiAJCX0gZWxzZSB7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQlsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTsKIAogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQkJbmV0LCBpbmZvLSZndDtkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTE4MTYsNiAmIzQzOzE4MzIsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpyZXBseSkKQEAgLTE4MjgsMTkgJiM0MzsxODQ1LDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQloZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkgewogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLSZndDtkYXRhLAogCQkJCWN0X2xpbWl0LSZndDt6b25lLCBjdF9saW1pdC0mZ3Q7bGltaXQsIHJlcGx5KTsKIAkJCWlmIChlcnIpCi0JCQkJZ290byBleGl0X2VycjsKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAotZXhpdF9lcnI6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTg1MCw3ICYjNDM7MTg2NCw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULApAQCAtMTg2Myw4ICYjNDM7MTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE4ODQsNyAmIzQzOzE4OTcsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCwKQEAgLTE4OTcsOCAmIzQzOzE5MDksOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xOTE4LDcgJiM0MzsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCwKQEAgLTE5MzIsMTggJiM0MzsxOTQ0LDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCWlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCW5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbywKIAkJCXJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfSBlbHNlIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sCiAJCQkJCQkgICAgICByZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfZXJyOwogCiAJbmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpOwogCWdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKaW5kZXggNjk2NjQwZTg4ZmE3ZS4uMDZjNjk1NmZiMWRjNCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE2NCw3ICYjNDM7MTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHsKICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LgogICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy4KICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuCi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLgomIzQzOyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWQKJiM0MzsgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nCiYjNDM7ICogbmV0bnMgdGVhcmRvd24uCiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LgogICovCiBzdHJ1Y3Qgb3ZzX25ldCB7CkBAIC0xNzIsNyAmIzQzOzE3NCw3IEBAIHN0cnVjdCBvdnNfbmV0IHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7CiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbzsKICNlbmRpZgogCWJvb2wgeHRfbGFiZWw7CiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIFJDVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBjb25udHJhY2sgaW1wbGVtZW50YXRpb24gd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IGZpbGVzIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhgLiBJdCBhcHBlYXJzIHRoZXkmIzM5O3JlIGFkZGluZyBSQ1UgKFJlYWQtQ29weSBVcGRhdGUpIHByb3RlY3Rpb24gZm9yIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYC4gR29vZCwgdGhhdCYjMzk7cyBhIHBvc2l0aXZlIHN0YXJ0IOKAkyBhZGRyZXNzaW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgaXMgYWx3YXlzIGEgd2luLCBlc3BlY2lhbGx5IGluIGEgY3JpdGljYWwgY29tcG9uZW50IGxpa2UgY29ubnRyYWNrLgoKVGhlIGNvZGUmIzM5O3MgdXNpbmcgc3RhbmRhcmQgUkNVIHByaW1pdGl2ZXM6IGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYC4gSSBhbHNvIHNlZSBgb3ZzbF9kZXJlZmVyZW5jZSgpYCBiZWluZyB1c2VkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIE9WUyBjb2RlYmFzZS4gVGhlIGNoYW5nZXMgdG8gYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCB0byBub3cgYmUgY2FsbGVkIHdpdGggYW4gUkNVIHJlYWQgbG9jayBoZWxkIGFsc28gbWFrZSBzZW5zZS4gRW5zdXJpbmcgdGhlIGFjY2VzcyB0byB0aGUgbGltaXQgZGF0YSBpcyBwcm90ZWN0ZWQgZHVyaW5nIHJlYWRzIGlzIGNydWNpYWwuIEFuZCBmaW5hbGx5LCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGhvbGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBuZWVkIHRvIHByb3RlY3QgdGhlIGRhdGEgd2l0aCBhbiBSQ1UgbG9jay4gVGhpcyBjbGVhcmx5IGluZGljYXRlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFkZHJlc3NpbmcgZWl0aGVyIGEgY29uY3VycmVuY3kgYnVnIG9yIGFuIFJDVSB1c2FnZSBidWcgcmVsYXRlZCB0byBjb25udHJhY2sgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYC4gU28sIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gU2luY2UgdGhpcyBpcyBpbiBPcGVuIHZTd2l0Y2gsIG15IGluc3RpbmN0IGlzIHRoYXQgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19PUEVOVlNXSVRDSGAgYW5kIHBvc3NpYmx5IGBDT05GSUdfT1BFTlZTV0lUQ0hfQ09OTlRSQUNLYCBhcyB3ZWxsLiBMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIENvbm50cmFjayBTdXBwb3J0KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbm50cmFjayBzaXR1YXRpb24sIHNvIG15IGZpcnN0IG1vdmUgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nOyBpdCYjMzk7cyB0aGUgdXN1YWwgc3BvdCB0byBjb25maWd1cmUga2VybmVsIGZlYXR1cmVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgd2l0aGluIE9wZW4gdlN3aXRjaC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIGNvbm50cmFjayB0aGVyZSDigJMgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCYjMzk7cyBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzLCBhbmQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yIHdpdGhpbiBPVlMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZpbGUgcmV2ZWFscy4uLiBUaW1lIHRvIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSF9DT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR19PUEVOVlNXSVRDSGAgYWN0dWFsbHkgcmVsaWVzIG9uLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgcmlnaHQ/IFRvIHByb3Blcmx5IHVuZGVyc3RhbmQgaXRzIGltcGFjdCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUsIEkgbmVlZCB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBtYXliZSBzb21lIGhlYWRlciBmaWxlcywgYW5kIGRlZmluaXRlbHkgc29tZSBjcm9zcy1yZWZlcmVuY2luZy4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBhIGNoYWluIG9mIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZS4gVGltZSB0byBnZXQgdG8gd29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgT3BlbiB2U3dpdGNoIGlzIGEgbXVsdGlsYXllciBFdGhlcm5ldCBzd2l0Y2ggdGFyZ2V0ZWQgYXQgdmlydHVhbGl6ZWRcbiAgMjM6XHRcdCAgZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24gdG8gc3VwcG9ydGluZyBhIHZhcmlldHkgb2YgZmVhdHVyZXNcbiAgMjQ6XHRcdCAgZXhwZWN0ZWQgaW4gYSB0cmFkaXRpb25hbCBoYXJkd2FyZSBzd2l0Y2gsIGl0IGVuYWJsZXMgZmluZS1ncmFpbmVkXG4gIDI1Olx0XHQgIHByb2dyYW1tYXRpYyBleHRlbnNpb24gYW5kIGZsb3ctYmFzZWQgY29udHJvbCBvZiB0aGUgbmV0d29yay4gIFRoaXNcbiAgMjY6XHRcdCAgY29udHJvbCBpcyB1c2VmdWwgaW4gYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zIGJ1dCBpc1xuICAyNzpcdFx0ICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGluIG11bHRpLXNlcnZlciB2aXJ0dWFsaXphdGlvbiBkZXBsb3ltZW50cyxcbiAgMjg6XHRcdCAgd2hpY2ggYXJlIG9mdGVuIGNoYXJhY3Rlcml6ZWQgYnkgaGlnaGx5IGR5bmFtaWMgZW5kcG9pbnRzIGFuZCB0aGVcbiAgMjk6XHRcdCAgbmVlZCB0byBtYWludGFpbiBsb2dpY2FsIGFic3RyYWN0aW9ucyBmb3IgbXVsdGlwbGUgdGVuYW50cy5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcbiAgMzI6XHRcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcbiAgMzM6XHRcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxuICAzNDpcdFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxuICAzNzpcdFx0ICB1dGlsaXRpZXMuXG4gIDM4Olx0XG4gIDM5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgNDA6XHRcdCAgY2FsbGVkIG9wZW52c3dpdGNoLlxuICA0MTpcdFxuICA0MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbiAgNDU6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiAgNDY6XHRcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcbiAgNDc6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFXG4gIDQ4Olx0XHRkZWZhdWx0IE9QRU5WU1dJVENIXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBPcGVuIHZTd2l0Y2ggd2lsbCBiZSBhYmxlIGNyZWF0ZSBHUkVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgT3BlbiB2U3dpdGNoIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBPUEVOVlNXSVRDSGAgaGFzIHNvbWUgcHJldHR5IHNwZWNpZmljIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCBpdCBjbGVhcmx5IGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbmV0d29yay1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFRoZW4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCwgYCFORl9DT05OVFJBQ0sgfHwgLi4uYC4gVGhpcyB0ZWxscyBtZSB0aGF0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVpdGhlciBleHBsaWNpdGx5IGRpc2FibGVkLCBvciBpdCByZWxpZXMgb24gc29tZSBvdGhlciBjb25kaXRpb24uIFNpbmNlIEkmIzM5O20gYWltaW5nIGZvciBmdWxsIGZlYXR1cmUgc3VwcG9ydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjb25uZWN0aW9uIHRyYWNraW5nIHBpZWNlLgoKVG8gZW5hYmxlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZlYXR1cmVzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkLiAgYE5GX0NPTk5UUkFDS2Agc2VlbXMgbGlrZSB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCBsaWtlbHkgYWRkcyBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvciBtZXRyaWNzLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgc2V0dGluZyB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgZGVmaW5lZCBhcyBhIHRyaXN0YXRlIG9wdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIHdlIGVuYWJsZSBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGNydWNpYWxseSwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBXZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0aGF0IG9uZS4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIGNhbiB0ZWxsIGl0IHNwZWNpZmljYWxseSB0YXJnZXRzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCBmdW5jdGlvbnMuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGZ1bmN0aW9ucywgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcy4KCk15IGZvY3VzIHNob3VsZCBiZSBob25lZCBpbiBvbiB0aGVzZSBmdW5jdGlvbnMsIHRoYXQgaXMsIHRoZSBzeW1ib2xzIHRvIHdhdGNoIG91dCBmb3IgYXMgSSBwcm9jZWVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MzY9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2MC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODYxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5NzUtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5NzY6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk3Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHRob3NlIGZ1bmN0aW9uIG5hbWVzOgoKKipDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IE1hbmFnZW1lbnQqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB3aXRoaW4gT3BlbiB2U3dpdGNoLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLiBJJiMzOTttIHNlZWluZyBmb3VyIGtleSBmdW5jdGlvbnMgaGVyZS4gTGV0JiMzOTtzIGJyZWFrIGRvd24gd2hhdCBJIHRoaW5rIHRoZXkgKmRvKjoKCiogICBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgOiBUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSByZXNwb25zaWJsZSBmb3IgKipzZXR0aW5nKiogYSBuZXcgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdC4gVGhhdCBjb3VsZCBtZWFuIHNldHRpbmcgbGltaXRzIG9uIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLCBuZXcgY29ubmVjdGlvbnMsIHJhdGUgbGltaXRpbmcsIGNvbm5lY3Rpb24gdGltZW91dHMgb3Igb3RoZXIgcGFyYW1ldGVycy4gSSYjMzk7ZCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGluIHRoZSBwYXJhbWV0ZXJzIHNwZWNpZnlpbmcgdGhlIG5ldyBsaW1pdHMgYW5kIGxpa2VseSBhIGtleSBpZGVudGlmeWluZyB0aGUgZmxvdyBvciBjb25uZWN0aW9uIHN1YmplY3QgdG8gdGhlIGxpbWl0LgoKKiAgIGBvdnNfY3RfbGltaXRfY21kX2RlbGA6IFRoaXMgb25lIGlzIHRoZSBjb3VudGVycGFydCwgc28gaXQmIzM5O3MgbW9zdCBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgKipkZWxldGluZyoqIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQuIFBlcmhhcHMgaXQmIzM5O3MgcmVtb3ZpbmcgYSBzcGVjaWZpYyBsaW1pdCBlbnRyeSBpZGVudGlmaWVkIGJ5IHRoZSBzYW1lIGtleSB1c2VkIGR1cmluZyB0aGUgc2V0IG9wZXJhdGlvbiwgb3IgbWF5YmUgaXQgcmVzZXRzIGEgYnJvYWRlciByYW5nZSBvZiBsaW1pdHMuCgoqICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBhY2Nlc3Nvci4gSXQgd2lsbCBiZSB1c2VkIHRvICoqcmV0cmlldmUqKiB0aGUgY3VycmVudCBsaW1pdHMsIHBlcmhhcHMgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgb3IgZm9yIHBvbGljeSBlbmZvcmNlbWVudC4gSXQgd291bGQgYWxsb3cgeW91IHRvIHF1ZXJ5IHRoZSBjb25maWd1cmVkIGxpbWl0cyBhbmQgc2VlIHRoZWlyIHZhbHVlcy4KCiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YDogVGhpcyBpcyB0aGUgY3J1Y2lhbCBwYXJ0OyBpdCYjMzk7cyB0aGUgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBjYWxsZWQgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBwcm9iYWJseSBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIGxpa2UgYG92c19jdF9leGVjdXRlYCBvciBhIHNpbWlsYXIgY29ubmVjdGlvbiB0cmFja2luZyBwcm9jZXNzaW5nIHJvdXRpbmUsIHRvICoqY2hlY2sqKiBpZiBhIGdpdmVuIHBhY2tldCYjMzk7cyBmbG93IHZpb2xhdGVzIGFueSBvZiB0aGUgY29uZmlndXJlZCBsaW1pdHMuIEl0IGRldGVybWluZXMgd2hldGhlciBhIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyBwZXJtaXR0ZWQsIGRyb3BwZWQsIG9yIHRocm90dGxlZC4KCkVmZmVjdGl2ZWx5LCB0aGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhIGZ1bGwgc2V0IG9mIGZ1bmN0aW9uYWxpdGllcyBmb3IgbWFuYWdpbmcgY29ubmVjdGlvbiBsaW1pdHMuIEl0IGlzIGEgY29tcGxldGUgc3lzdGVtIHRoYXQgc2V0cywgZGVsZXRlcyBhbmQgcXVlcmllcyB0aGVzZSBsaW1pdHMsIHdpdGggYSBjaGVjayB0aGF0IHdpbGwgZW5zdXJlIHRoYXQgdGhlIGxpbWl0cyBhcmUgYWN0dWFsbHkgZW5mb3JjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9jaGVja19saW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cdFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlx0XHRcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVx0XHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVHJhY2luZyB0aGUgQ29ubmVjdGlvbjogb3ZzX2N0X2NvbW1pdCBhbmQgSXRzIENhbGxlcnMqKgoKQWxyaWdodCwgbXkgYnJhaW4ganVzdCBtYXBwZWQgb3V0IGEgY3J1Y2lhbCBsaW5rOiBgb3ZzX2N0X2NvbW1pdGAgY2FsbHMgYG92c19jdF9jaGVja19saW1pdGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbnRlcmVzdCBpcyBub3cgcGlxdWVkIGJlY2F1c2UgYG92c19jdF9jb21taXRgIGlzIGJlaW5nIGludm9rZWQgYnkgZWl0aGVyIGBfX292c19jdF9leGVjdXRlYCBvciBgb3ZzX2N0X2V4ZWN1dGVgLCB3aGljaCBhcmUgdGhlIHRydWUgZW5naW5lcyBoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIFRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGZsb3csIEkgbmVlZCB0byB6b29tIGluIG9uIGBvdnNfY3RfZXhlY3V0ZWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo1MzM6c3RydWN0IG5mX2Nvbm4gKm92c19jdF9leGVjdXRlZChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTM0LVx0XHRcdFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzEtXHRpZiAoIWN0KVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcdFx0Y3QgPSBvdnNfY3RfZXhlY3V0ZWQobmV0LCBrZXksIGluZm8sIHNrYiwgXHUwMDI2Y3RfZXhlY3V0ZWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3My1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQyLVx0XHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyBFeGVjdXRpb24qKgoKQWxyaWdodCwgc28gYG92c19jdF9leGVjdXRlYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgZWl0aGVyIGEgZGlyZWN0bHkgZXhwb3J0ZWQgZnVuY3Rpb24gKm9yKiBpdCYjMzk7cyBkZWVwbHkgaW52b2x2ZWQgd2l0aGluIGBhY3Rpb25zLmNgLiBHaXZlbiBpdHMgbmFtZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCB0aGUgbGF0dGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgIGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGJlaW5nIGltcGxlbWVudGVkIGF0IHRoaXMgbG93IGxldmVsLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCYjMzk7cyBnZXQgdG8gaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgbWF0Y2hpbmcgZmxvd3MsIHNldHRpbmcgY29ubmVjdGlvbiBzdGF0ZXMsIGFuZCBtYW5pcHVsYXRpbmcgcGFja2V0cyBiYXNlZCBvbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIGluZm9ybWF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIG15IGh1bmNoIGlzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMjU1PXN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMzg1LVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxMzg2Olx0XHRcdGVyciA9IG92c19jdF9leGVjdXRlKG92c19kcF9nZXRfbmV0KGRwKSwgc2tiLCBrZXksXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODctXHRcdFx0XHRcdCAgICAgbmxhX2RhdGEoYSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29ubnRyYWNrIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBgb3ZzX2N0X2V4ZWN1dGVgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhbmQgb2YgY291cnNlLCBgb3ZzX2N0X2V4ZWN1dGVgIGl0c2VsZi4KCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgYXJlIHRob3NlIGBvdnNfY3RfbGltaXRfKmAgZnVuY3Rpb25zIHN0YXRpYz8gQSBxdWljayBjaGVjayBpbiBgY29ubnRyYWNrLmNgIGNvbmZpcm1zIHRoZXkgKmFyZSogZGVjbGFyZWQgYXMgc3RhdGljLiBIb3dldmVyLCBiZWluZyBHZW5sIG9wZXJhdGlvbnMsIHRoZXkgYXJlIGFjY2Vzc2libGUuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyBkbyB0aGV5IGludGVyYWN0PwoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBgb3ZzX2N0X2V4ZWN1dGVgIGl0c2VsZiBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGgvZnJvbSBpdC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCBzcGVjaWZpY2FsbHkgaW4gYGNvbm50cmFjay5jYCwgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MzY9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2MC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODYxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5NzUtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5NzY6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk3Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgSW1wbGVtZW50YXRpb24gZm9yIFN5bWJvbCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG92c19jdF9leGVjdXRlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0IG1lIGV4cGxvcmUgYGNvbm50cmFjay5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGJldHRlciwgbm9uLXN0YXRpYyBvcHRpb25zLiBJJiMzOTttIGxpa2luZyBgb3ZzX2N0X2V4ZWN1dGVgLCBidXQgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCBgb3ZzX2N0X2xpbWl0X2luaXRgPyBOb3BlLCBpdCYjMzk7cyBzdGF0aWMuCgpBaCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCDigJMgdGhhdCBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGEgZ2VubCBjYWxsYmFjayEgU28gdGhlIHByb21wdCB3YW50cyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGFuZCB0aGlzIHdpbGwgKm5vdCogYmUgaW5saW5lZC4gSXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBnZW5sX3NtYWxsX29wc2AsIG1lYW5pbmcgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQuCgpMZXQmIzM5O3MgbWFrZSBzdXJlLCBJIHdhbnQgdG8gY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYmFjayBhdCBgb3ZzX2N0X2V4ZWN1dGVgIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZS4KClJlZ2FyZGluZyB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIHRoZSBtYWluIG9uZXMgYXJlIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBOZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGlzIHRoZSBjb3JyZWN0IG5hbWUuLi4gWWVwLCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLgoKTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLiBJIHJlbWVtYmVyIHRoYXQgYE9QRU5WU1dJVENIYCBkZXBlbmRzIG9uIGBJTkVUYCwgc28gYElORVRgIGlzIG5lZWRlZC4gYE5GX0NPTk5UUkFDS2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgc28gd2UgbmVlZCBgTkVURklMVEVSYCB0b28uIEJ1dCBnZW5lcmFsbHksIHRoZSBwcmVmZXJlbmNlIGlzIHRvIGxpc3Qgb25seSBkaXJlY3QgZGVwZW5kZW5jaWVzLiBTbywgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAgYXJlIHRoZSBjb25maWdzIEkmIzM5O2xsIGJlIG5vdGluZy4KCkkgd2lsbCBhbHNvIGNoZWNrIHRoZSBjb2RlIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBob3cgYElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJU19FTkFCTEVEXFwoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTYxPXN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy03OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4MDojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODEtI2RlZmluZSBPVlNfQ1RfTElNSVRfVU5MSU1JVEVEXHQwXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTg2MD1zdGF0aWMgYm9vbCBsYWJlbHNfbm9uemVybyhjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcwLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3MTojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcyLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc3LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk3ODojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc5LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpKSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1NzM9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4OC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg5OiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTkwLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAxMz1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDI0LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMjU6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMjYtXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAzMj12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAzNS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyMDM2OiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDM3LVx0b3ZzX2N0X2xpbWl0X2V4aXQobmV0LCBvdnNfbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBDb25udHJhY2sgaW4gT1ZTKioKClJpZ2h0LCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGRlZmluaXRlbHkgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBvdnNfY3RfbGltaXRfY21kX3NldGAgd2l0aGluIGBjb25udHJhY2suY2AuIE5lZWQgdG8gYmUgc3VyZSBhYm91dCBhIGZldyB0aGluZ3MuIEZpcnN0LCBpcyBpdCBkZWNsYXJlZCBhcyBgc3RhdGljYD8gWXVwLCBpdCBpcy4gRXhjZWxsZW50LiBNYWtlcyBpdCBhIGRlY2VudCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMuIEl0JiMzOTtzIGFsc28gYSBnZW5sIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdOKAmXMgbm90IGlubGluZWQsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LiBCdXQsIGxldCYjMzk7cyBub3QgbGltaXQgb3VyIHZpZXcgdG8gdGhhdC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBrZWVwIGBvdnNfY3RfZXhlY3V0ZWAgaW4gbWluZCDigJMgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCBjb3VsZCBvZmZlciBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8gdGhlIGRhdGEgZmxvdy4gVGhpbmtpbmcgYHNldC1yZXN1bHRzYCBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBhbmFseXNpcy4gTmVlZCB0byB0ZXN0IHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZ2V0JiMzNDssCiAgICAmIzM0O292c19jdF9leGVjdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUkNVIHByb3RlY3Rpb24gdG8gdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBmZWF0dXJlLCBmaXhpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nLCBkZWxldGluZywgYW5kIGdldHRpbmcgY29ubnRyYWNrIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgbGltaXQgY2hlY2tpbmcgbG9naWMgZHVyaW5nIHBhY2tldCBleGVjdXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgZmVhdHVyZXMgaW4gb3BlbnZzd2l0Y2guJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSQ1UgcHJvdGVjdGlvbiB0byB0aGUgb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGZlYXR1cmUsIGZpeGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgZm9yIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyBjb25udHJhY2sgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBsaW1pdCBjaGVja2luZyBsb2dpYyBkdXJpbmcgcGFja2V0IGV4ZWN1dGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBmZWF0dXJlcyBpbiBvcGVudnN3aXRjaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOTllZDA5NDEzODdiM2Q5YzA5YzZhNDI0YjlmZjYzNmRjYTQwMzRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTQ6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uY2M2ZWE0MDE0YzE2YSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw0NyBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKIHsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGk7CiAKJiM0MzsJaW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7CS8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CiAJbmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLSZndDtkYXRhKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwpAQCAtMTY2NSwxMiAmIzQzOzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE2NzksNiAmIzQzOzE2OTEsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKApAQCAtMTY5NSw2ICYjNDM7MTcwOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJY3RfbGltaXQtJmd0O2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CkBAIC0xNzA5LDEyICYjNDM7MTcyMywxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTcyMyw2ICYjNDM7MTczOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNzMwLDYgJiM0MzsxNzQ2LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3NzMsNiAmIzQzOzE3OTAsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCAmYW1wO3pvbmVfbGltaXQpOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLApAQCAtMTc5NiwxMiAmIzQzOzE4MTQsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJCSZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKLQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpOwogCiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCQluZXQsIGluZm8tJmd0O2RhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTgxNiw2ICYjNDM7MTgzMiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KQpAQCAtMTgyOCwxOSAmIzQzOzE4NDUsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCWhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7CiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tJmd0O2RhdGEsCiAJCQkJY3RfbGltaXQtJmd0O3pvbmUsIGN0X2xpbWl0LSZndDtsaW1pdCwgcmVwbHkpOwogCQkJaWYgKGVycikKLQkJCQlnb3RvIGV4aXRfZXJyOwomIzQzOwkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCi1leGl0X2VycjoKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODUwLDcgJiM0MzsxODY0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsCkBAIC0xODYzLDggJiM0MzsxODc2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTg4NCw3ICYjNDM7MTg5Nyw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLApAQCAtMTg5Nyw4ICYjNDM7MTkwOSw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE5MTgsNyAmIzQzOzE5MzAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULApAQCAtMTkzMiwxOCAmIzQzOzE5NDQsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJaWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJbmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLAogCQkJcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9IGVsc2UgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbywKIAkJCQkJCSAgICAgIHJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9lcnI7CiAKIAlubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7CiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAppbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaApAQCAtMTY0LDcgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuCiAgKi8KIHN0cnVjdCBvdnNfbmV0IHsKQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkxCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDExMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVIENvbmN1cnJlbmN5IEZpeDogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgY3RfbGltaXRfaW5mb2AgcG9pbnRlci4gVGhlIGNvcmUgY2hhbmdlIGlzIHRvIG1ha2UgaXQgYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHJhY2VzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2Vzcy4gVGhlIHBhdGNoIGFkZHMgdGhlIHN0YW5kYXJkIFJDVSBwcmltaXRpdmVzIGxpa2UgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBgcmN1X3JlcGxhY2VfcG9pbnRlcmAsIGFuZCBgc3luY2hyb25pemVfcmN1KClgIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uLgoKVGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiB1c2luZyBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSBiZWZvcmUgYXNzaWduaW5nIGl0IHRvIHRoZSBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaXMgYSBnb29kIHByYWN0aWNlLiBJdCBtaW5pbWl6ZXMgdGhlIHdpbmRvdyBvZiB2dWxuZXJhYmlsaXR5LiBMZXQgbWUganVzdCBjb25maXJtLi4uIHRoZSBwYXRjaCBkb2VzIHJlZmFjdG9yIHRoZSBhbGxvY2F0aW9uIGxvZ2ljOgpgYGBjCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTsKJiM0MzsJaWYgKCFpbmZvKQoJCXJldHVybiAtRU5PTUVNOwpgYGAKCkFoLCB0aGUgdXNhZ2Ugb2YgYGttYWxsb2Nfb2JqYCwgaXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLCBpdCYjMzk7cyBsaWtlbHkgYSBtYWNybyB3aXRoaW4gT1ZTLiBUaGF0JiMzOTtzIGZpbmUsIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIGlzIHN0aWxsIGludGFjdC4KCkkmIzM5O20gY2hlY2tpbmcgaWYgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gVGhlIGxvY2FsIGBpbmZvYCBpcyBiZWluZyBhbGxvY2F0ZWQgYW5kICp0aGVuKiBpdHMgZmllbGRzIGFyZSBiZWluZyBwcm9wZXJseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgYXNzaWdubWVudC4gV2UgaGF2ZSBhIHNvbGlkIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlOiBgaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdGAsIGBpbmZvLSZndDtsaW1pdHNgLCBhbmQgYGluZm8tJmd0O2RhdGFgIGFyZSBhbGwgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGFsbG9jYXRpb24uIEl0JiMzOTtzIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGFzIGJlZm9yZSwganVzdCByZWZhY3RvcmVkIGZvciB0aGUgUkNVIGNvbnRleHQuIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgYWxsIGFib3V0IFJDVSBzeW5jaHJvbml6YXRpb24uIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgKHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZXMpLiBXZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIG5ldyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBqdXN0IHNvbGlkaWZ5aW5nIHRoZSBSQ1UgcHJvdGVjdGlvbiBvZiBhbiBleGlzdGluZyBkYXRhIHN0cnVjdHVyZS4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIEtNU0FOIHJ1bGVzLiAmIzM0O05lZWRzS01TQU49ZmFsc2UgSUY6IHByaW1hcmlseSBmaXhlcyBvdXQtb2YtYm91bmRzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7IFRoYXQgZml0cyBwZXJmZWN0bHkuICYjMzQ7QWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuJiMzNDsgWWVwLiAmIzM0O1RoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OyBOb3BlLgoKVGhlIHBhdGNoICppcyogYSBmaXggZm9yIGEgY29uY3VycmVuY3kgYnVnIChtaXNzaW5nIFJDVSBwcm90ZWN0aW9uKSBvbiBgY3RfbGltaXRfaW5mb2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgdG8gcHJvdGVjdCBhZ2FpbnN0IEtBU0FOIGRldGVjdGFibGUgZXJyb3JzLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIChyY3VfZGVyZWZlcmVuY2UsIHJjdV9hc3NpZ25fcG9pbnRlciwgc3luY2hyb25pemVfcmN1KSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBwb2ludGVyIGluIE9wZW4gdlN3aXRjaCBjb25udHJhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGNoYW5nZSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKHRoZSBzYW1lIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYXMgYmVmb3JlKS4gVGhlIHByaW1hcnkgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6MzIuMTYwMDE5NDc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NzQ2NzQ1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkNVIHByb3RlY3Rpb24gdG8gdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBmZWF0dXJlLCBmaXhpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nLCBkZWxldGluZywgYW5kIGdldHRpbmcgY29ubnRyYWNrIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgbGltaXQgY2hlY2tpbmcgbG9naWMgZHVyaW5nIHBhY2tldCBleGVjdXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgZmVhdHVyZXMgaW4gb3BlbnZzd2l0Y2guXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjMyLjE2MDAyNDg2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxMTU0MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDk5ZWQwOTQxMzg3YjNkOWMwOWM2YTQyNGI5ZmY2MzZkY2E0MDM0ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxNDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0Li5jYzZlYTQwMTRjMTZhIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XFxuIFxcdHUzMiBjb25uY291bnRfa2V5O1xcbiBcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFjdF9saW1pdF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVxcdTAwM2V6b25lLmlkO1xcbiBcXG4gXFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cXHUwMDNlem9uZS5pZCk7XFxuQEAgLTE1ODUsNDAgKzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGksIGVycjtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbylcXG4rXFx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcXG4rXFx0aWYgKCFpbmZvKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzID1cXG4rXFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbitcXHRpbmZvLVxcdTAwM2VsaW1pdHMgPVxcbiBcXHRcXHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKSB7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWxpbWl0cykge1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcXG4tXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbitcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXSk7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcXG4gXFxuLVxcdGlmIChJU19FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmIChJU19FUlIoaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihpbmZvLVxcdTAwM2VkYXRhKTtcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlbGltaXRzKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHByX2VycihcXFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRpbmZvID0gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcXG4rXFx0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFxuIFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTY3OSw2ICsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNjk1LDYgKzE3MDgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuIFxcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuQEAgLTE3MDksMTIgKzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTcyMyw2ICsxNzM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNzMwLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH1cXG5AQCAtMTc3Myw2ICsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5AQCAtMTc5NiwxMiArMTgxNCwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ6b25lKSkpIHtcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdFxcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXFxuIFxcdFxcdFxcdFxcdG5ldCwgaW5mby1cXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG5AQCAtMTgxNiw2ICsxODMyLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcXG5AQCAtMTgyOCwxOSArMTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4gXFx0XFx0aGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuIFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXFx1MDAzZWRhdGEsXFxuIFxcdFxcdFxcdFxcdGN0X2xpbWl0LVxcdTAwM2V6b25lLCBjdF9saW1pdC1cXHUwMDNlbGltaXQsIHJlcGx5KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1leGl0X2VycjpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTE4NTAsNyArMTg2NCw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiBcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXFxuQEAgLTE4NjMsOCArMTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgY3RfbGltaXRfaW5mbyk7XFxuK1xcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXG5AQCAtMTg4NCw3ICsxODk3LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcXG5AQCAtMTg5Nyw4ICsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xOTE4LDcgKzE5MzAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXFxuQEAgLTE5MzIsMTggKzE5NDQsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRyZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbiBcXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XFxuIFxcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbmluZGV4IDY5NjY0MGU4OGZhN2UuLjA2YzY5NTZmYjFkYzQgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbkBAIC0xNjQsNyArMTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcXG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXFxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXFxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXFxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXFxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcXG4rICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xcbisgKiBuZXRucyB0ZWFyZG93bi5cXG4gICogQHh0X2xhYmVsOiBXaGV0aGVyIGNvbm5sYWJsZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBuZXR3b3JrIG9yIG5vdC5cXG4gICovXFxuIHN0cnVjdCBvdnNfbmV0IHtcXG5AQCAtMTcyLDcgKzE3NCw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XFxuICNlbmRpZlxcbiBcXHRib29sIHh0X2xhYmVsO1xcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNDozMi41MzE5MDIzNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzE5NTMxODY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgZmVhdHVyZSwgZml4aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGxpbWl0IGNoZWNraW5nIGxvZ2ljIGR1cmluZyBwYWNrZXQgZXhlY3V0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGZlYXR1cmVzIGluIG9wZW52c3dpdGNoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwOTllZDA5NDEzODdiM2Q5YzA5YzZhNDI0YjlmZjYzNmRjYTQwMzRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTQ6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLmNjNmVhNDAxNGMxNmEgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTY3OSw2ICsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICsxNzA4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0Y3RfbGltaXQtXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFxuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3MDksMTIgKzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTcyMyw2ICsxNzM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiArMTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTc3Myw2ICsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtcbiB9XG4gXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiArMTgxNCwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0XHRcdTAwMjZ6b25lKSkpIHtcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVwiKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiArMTgzMiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG5AQCAtMTgyOCwxOSArMTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRjdF9saW1pdC1cdTAwM2V6b25lLCBjdF9saW1pdC1cdTAwM2VsaW1pdCwgcmVwbHkpO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgKzE4NjQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsOCArMTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuK1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4rXHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE4ODQsNyArMTg5Nyw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5Nyw4ICsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTkxOCw3ICsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDE4ICsxOTQ0LDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgICByZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2VycjtcbiBcbiBcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcbiBcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4rICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcbisgKiBuZXRucyB0ZWFyZG93bi5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6MzIuNTMxOTAzODQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDQ3NTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm50cmFjayBSQ1UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdGhlIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgZmlsZXMgYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgYW5kIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaGAuIEl0IGFwcGVhcnMgdGhleSdyZSBhZGRpbmcgUkNVIChSZWFkLUNvcHkgVXBkYXRlKSBwcm90ZWN0aW9uIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYC4gR29vZCwgdGhhdCdzIGEgcG9zaXRpdmUgc3RhcnQg4oCTIGFkZHJlc3NpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBpcyBhbHdheXMgYSB3aW4sIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBjb21wb25lbnQgbGlrZSBjb25udHJhY2suXG5cblRoZSBjb2RlJ3MgdXNpbmcgc3RhbmRhcmQgUkNVIHByaW1pdGl2ZXM6IGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYC4gSSBhbHNvIHNlZSBgb3ZzbF9kZXJlZmVyZW5jZSgpYCBiZWluZyB1c2VkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIE9WUyBjb2RlYmFzZS4gVGhlIGNoYW5nZXMgdG8gYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCB0byBub3cgYmUgY2FsbGVkIHdpdGggYW4gUkNVIHJlYWQgbG9jayBoZWxkIGFsc28gbWFrZSBzZW5zZS4gRW5zdXJpbmcgdGhlIGFjY2VzcyB0byB0aGUgbGltaXQgZGF0YSBpcyBwcm90ZWN0ZWQgZHVyaW5nIHJlYWRzIGlzIGNydWNpYWwuIEFuZCBmaW5hbGx5LCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGhvbGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBuZWVkIHRvIHByb3RlY3QgdGhlIGRhdGEgd2l0aCBhbiBSQ1UgbG9jay4gVGhpcyBjbGVhcmx5IGluZGljYXRlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFkZHJlc3NpbmcgZWl0aGVyIGEgY29uY3VycmVuY3kgYnVnIG9yIGFuIFJDVSB1c2FnZSBidWcgcmVsYXRlZCB0byBjb25udHJhY2sgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAuIFNvLCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNpbmNlIHRoaXMgaXMgaW4gT3BlbiB2U3dpdGNoLCBteSBpbnN0aW5jdCBpcyB0aGF0IHdlJ2xsIG5lZWQgYENPTkZJR19PUEVOVlNXSVRDSGAgYW5kIHBvc3NpYmx5IGBDT05GSUdfT1BFTlZTV0lUQ0hfQ09OTlRSQUNLYCBhcyB3ZWxsLiBMZXQncyBkb3VibGUtY2hlY2sgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNDozOC40MjIzODIwMDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjU5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNDozOC40NjY0NTUwMDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzU0NTE0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgQ29ubnRyYWNrIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25udHJhY2sgc2l0dWF0aW9uLCBzbyBteSBmaXJzdCBtb3ZlIGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nOyBpdCdzIHRoZSB1c3VhbCBzcG90IHRvIGNvbmZpZ3VyZSBrZXJuZWwgZmVhdHVyZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyB3aXRoaW4gT3BlbiB2U3dpdGNoLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciBjb25udHJhY2sgdGhlcmUg4oCTIHRoaW5ncyBsaWtlIHdoZXRoZXIgaXQncyBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzLCBhbmQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yIHdpdGhpbiBPVlMuIExldCdzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLi4uIFRpbWUgdG8gZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NDEuMjIwOTcxNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTYzNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSF9DT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjQxLjI2Njg3Nzc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTA4ODE3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgQ09ORklHX09QRU5WU1dJVENIYCBhY3R1YWxseSByZWxpZXMgb24uIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHJpZ2h0PyBUbyBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGludm9sdmUgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgbWF5YmUgc29tZSBoZWFkZXIgZmlsZXMsIGFuZCBkZWZpbml0ZWx5IHNvbWUgY3Jvc3MtcmVmZXJlbmNpbmcuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgYSBjaGFpbiBvZiBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NDQuMDc3NzcwODIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XFxuICAzMjpcXHRcXHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXFxuICAzMzpcXHRcXHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcXG4gIDM0OlxcdFxcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxcbiAgMzc6XFx0XFx0ICB1dGlsaXRpZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgNDA6XFx0XFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRVxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgT3BlbiB2U3dpdGNoIHdpbGwgYmUgYWJsZSBjcmVhdGUgR1JFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjQ0LjA3NzkwNzkwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjEwNjExNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYE9QRU5WU1dJVENIYCBoYXMgc29tZSBwcmV0dHkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGl0IGNsZWFybHkgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gVGhlbiBJIHNlZSB0aGlzIGNvbmRpdGlvbmFsLCBgIU5GX0NPTk5UUkFDSyB8fCAuLi5gLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZWl0aGVyIGV4cGxpY2l0bHkgZGlzYWJsZWQsIG9yIGl0IHJlbGllcyBvbiBzb21lIG90aGVyIGNvbmRpdGlvbi4gU2luY2UgSSdtIGFpbWluZyBmb3IgZnVsbCBmZWF0dXJlIHN1cHBvcnQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyBwaWVjZS5cblxuVG8gZW5hYmxlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZlYXR1cmVzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkLiAgYE5GX0NPTk5UUkFDS2Agc2VlbXMgbGlrZSB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCBsaWtlbHkgYWRkcyBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvciBtZXRyaWNzLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgc2V0dGluZyB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSB3aGF0IEknbSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjQ3LjgzODk3MjA0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMjIzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NDcuODgzMzAxODI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDY0MjgxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBkZWZpbmVkIGFzIGEgdHJpc3RhdGUgb3B0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSBlbmFibGUgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBjcnVjaWFsbHksIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gV2UncmUgZ29pbmcgdG8gbmVlZCB0aGF0IG9uZS5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgY2FuIHRlbGwgaXQgc3BlY2lmaWNhbGx5IHRhcmdldHMgbW9kaWZpY2F0aW9ucyB0byB0aGUgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYW5kIGBvdnNfY3RfY2hlY2tfbGltaXRgIGZ1bmN0aW9ucy4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgZnVuY3Rpb25zLCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgaG9uZWQgaW4gb24gdGhlc2UgZnVuY3Rpb25zLCB0aGF0IGlzLCB0aGUgc3ltYm9scyB0byB3YXRjaCBvdXQgZm9yIGFzIEkgcHJvY2VlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTEuNzI5NzMzNDgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxMDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MzY9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODYxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2Mi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk3NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk3NjpcXHRcXHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTc3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjUxLjc3NTQ0ODE0NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg3NTYzNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lczpcblxuKipDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgd2l0aGluIE9wZW4gdlN3aXRjaCwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhci4gSSdtIHNlZWluZyBmb3VyIGtleSBmdW5jdGlvbnMgaGVyZS4gTGV0J3MgYnJlYWsgZG93biB3aGF0IEkgdGhpbmsgdGhleSAqZG8qOlxuXG4qICAgYG92c19jdF9saW1pdF9jbWRfc2V0YDogVGhpcyBmdW5jdGlvbiAqbXVzdCogYmUgcmVzcG9uc2libGUgZm9yICoqc2V0dGluZyoqIGEgbmV3IGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQuIFRoYXQgY291bGQgbWVhbiBzZXR0aW5nIGxpbWl0cyBvbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucywgbmV3IGNvbm5lY3Rpb25zLCByYXRlIGxpbWl0aW5nLCBjb25uZWN0aW9uIHRpbWVvdXRzIG9yIG90aGVyIHBhcmFtZXRlcnMuIEknZCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGluIHRoZSBwYXJhbWV0ZXJzIHNwZWNpZnlpbmcgdGhlIG5ldyBsaW1pdHMgYW5kIGxpa2VseSBhIGtleSBpZGVudGlmeWluZyB0aGUgZmxvdyBvciBjb25uZWN0aW9uIHN1YmplY3QgdG8gdGhlIGxpbWl0LlxuXG4qICAgYG92c19jdF9saW1pdF9jbWRfZGVsYDogVGhpcyBvbmUgaXMgdGhlIGNvdW50ZXJwYXJ0LCBzbyBpdCdzIG1vc3QgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yICoqZGVsZXRpbmcqKiBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0LiBQZXJoYXBzIGl0J3MgcmVtb3ZpbmcgYSBzcGVjaWZpYyBsaW1pdCBlbnRyeSBpZGVudGlmaWVkIGJ5IHRoZSBzYW1lIGtleSB1c2VkIGR1cmluZyB0aGUgc2V0IG9wZXJhdGlvbiwgb3IgbWF5YmUgaXQgcmVzZXRzIGEgYnJvYWRlciByYW5nZSBvZiBsaW1pdHMuXG5cbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGFjY2Vzc29yLiBJdCB3aWxsIGJlIHVzZWQgdG8gKipyZXRyaWV2ZSoqIHRoZSBjdXJyZW50IGxpbWl0cywgcGVyaGFwcyBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvciBmb3IgcG9saWN5IGVuZm9yY2VtZW50LiBJdCB3b3VsZCBhbGxvdyB5b3UgdG8gcXVlcnkgdGhlIGNvbmZpZ3VyZWQgbGltaXRzIGFuZCBzZWUgdGhlaXIgdmFsdWVzLlxuXG4qICAgYG92c19jdF9jaGVja19saW1pdGA6IFRoaXMgaXMgdGhlIGNydWNpYWwgcGFydDsgaXQncyB0aGUgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCdzIHRoZSBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgY2FsbGVkIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgcHJvYmFibHkgZnJvbSB3aXRoaW4gYSBmdW5jdGlvbiBsaWtlIGBvdnNfY3RfZXhlY3V0ZWAgb3IgYSBzaW1pbGFyIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHJvY2Vzc2luZyByb3V0aW5lLCB0byAqKmNoZWNrKiogaWYgYSBnaXZlbiBwYWNrZXQncyBmbG93IHZpb2xhdGVzIGFueSBvZiB0aGUgY29uZmlndXJlZCBsaW1pdHMuIEl0IGRldGVybWluZXMgd2hldGhlciBhIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyBwZXJtaXR0ZWQsIGRyb3BwZWQsIG9yIHRocm90dGxlZC5cblxuRWZmZWN0aXZlbHksIHRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGEgZnVsbCBzZXQgb2YgZnVuY3Rpb25hbGl0aWVzIGZvciBtYW5hZ2luZyBjb25uZWN0aW9uIGxpbWl0cy4gSXQgaXMgYSBjb21wbGV0ZSBzeXN0ZW0gdGhhdCBzZXRzLCBkZWxldGVzIGFuZCBxdWVyaWVzIHRoZXNlIGxpbWl0cywgd2l0aCBhIGNoZWNrIHRoYXQgd2lsbCBlbnN1cmUgdGhhdCB0aGUgbGltaXRzIGFyZSBhY3R1YWxseSBlbmZvcmNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjU2LjE2MzAxNDU4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDU3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgwLVxcdFxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5ODE6XFx0XFx0XFx0ZXJyID0gb3ZzX2N0X2NoZWNrX2xpbWl0KG5ldCwgc2tiLCBpbmZvKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVxcdFxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTYuMjExNDI0ODMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjA0MjU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUcmFjaW5nIHRoZSBDb25uZWN0aW9uOiBvdnNfY3RfY29tbWl0IGFuZCBJdHMgQ2FsbGVycyoqXG5cbkFscmlnaHQsIG15IGJyYWluIGp1c3QgbWFwcGVkIG91dCBhIGNydWNpYWwgbGluazogYG92c19jdF9jb21taXRgIGNhbGxzIGBvdnNfY3RfY2hlY2tfbGltaXRgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbnRlcmVzdCBpcyBub3cgcGlxdWVkIGJlY2F1c2UgYG92c19jdF9jb21taXRgIGlzIGJlaW5nIGludm9rZWQgYnkgZWl0aGVyIGBfX292c19jdF9leGVjdXRlYCBvciBgb3ZzX2N0X2V4ZWN1dGVgLCB3aGljaCBhcmUgdGhlIHRydWUgZW5naW5lcyBoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIFRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGZsb3csIEkgbmVlZCB0byB6b29tIGluIG9uIGBvdnNfY3RfZXhlY3V0ZWAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTkuMjMxODUzNDU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2OTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfZXhlY3V0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTMzOnN0cnVjdCBuZl9jb25uICpvdnNfY3RfZXhlY3V0ZWQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01MzQtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTYxPXN0YXRpYyBib29sIHNrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTcxLVxcdGlmICghY3QpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcXHRcXHRjdCA9IG92c19jdF9leGVjdXRlZChuZXQsIGtleSwgaW5mbywgc2tiLCBcXHUwMDI2Y3RfZXhlY3V0ZWQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzMtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTkuMjc3ODI4MDYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTE5NTIwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIEV4ZWN1dGlvbioqXG5cbkFscmlnaHQsIHNvIGBvdnNfY3RfZXhlY3V0ZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgZWl0aGVyIGEgZGlyZWN0bHkgZXhwb3J0ZWQgZnVuY3Rpb24gKm9yKiBpdCdzIGRlZXBseSBpbnZvbHZlZCB3aXRoaW4gYGFjdGlvbnMuY2AuIEdpdmVuIGl0cyBuYW1lLCBJJ20gbGVhbmluZyB0b3dhcmQgdGhlIGxhdHRlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jYCBmaWxlIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGJlaW5nIGltcGxlbWVudGVkIGF0IHRoaXMgbG93IGxldmVsLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCdzIGdldCB0byBpdC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgZm9yIG1hdGNoaW5nIGZsb3dzLCBzZXR0aW5nIGNvbm5lY3Rpb24gc3RhdGVzLCBhbmQgbWFuaXB1bGF0aW5nIHBhY2tldHMgYmFzZWQgb24gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiBpbmZvcm1hdGlvbi4gTGV0J3Mgc2VlIGlmIG15IGh1bmNoIGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE1OjAzLjU4OTc4MjY0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTIwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTEyNTU9c3RhdGljIGludCBkb19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM4NS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEzODY6XFx0XFx0XFx0ZXJyID0gb3ZzX2N0X2V4ZWN1dGUob3ZzX2RwX2dldF9uZXQoZHApLCBza2IsIGtleSxcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODctXFx0XFx0XFx0XFx0XFx0ICAgICBubGFfZGF0YShhKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE1OjAzLjYzNTMwNTU5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU4NDQ5MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25udHJhY2sgRXhlY3V0aW9uKipcblxuT2theSwgc28gYG92c19jdF9leGVjdXRlYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYW5kIG9mIGNvdXJzZSwgYG92c19jdF9leGVjdXRlYCBpdHNlbGYuXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgYXJlIHRob3NlIGBvdnNfY3RfbGltaXRfKmAgZnVuY3Rpb25zIHN0YXRpYz8gQSBxdWljayBjaGVjayBpbiBgY29ubnRyYWNrLmNgIGNvbmZpcm1zIHRoZXkgKmFyZSogZGVjbGFyZWQgYXMgc3RhdGljLiBIb3dldmVyLCBiZWluZyBHZW5sIG9wZXJhdGlvbnMsIHRoZXkgYXJlIGFjY2Vzc2libGUuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyBkbyB0aGV5IGludGVyYWN0P1xuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBvdnNfY3RfZXhlY3V0ZWAgaXRzZWxmIGlzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoL2Zyb20gaXQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCBzcGVjaWZpY2FsbHkgaW4gYGNvbm50cmFjay5jYCwgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UuIEknbGwgbmVlZCB0byBkcmlsbCBkZWVwZXIgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBhbmQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNTowNy43OTM3NTY5ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODIwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTgzNj1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjAtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4NjE6c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYyLXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xOTcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgY3RfbGltaXRfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTc1LVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTc2OlxcdFxcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5NzctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MDcuODM4NTgyMTg4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDY3NzM0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm50cmFjayBJbXBsZW1lbnRhdGlvbiBmb3IgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG92c19jdF9leGVjdXRlYCBpc24ndCBzdGF0aWMuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCBtZSBleHBsb3JlIGBjb25udHJhY2suY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBiZXR0ZXIsIG5vbi1zdGF0aWMgb3B0aW9ucy4gSSdtIGxpa2luZyBgb3ZzX2N0X2V4ZWN1dGVgLCBidXQgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBvdnNfY3RfbGltaXRfaW5pdGA/IE5vcGUsIGl0J3Mgc3RhdGljLlxuXG5BaCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCDigJMgdGhhdCBsb29rcyBwcm9taXNpbmcuIEl0J3Mgc3RhdGljLCBidXQgaXQncyBhIGdlbmwgY2FsbGJhY2shIFNvIHRoZSBwcm9tcHQgd2FudHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBhbmQgdGhpcyB3aWxsICpub3QqIGJlIGlubGluZWQuIEl0J3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBnZW5sX3NtYWxsX29wc2AsIG1lYW5pbmcgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQncyB3aGF0IEkgbmVlZC5cblxuTGV0J3MgbWFrZSBzdXJlLCBJIHdhbnQgdG8gY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIEknbGwgbG9vayBiYWNrIGF0IGBvdnNfY3RfZXhlY3V0ZWAgYXMgd2VsbCwganVzdCB0byBiZSBzdXJlLlxuXG5SZWdhcmRpbmcgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCB0aGUgbWFpbiBvbmVzIGFyZSBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gTmVlZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyB0aGUgY29ycmVjdCBuYW1lLi4uIFllcCwgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYC5cblxuTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLiBJIHJlbWVtYmVyIHRoYXQgYE9QRU5WU1dJVENIYCBkZXBlbmRzIG9uIGBJTkVUYCwgc28gYElORVRgIGlzIG5lZWRlZC4gYE5GX0NPTk5UUkFDS2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgc28gd2UgbmVlZCBgTkVURklMVEVSYCB0b28uIEJ1dCBnZW5lcmFsbHksIHRoZSBwcmVmZXJlbmNlIGlzIHRvIGxpc3Qgb25seSBkaXJlY3QgZGVwZW5kZW5jaWVzLiBTbywgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAgYXJlIHRoZSBjb25maWdzIEknbGwgYmUgbm90aW5nLlxuXG5JIHdpbGwgYWxzbyBjaGVjayB0aGUgY29kZSBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgaG93IGBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTQuNzQ1MzU4MDA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEzOTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJU19FTkFCTEVEXFxcXChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NjE9c3RydWN0IG92c19jb25udHJhY2tfaW5mbyB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNzktXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjgwOiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTgxLSNkZWZpbmUgT1ZTX0NUX0xJTUlUX1VOTElNSVRFRFxcdDBcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04NjA9c3RhdGljIGJvb2wgbGFiZWxzX25vbnplcm8oY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4NzE6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcyLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk3Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTc4OiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk3OS1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTU3Mz1zdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1ODgtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE1ODk6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU5MC1zdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAxMz1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMjQtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMjU6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAyNi1cXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDMyPXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMzUtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMzY6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAzNy1cXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNToxNC44Mjg1MDI0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE3NDY1NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCBhbmQgQ29ubnRyYWNrIGluIE9WUyoqXG5cblJpZ2h0LCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGRlZmluaXRlbHkgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIHdpdGhpbiBgY29ubnRyYWNrLmNgLiBOZWVkIHRvIGJlIHN1cmUgYWJvdXQgYSBmZXcgdGhpbmdzLiBGaXJzdCwgaXMgaXQgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IFl1cCwgaXQgaXMuIEV4Y2VsbGVudC4gTWFrZXMgaXQgYSBkZWNlbnQgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBJdCdzIGFsc28gYSBnZW5sIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdOKAmXMgbm90IGlubGluZWQsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LiBCdXQsIGxldCdzIG5vdCBsaW1pdCBvdXIgdmlldyB0byB0aGF0LiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGtlZXAgYG92c19jdF9leGVjdXRlYCBpbiBtaW5kIOKAkyBpdCdzICpub3QqIHN0YXRpYywgc28gaXQgY291bGQgb2ZmZXIgYWRkaXRpb25hbCBpbnNpZ2h0cyBpbnRvIHRoZSBkYXRhIGZsb3cuIFRoaW5raW5nIGBzZXQtcmVzdWx0c2AgaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgYW5hbHlzaXMuIE5lZWQgdG8gdGVzdCB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwOCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTkuNjQ1OTcwODc0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyNDcwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfY3RfZXhlY3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkNVIHByb3RlY3Rpb24gdG8gdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBmZWF0dXJlLCBmaXhpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nLCBkZWxldGluZywgYW5kIGdldHRpbmcgY29ubnRyYWNrIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgbGltaXQgY2hlY2tpbmcgbG9naWMgZHVyaW5nIHBhY2tldCBleGVjdXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgZmVhdHVyZXMgaW4gb3BlbnZzd2l0Y2guXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBSQ1UgcHJvdGVjdGlvbiB0byB0aGUgb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGZlYXR1cmUsIGZpeGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgZm9yIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyBjb25udHJhY2sgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBsaW1pdCBjaGVja2luZyBsb2dpYyBkdXJpbmcgcGFja2V0IGV4ZWN1dGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBmZWF0dXJlcyBpbiBvcGVudnN3aXRjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTkuNzI3MjI0NjU1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAwNzQ1NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE1OjE5LjcyNzc3NTYyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDAwNjkwMjk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIChyY3VfZGVyZWZlcmVuY2UsIHJjdV9hc3NpZ25fcG9pbnRlciwgc3luY2hyb25pemVfcmN1KSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBwb2ludGVyIGluIE9wZW4gdlN3aXRjaCBjb25udHJhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGNoYW5nZSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKHRoZSBzYW1lIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYXMgYmVmb3JlKS4gVGhlIHByaW1hcnkgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwOTllZDA5NDEzODdiM2Q5YzA5YzZhNDI0YjlmZjYzNmRjYTQwMzRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTQ6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLmNjNmVhNDAxNGMxNmEgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTY3OSw2ICsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICsxNzA4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0Y3RfbGltaXQtXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFxuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3MDksMTIgKzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTcyMyw2ICsxNzM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiArMTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTc3Myw2ICsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtcbiB9XG4gXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiArMTgxNCwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0XHRcdTAwMjZ6b25lKSkpIHtcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVwiKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiArMTgzMiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG5AQCAtMTgyOCwxOSArMTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRjdF9saW1pdC1cdTAwM2V6b25lLCBjdF9saW1pdC1cdTAwM2VsaW1pdCwgcmVwbHkpO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgKzE4NjQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsOCArMTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuK1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4rXHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE4ODQsNyArMTg5Nyw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5Nyw4ICsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTkxOCw3ICsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDE4ICsxOTQ0LDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgICByZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2VycjtcbiBcbiBcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcbiBcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4rICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcbisgKiBuZXRucyB0ZWFyZG93bi5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTkuNzI3Nzc2ODI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDA2ODc5NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJDVSBDb25jdXJyZW5jeSBGaXg6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSBzZWVpbmcuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBtYWtlIGl0IGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlci4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIFRoZSBwYXRjaCBhZGRzIHRoZSBzdGFuZGFyZCBSQ1UgcHJpbWl0aXZlcyBsaWtlIGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYCB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbi5cblxuVGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiB1c2luZyBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSBiZWZvcmUgYXNzaWduaW5nIGl0IHRvIHRoZSBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaXMgYSBnb29kIHByYWN0aWNlLiBJdCBtaW5pbWl6ZXMgdGhlIHdpbmRvdyBvZiB2dWxuZXJhYmlsaXR5LiBMZXQgbWUganVzdCBjb25maXJtLi4uIHRoZSBwYXRjaCBkb2VzIHJlZmFjdG9yIHRoZSBhbGxvY2F0aW9uIGxvZ2ljOlxuYGBgY1xuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xuK1x0aWYgKCFpbmZvKVxuXHRcdHJldHVybiAtRU5PTUVNO1xuYGBgXG5cbkFoLCB0aGUgdXNhZ2Ugb2YgYGttYWxsb2Nfb2JqYCwgaXQncyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIGl0J3MgbGlrZWx5IGEgbWFjcm8gd2l0aGluIE9WUy4gVGhhdCdzIGZpbmUsIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIGlzIHN0aWxsIGludGFjdC5cblxuSSdtIGNoZWNraW5nIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFRoZSBsb2NhbCBgaW5mb2AgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCAqdGhlbiogaXRzIGZpZWxkcyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIGFzc2lnbm1lbnQuIFdlIGhhdmUgYSBzb2xpZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZTogYGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdGAsIGBpbmZvLVx1MDAzZWxpbWl0c2AsIGFuZCBgaW5mby1cdTAwM2VkYXRhYCBhcmUgYWxsIGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBhbGxvY2F0aW9uLiBJdCdzIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGFzIGJlZm9yZSwganVzdCByZWZhY3RvcmVkIGZvciB0aGUgUkNVIGNvbnRleHQuIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBSQ1Ugc3luY2hyb25pemF0aW9uLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGUgaXNzdWVzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nICh1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2VzKS4gV2UncmUgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIG5ldyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBJdCdzIGp1c3Qgc29saWRpZnlpbmcgdGhlIFJDVSBwcm90ZWN0aW9uIG9mIGFuIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlLlxuXG5Pa2F5LCBsZXQncyByZXZpZXcgdGhlIEtNU0FOIHJ1bGVzLiBcIk5lZWRzS01TQU49ZmFsc2UgSUY6IHByaW1hcmlseSBmaXhlcyBvdXQtb2YtYm91bmRzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlwiIFRoYXQgZml0cyBwZXJmZWN0bHkuIFwiQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuXCIgWWVwLiBcIlRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cIiBOb3BlLlxuXG5UaGUgcGF0Y2ggKmlzKiBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBidWcgKG1pc3NpbmcgUkNVIHByb3RlY3Rpb24pIG9uIGBjdF9saW1pdF9pbmZvYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gVGhlIGNoYW5nZXMgYXJlIGFsbCB0byBwcm90ZWN0IGFnYWluc3QgS0FTQU4gZGV0ZWN0YWJsZSBlcnJvcnMuIEknbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MzMuNzM0NjU4OTI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHN5bmNocm9uaXphdGlvbiAocmN1X2RlcmVmZXJlbmNlLCByY3VfYXNzaWduX3BvaW50ZXIsIHN5bmNocm9uaXplX3JjdSkgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2AgcG9pbnRlciBpbiBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBjaGFuZ2UgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5ICh0aGUgc2FtZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGFzIGJlZm9yZSkuIFRoZSBwcmltYXJ5IHJpc2tzIG1pdGlnYXRlZCBieSB0aGlzIHBhdGNoIGFyZSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6l9bp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 09:58:20 +0000 UTC FinishedAt: 2026-08-11 10:15:35 +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": "f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "39a107c6-a4a9-41fd-b199-17f0428dd2b7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_execute" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgZmVhdHVyZSwgZml4aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGxpbWl0IGNoZWNraW5nIGxvZ2ljIGR1cmluZyBwYWNrZXQgZXhlY3V0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGZlYXR1cmVzIGluIG9wZW52c3dpdGNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDk5ZWQwOTQxMzg3YjNkOWMwOWM2YTQyNGI5ZmY2MzZkY2E0MDM0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEwOjE0OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uY2M2ZWE0MDE0YzE2YSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuJiM0MztcdC8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi9cbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTY2NSwxMiAmIzQzOzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE2NzksNiAmIzQzOzE2OTEsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICYjNDM7MTcwOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiAmIzQzOzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbiYjNDM7XHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE3MjMsNiAmIzQzOzE3MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiAmIzQzOzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3NzMsNiAmIzQzOzE3OTAsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiAmIzQzOzE4MTQsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiAmIzQzOzE4MzIsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICYjNDM7MTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgJiM0MzsxODY0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDggJiM0MzsxODc2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xODg0LDcgJiM0MzsxODk3LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggJiM0MzsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgJiM0MzsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXG5AQCAtMTkzMiwxOCAmIzQzOzE5NDQsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uMDZjNjk1NmZiMWRjNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE2NCw3ICYjNDM7MTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcbiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC5cbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXG4tICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy5cbiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuJiM0MzsgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4mIzQzOyAqIG5ldG5zIHRlYXJkb3duLlxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXG4gICovXG4gc3RydWN0IG92c19uZXQge1xuQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgZmVhdHVyZSwgZml4aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGxpbWl0IGNoZWNraW5nIGxvZ2ljIGR1cmluZyBwYWNrZXQgZXhlY3V0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGZlYXR1cmVzIGluIG9wZW52c3dpdGNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDk5ZWQwOTQxMzg3YjNkOWMwOWM2YTQyNGI5ZmY2MzZkY2E0MDM0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDEwOjE0OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCmluZGV4IDk1Njk3ZDRlMTZlNjQuLmNjNmVhNDAxNGMxNmEgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCWludCBpOwogCiYjNDM7CWluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sIE5VTEwsCiYjNDM7CQkJCSAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwomIzQzOwkvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwogCW5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby0mZ3Q7ZGF0YSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKQEAgLTE2NjUsMTIgJiM0MzsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNjc5LDYgJiM0MzsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE2OTUsNiAmIzQzOzE3MDgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCWN0X2xpbWl0LSZndDtsaW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJY3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTcwOSwxMiAmIzQzOzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE3MjMsNiAmIzQzOzE3MzgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKApAQCAtMTczMCw2ICYjNDM7MTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJT1ZTX05MRVJSKHRydWUsICYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiAJCX0gZWxzZSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJY3RfbGltaXRfZGVsKGluZm8sIHpvbmUpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CkBAIC0xNzczLDYgJiM0MzsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgJmFtcDt6b25lX2xpbWl0KTsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKQEAgLTE3OTYsMTIgJiM0MzsxODE0LDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCQkmYW1wO3pvbmUpKSkgewogCQkJT1ZTX05MRVJSKHRydWUsICYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiAJCX0gZWxzZSB7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQlsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTsKIAogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQkJbmV0LCBpbmZvLSZndDtkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTE4MTYsNiAmIzQzOzE4MzIsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpyZXBseSkKQEAgLTE4MjgsMTkgJiM0MzsxODQ1LDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQloZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkgewogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLSZndDtkYXRhLAogCQkJCWN0X2xpbWl0LSZndDt6b25lLCBjdF9saW1pdC0mZ3Q7bGltaXQsIHJlcGx5KTsKIAkJCWlmIChlcnIpCi0JCQkJZ290byBleGl0X2VycjsKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAotZXhpdF9lcnI6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTg1MCw3ICYjNDM7MTg2NCw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULApAQCAtMTg2Myw4ICYjNDM7MTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE4ODQsNyAmIzQzOzE4OTcsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCwKQEAgLTE4OTcsOCAmIzQzOzE5MDksOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xOTE4LDcgJiM0MzsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCwKQEAgLTE5MzIsMTggJiM0MzsxOTQ0LDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCWlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCW5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbywKIAkJCXJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfSBlbHNlIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sCiAJCQkJCQkgICAgICByZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfZXJyOwogCiAJbmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpOwogCWdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKaW5kZXggNjk2NjQwZTg4ZmE3ZS4uMDZjNjk1NmZiMWRjNCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE2NCw3ICYjNDM7MTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHsKICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LgogICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy4KICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuCi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLgomIzQzOyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWQKJiM0MzsgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nCiYjNDM7ICogbmV0bnMgdGVhcmRvd24uCiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LgogICovCiBzdHJ1Y3Qgb3ZzX25ldCB7CkBAIC0xNzIsNyAmIzQzOzE3NCw3IEBAIHN0cnVjdCBvdnNfbmV0IHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7CiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbzsKICNlbmRpZgogCWJvb2wgeHRfbGFiZWw7CiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIFJDVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBjb25udHJhY2sgaW1wbGVtZW50YXRpb24gd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IGZpbGVzIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhgLiBJdCBhcHBlYXJzIHRoZXkmIzM5O3JlIGFkZGluZyBSQ1UgKFJlYWQtQ29weSBVcGRhdGUpIHByb3RlY3Rpb24gZm9yIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYC4gR29vZCwgdGhhdCYjMzk7cyBhIHBvc2l0aXZlIHN0YXJ0IOKAkyBhZGRyZXNzaW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgaXMgYWx3YXlzIGEgd2luLCBlc3BlY2lhbGx5IGluIGEgY3JpdGljYWwgY29tcG9uZW50IGxpa2UgY29ubnRyYWNrLgoKVGhlIGNvZGUmIzM5O3MgdXNpbmcgc3RhbmRhcmQgUkNVIHByaW1pdGl2ZXM6IGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYC4gSSBhbHNvIHNlZSBgb3ZzbF9kZXJlZmVyZW5jZSgpYCBiZWluZyB1c2VkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIE9WUyBjb2RlYmFzZS4gVGhlIGNoYW5nZXMgdG8gYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCB0byBub3cgYmUgY2FsbGVkIHdpdGggYW4gUkNVIHJlYWQgbG9jayBoZWxkIGFsc28gbWFrZSBzZW5zZS4gRW5zdXJpbmcgdGhlIGFjY2VzcyB0byB0aGUgbGltaXQgZGF0YSBpcyBwcm90ZWN0ZWQgZHVyaW5nIHJlYWRzIGlzIGNydWNpYWwuIEFuZCBmaW5hbGx5LCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGhvbGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBuZWVkIHRvIHByb3RlY3QgdGhlIGRhdGEgd2l0aCBhbiBSQ1UgbG9jay4gVGhpcyBjbGVhcmx5IGluZGljYXRlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFkZHJlc3NpbmcgZWl0aGVyIGEgY29uY3VycmVuY3kgYnVnIG9yIGFuIFJDVSB1c2FnZSBidWcgcmVsYXRlZCB0byBjb25udHJhY2sgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYC4gU28sIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gU2luY2UgdGhpcyBpcyBpbiBPcGVuIHZTd2l0Y2gsIG15IGluc3RpbmN0IGlzIHRoYXQgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19PUEVOVlNXSVRDSGAgYW5kIHBvc3NpYmx5IGBDT05GSUdfT1BFTlZTV0lUQ0hfQ09OTlRSQUNLYCBhcyB3ZWxsLiBMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIENvbm50cmFjayBTdXBwb3J0KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbm50cmFjayBzaXR1YXRpb24sIHNvIG15IGZpcnN0IG1vdmUgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nOyBpdCYjMzk7cyB0aGUgdXN1YWwgc3BvdCB0byBjb25maWd1cmUga2VybmVsIGZlYXR1cmVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgd2l0aGluIE9wZW4gdlN3aXRjaC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIGNvbm50cmFjayB0aGVyZSDigJMgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCYjMzk7cyBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzLCBhbmQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yIHdpdGhpbiBPVlMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZpbGUgcmV2ZWFscy4uLiBUaW1lIHRvIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSF9DT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYENPTkZJR19PUEVOVlNXSVRDSGAgYWN0dWFsbHkgcmVsaWVzIG9uLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgcmlnaHQ/IFRvIHByb3Blcmx5IHVuZGVyc3RhbmQgaXRzIGltcGFjdCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUsIEkgbmVlZCB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBtYXliZSBzb21lIGhlYWRlciBmaWxlcywgYW5kIGRlZmluaXRlbHkgc29tZSBjcm9zcy1yZWZlcmVuY2luZy4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBhIGNoYWluIG9mIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZS4gVGltZSB0byBnZXQgdG8gd29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgT3BlbiB2U3dpdGNoIGlzIGEgbXVsdGlsYXllciBFdGhlcm5ldCBzd2l0Y2ggdGFyZ2V0ZWQgYXQgdmlydHVhbGl6ZWRcbiAgMjM6XHRcdCAgZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24gdG8gc3VwcG9ydGluZyBhIHZhcmlldHkgb2YgZmVhdHVyZXNcbiAgMjQ6XHRcdCAgZXhwZWN0ZWQgaW4gYSB0cmFkaXRpb25hbCBoYXJkd2FyZSBzd2l0Y2gsIGl0IGVuYWJsZXMgZmluZS1ncmFpbmVkXG4gIDI1Olx0XHQgIHByb2dyYW1tYXRpYyBleHRlbnNpb24gYW5kIGZsb3ctYmFzZWQgY29udHJvbCBvZiB0aGUgbmV0d29yay4gIFRoaXNcbiAgMjY6XHRcdCAgY29udHJvbCBpcyB1c2VmdWwgaW4gYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zIGJ1dCBpc1xuICAyNzpcdFx0ICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGluIG11bHRpLXNlcnZlciB2aXJ0dWFsaXphdGlvbiBkZXBsb3ltZW50cyxcbiAgMjg6XHRcdCAgd2hpY2ggYXJlIG9mdGVuIGNoYXJhY3Rlcml6ZWQgYnkgaGlnaGx5IGR5bmFtaWMgZW5kcG9pbnRzIGFuZCB0aGVcbiAgMjk6XHRcdCAgbmVlZCB0byBtYWludGFpbiBsb2dpY2FsIGFic3RyYWN0aW9ucyBmb3IgbXVsdGlwbGUgdGVuYW50cy5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcbiAgMzI6XHRcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcbiAgMzM6XHRcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxuICAzNDpcdFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxuICAzNzpcdFx0ICB1dGlsaXRpZXMuXG4gIDM4Olx0XG4gIDM5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgNDA6XHRcdCAgY2FsbGVkIG9wZW52c3dpdGNoLlxuICA0MTpcdFxuICA0MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbiAgNDU6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiAgNDY6XHRcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcbiAgNDc6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFXG4gIDQ4Olx0XHRkZWZhdWx0IE9QRU5WU1dJVENIXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBPcGVuIHZTd2l0Y2ggd2lsbCBiZSBhYmxlIGNyZWF0ZSBHUkVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgT3BlbiB2U3dpdGNoIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBPUEVOVlNXSVRDSGAgaGFzIHNvbWUgcHJldHR5IHNwZWNpZmljIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCBpdCBjbGVhcmx5IGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbmV0d29yay1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFRoZW4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCwgYCFORl9DT05OVFJBQ0sgfHwgLi4uYC4gVGhpcyB0ZWxscyBtZSB0aGF0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVpdGhlciBleHBsaWNpdGx5IGRpc2FibGVkLCBvciBpdCByZWxpZXMgb24gc29tZSBvdGhlciBjb25kaXRpb24uIFNpbmNlIEkmIzM5O20gYWltaW5nIGZvciBmdWxsIGZlYXR1cmUgc3VwcG9ydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjb25uZWN0aW9uIHRyYWNraW5nIHBpZWNlLgoKVG8gZW5hYmxlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZlYXR1cmVzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkLiAgYE5GX0NPTk5UUkFDS2Agc2VlbXMgbGlrZSB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCBsaWtlbHkgYWRkcyBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvciBtZXRyaWNzLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgc2V0dGluZyB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgZGVmaW5lZCBhcyBhIHRyaXN0YXRlIG9wdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIHdlIGVuYWJsZSBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGNydWNpYWxseSwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBXZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0aGF0IG9uZS4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIGNhbiB0ZWxsIGl0IHNwZWNpZmljYWxseSB0YXJnZXRzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCBmdW5jdGlvbnMuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGZ1bmN0aW9ucywgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcy4KCk15IGZvY3VzIHNob3VsZCBiZSBob25lZCBpbiBvbiB0aGVzZSBmdW5jdGlvbnMsIHRoYXQgaXMsIHRoZSBzeW1ib2xzIHRvIHdhdGNoIG91dCBmb3IgYXMgSSBwcm9jZWVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MzY9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2MC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODYxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5NzUtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5NzY6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk3Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHRob3NlIGZ1bmN0aW9uIG5hbWVzOgoKKipDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IE1hbmFnZW1lbnQqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB3aXRoaW4gT3BlbiB2U3dpdGNoLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLiBJJiMzOTttIHNlZWluZyBmb3VyIGtleSBmdW5jdGlvbnMgaGVyZS4gTGV0JiMzOTtzIGJyZWFrIGRvd24gd2hhdCBJIHRoaW5rIHRoZXkgKmRvKjoKCiogICBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgOiBUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSByZXNwb25zaWJsZSBmb3IgKipzZXR0aW5nKiogYSBuZXcgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdC4gVGhhdCBjb3VsZCBtZWFuIHNldHRpbmcgbGltaXRzIG9uIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLCBuZXcgY29ubmVjdGlvbnMsIHJhdGUgbGltaXRpbmcsIGNvbm5lY3Rpb24gdGltZW91dHMgb3Igb3RoZXIgcGFyYW1ldGVycy4gSSYjMzk7ZCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGluIHRoZSBwYXJhbWV0ZXJzIHNwZWNpZnlpbmcgdGhlIG5ldyBsaW1pdHMgYW5kIGxpa2VseSBhIGtleSBpZGVudGlmeWluZyB0aGUgZmxvdyBvciBjb25uZWN0aW9uIHN1YmplY3QgdG8gdGhlIGxpbWl0LgoKKiAgIGBvdnNfY3RfbGltaXRfY21kX2RlbGA6IFRoaXMgb25lIGlzIHRoZSBjb3VudGVycGFydCwgc28gaXQmIzM5O3MgbW9zdCBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgKipkZWxldGluZyoqIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQuIFBlcmhhcHMgaXQmIzM5O3MgcmVtb3ZpbmcgYSBzcGVjaWZpYyBsaW1pdCBlbnRyeSBpZGVudGlmaWVkIGJ5IHRoZSBzYW1lIGtleSB1c2VkIGR1cmluZyB0aGUgc2V0IG9wZXJhdGlvbiwgb3IgbWF5YmUgaXQgcmVzZXRzIGEgYnJvYWRlciByYW5nZSBvZiBsaW1pdHMuCgoqICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YDogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBhY2Nlc3Nvci4gSXQgd2lsbCBiZSB1c2VkIHRvICoqcmV0cmlldmUqKiB0aGUgY3VycmVudCBsaW1pdHMsIHBlcmhhcHMgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgb3IgZm9yIHBvbGljeSBlbmZvcmNlbWVudC4gSXQgd291bGQgYWxsb3cgeW91IHRvIHF1ZXJ5IHRoZSBjb25maWd1cmVkIGxpbWl0cyBhbmQgc2VlIHRoZWlyIHZhbHVlcy4KCiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YDogVGhpcyBpcyB0aGUgY3J1Y2lhbCBwYXJ0OyBpdCYjMzk7cyB0aGUgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBjYWxsZWQgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBwcm9iYWJseSBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIGxpa2UgYG92c19jdF9leGVjdXRlYCBvciBhIHNpbWlsYXIgY29ubmVjdGlvbiB0cmFja2luZyBwcm9jZXNzaW5nIHJvdXRpbmUsIHRvICoqY2hlY2sqKiBpZiBhIGdpdmVuIHBhY2tldCYjMzk7cyBmbG93IHZpb2xhdGVzIGFueSBvZiB0aGUgY29uZmlndXJlZCBsaW1pdHMuIEl0IGRldGVybWluZXMgd2hldGhlciBhIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyBwZXJtaXR0ZWQsIGRyb3BwZWQsIG9yIHRocm90dGxlZC4KCkVmZmVjdGl2ZWx5LCB0aGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhIGZ1bGwgc2V0IG9mIGZ1bmN0aW9uYWxpdGllcyBmb3IgbWFuYWdpbmcgY29ubmVjdGlvbiBsaW1pdHMuIEl0IGlzIGEgY29tcGxldGUgc3lzdGVtIHRoYXQgc2V0cywgZGVsZXRlcyBhbmQgcXVlcmllcyB0aGVzZSBsaW1pdHMsIHdpdGggYSBjaGVjayB0aGF0IHdpbGwgZW5zdXJlIHRoYXQgdGhlIGxpbWl0cyBhcmUgYWN0dWFsbHkgZW5mb3JjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9jaGVja19saW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cdFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlx0XHRcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVx0XHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVHJhY2luZyB0aGUgQ29ubmVjdGlvbjogb3ZzX2N0X2NvbW1pdCBhbmQgSXRzIENhbGxlcnMqKgoKQWxyaWdodCwgbXkgYnJhaW4ganVzdCBtYXBwZWQgb3V0IGEgY3J1Y2lhbCBsaW5rOiBgb3ZzX2N0X2NvbW1pdGAgY2FsbHMgYG92c19jdF9jaGVja19saW1pdGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbnRlcmVzdCBpcyBub3cgcGlxdWVkIGJlY2F1c2UgYG92c19jdF9jb21taXRgIGlzIGJlaW5nIGludm9rZWQgYnkgZWl0aGVyIGBfX292c19jdF9leGVjdXRlYCBvciBgb3ZzX2N0X2V4ZWN1dGVgLCB3aGljaCBhcmUgdGhlIHRydWUgZW5naW5lcyBoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIFRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGZsb3csIEkgbmVlZCB0byB6b29tIGluIG9uIGBvdnNfY3RfZXhlY3V0ZWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo1MzM6c3RydWN0IG5mX2Nvbm4gKm92c19jdF9leGVjdXRlZChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTM0LVx0XHRcdFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzEtXHRpZiAoIWN0KVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcdFx0Y3QgPSBvdnNfY3RfZXhlY3V0ZWQobmV0LCBrZXksIGluZm8sIHNrYiwgXHUwMDI2Y3RfZXhlY3V0ZWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3My1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQyLVx0XHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyBFeGVjdXRpb24qKgoKQWxyaWdodCwgc28gYG92c19jdF9leGVjdXRlYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgZWl0aGVyIGEgZGlyZWN0bHkgZXhwb3J0ZWQgZnVuY3Rpb24gKm9yKiBpdCYjMzk7cyBkZWVwbHkgaW52b2x2ZWQgd2l0aGluIGBhY3Rpb25zLmNgLiBHaXZlbiBpdHMgbmFtZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCB0aGUgbGF0dGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmNgIGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGJlaW5nIGltcGxlbWVudGVkIGF0IHRoaXMgbG93IGxldmVsLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCYjMzk7cyBnZXQgdG8gaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBsb2dpYyBmb3IgbWF0Y2hpbmcgZmxvd3MsIHNldHRpbmcgY29ubmVjdGlvbiBzdGF0ZXMsIGFuZCBtYW5pcHVsYXRpbmcgcGFja2V0cyBiYXNlZCBvbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIGluZm9ybWF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIG15IGh1bmNoIGlzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xMjU1PXN0YXRpYyBpbnQgZG9fZXhlY3V0ZV9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xMzg1LVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxMzg2Olx0XHRcdGVyciA9IG92c19jdF9leGVjdXRlKG92c19kcF9nZXRfbmV0KGRwKSwgc2tiLCBrZXksXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODctXHRcdFx0XHRcdCAgICAgbmxhX2RhdGEoYSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29ubnRyYWNrIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBgb3ZzX2N0X2V4ZWN1dGVgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhbmQgb2YgY291cnNlLCBgb3ZzX2N0X2V4ZWN1dGVgIGl0c2VsZi4KCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgYXJlIHRob3NlIGBvdnNfY3RfbGltaXRfKmAgZnVuY3Rpb25zIHN0YXRpYz8gQSBxdWljayBjaGVjayBpbiBgY29ubnRyYWNrLmNgIGNvbmZpcm1zIHRoZXkgKmFyZSogZGVjbGFyZWQgYXMgc3RhdGljLiBIb3dldmVyLCBiZWluZyBHZW5sIG9wZXJhdGlvbnMsIHRoZXkgYXJlIGFjY2Vzc2libGUuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyBkbyB0aGV5IGludGVyYWN0PwoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBgb3ZzX2N0X2V4ZWN1dGVgIGl0c2VsZiBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGgvZnJvbSBpdC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCBzcGVjaWZpY2FsbHkgaW4gYGNvbm50cmFjay5jYCwgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MzY9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2MC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODYxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5NzUtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5NzY6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk3Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25udHJhY2sgSW1wbGVtZW50YXRpb24gZm9yIFN5bWJvbCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG92c19jdF9leGVjdXRlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0IG1lIGV4cGxvcmUgYGNvbm50cmFjay5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGJldHRlciwgbm9uLXN0YXRpYyBvcHRpb25zLiBJJiMzOTttIGxpa2luZyBgb3ZzX2N0X2V4ZWN1dGVgLCBidXQgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCBgb3ZzX2N0X2xpbWl0X2luaXRgPyBOb3BlLCBpdCYjMzk7cyBzdGF0aWMuCgpBaCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCDigJMgdGhhdCBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGEgZ2VubCBjYWxsYmFjayEgU28gdGhlIHByb21wdCB3YW50cyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGFuZCB0aGlzIHdpbGwgKm5vdCogYmUgaW5saW5lZC4gSXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBnZW5sX3NtYWxsX29wc2AsIG1lYW5pbmcgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQuCgpMZXQmIzM5O3MgbWFrZSBzdXJlLCBJIHdhbnQgdG8gY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYmFjayBhdCBgb3ZzX2N0X2V4ZWN1dGVgIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZS4KClJlZ2FyZGluZyB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIHRoZSBtYWluIG9uZXMgYXJlIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBOZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGlzIHRoZSBjb3JyZWN0IG5hbWUuLi4gWWVwLCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLgoKTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLiBJIHJlbWVtYmVyIHRoYXQgYE9QRU5WU1dJVENIYCBkZXBlbmRzIG9uIGBJTkVUYCwgc28gYElORVRgIGlzIG5lZWRlZC4gYE5GX0NPTk5UUkFDS2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgc28gd2UgbmVlZCBgTkVURklMVEVSYCB0b28uIEJ1dCBnZW5lcmFsbHksIHRoZSBwcmVmZXJlbmNlIGlzIHRvIGxpc3Qgb25seSBkaXJlY3QgZGVwZW5kZW5jaWVzLiBTbywgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAgYXJlIHRoZSBjb25maWdzIEkmIzM5O2xsIGJlIG5vdGluZy4KCkkgd2lsbCBhbHNvIGNoZWNrIHRoZSBjb2RlIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBob3cgYElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJU19FTkFCTEVEXFwoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTYxPXN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy03OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4MDojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODEtI2RlZmluZSBPVlNfQ1RfTElNSVRfVU5MSU1JVEVEXHQwXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTg2MD1zdGF0aWMgYm9vbCBsYWJlbHNfbm9uemVybyhjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcwLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3MTojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcyLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc3LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk3ODojaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTc5LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpKSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1NzM9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4OC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg5OiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTkwLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAxMz1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDI0LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMjU6I2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMjYtXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAzMj12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAzNS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyMDM2OiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDM3LVx0b3ZzX2N0X2xpbWl0X2V4aXQobmV0LCBvdnNfbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MDgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBDb25udHJhY2sgaW4gT1ZTKioKClJpZ2h0LCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGRlZmluaXRlbHkgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBvdnNfY3RfbGltaXRfY21kX3NldGAgd2l0aGluIGBjb25udHJhY2suY2AuIE5lZWQgdG8gYmUgc3VyZSBhYm91dCBhIGZldyB0aGluZ3MuIEZpcnN0LCBpcyBpdCBkZWNsYXJlZCBhcyBgc3RhdGljYD8gWXVwLCBpdCBpcy4gRXhjZWxsZW50LiBNYWtlcyBpdCBhIGRlY2VudCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMuIEl0JiMzOTtzIGFsc28gYSBnZW5sIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdOKAmXMgbm90IGlubGluZWQsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LiBCdXQsIGxldCYjMzk7cyBub3QgbGltaXQgb3VyIHZpZXcgdG8gdGhhdC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBrZWVwIGBvdnNfY3RfZXhlY3V0ZWAgaW4gbWluZCDigJMgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCBjb3VsZCBvZmZlciBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8gdGhlIGRhdGEgZmxvdy4gVGhpbmtpbmcgYHNldC1yZXN1bHRzYCBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBhbmFseXNpcy4gTmVlZCB0byB0ZXN0IHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9jbWRfZ2V0JiMzNDssCiAgICAmIzM0O292c19jdF9leGVjdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUkNVIHByb3RlY3Rpb24gdG8gdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBmZWF0dXJlLCBmaXhpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nLCBkZWxldGluZywgYW5kIGdldHRpbmcgY29ubnRyYWNrIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgbGltaXQgY2hlY2tpbmcgbG9naWMgZHVyaW5nIHBhY2tldCBleGVjdXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgZmVhdHVyZXMgaW4gb3BlbnZzd2l0Y2guJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSQ1UgcHJvdGVjdGlvbiB0byB0aGUgb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGZlYXR1cmUsIGZpeGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgZm9yIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyBjb25udHJhY2sgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBsaW1pdCBjaGVja2luZyBsb2dpYyBkdXJpbmcgcGFja2V0IGV4ZWN1dGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBmZWF0dXJlcyBpbiBvcGVudnN3aXRjaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOTllZDA5NDEzODdiM2Q5YzA5YzZhNDI0YjlmZjYzNmRjYTQwMzRkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTQ6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uY2M2ZWE0MDE0YzE2YSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw0NyBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKIHsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGk7CiAKJiM0MzsJaW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7CS8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CiAJbmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLSZndDtkYXRhKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwpAQCAtMTY2NSwxMiAmIzQzOzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE2NzksNiAmIzQzOzE2OTEsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7CiAJCQlvdnNfbG9jaygpOwomIzQzOwkJCWluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKApAQCAtMTY5NSw2ICYjNDM7MTcwOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJY3RfbGltaXQtJmd0O2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CkBAIC0xNzA5LDEyICYjNDM7MTcyMywxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTcyMyw2ICYjNDM7MTczOCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNzMwLDYgJiM0MzsxNzQ2LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3NzMsNiAmIzQzOzE3OTAsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCAmYW1wO3pvbmVfbGltaXQpOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLApAQCAtMTc5NiwxMiAmIzQzOzE4MTQsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJCSZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKLQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpOwogCiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCQluZXQsIGluZm8tJmd0O2RhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTgxNiw2ICYjNDM7MTgzMiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KQpAQCAtMTgyOCwxOSAmIzQzOzE4NDUsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCWhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7CiAJCQllcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tJmd0O2RhdGEsCiAJCQkJY3RfbGltaXQtJmd0O3pvbmUsIGN0X2xpbWl0LSZndDtsaW1pdCwgcmVwbHkpOwogCQkJaWYgKGVycikKLQkJCQlnb3RvIGV4aXRfZXJyOwomIzQzOwkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCi1leGl0X2VycjoKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODUwLDcgJiM0MzsxODY0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsCkBAIC0xODYzLDggJiM0MzsxODc2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTg4NCw3ICYjNDM7MTg5Nyw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLApAQCAtMTg5Nyw4ICYjNDM7MTkwOSw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE5MTgsNyAmIzQzOzE5MzAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULApAQCAtMTkzMiwxOCAmIzQzOzE5NDQsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJaWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJbmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLAogCQkJcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9IGVsc2UgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbywKIAkJCQkJCSAgICAgIHJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9lcnI7CiAKIAlubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7CiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAppbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaApAQCAtMTY0LDcgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuCiAgKi8KIHN0cnVjdCBvdnNfbmV0IHsKQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkxCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDExMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVIENvbmN1cnJlbmN5IEZpeDogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgY3RfbGltaXRfaW5mb2AgcG9pbnRlci4gVGhlIGNvcmUgY2hhbmdlIGlzIHRvIG1ha2UgaXQgYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHJhY2VzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2Vzcy4gVGhlIHBhdGNoIGFkZHMgdGhlIHN0YW5kYXJkIFJDVSBwcmltaXRpdmVzIGxpa2UgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBgcmN1X3JlcGxhY2VfcG9pbnRlcmAsIGFuZCBgc3luY2hyb25pemVfcmN1KClgIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uLgoKVGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiB1c2luZyBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSBiZWZvcmUgYXNzaWduaW5nIGl0IHRvIHRoZSBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaXMgYSBnb29kIHByYWN0aWNlLiBJdCBtaW5pbWl6ZXMgdGhlIHdpbmRvdyBvZiB2dWxuZXJhYmlsaXR5LiBMZXQgbWUganVzdCBjb25maXJtLi4uIHRoZSBwYXRjaCBkb2VzIHJlZmFjdG9yIHRoZSBhbGxvY2F0aW9uIGxvZ2ljOgpgYGBjCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTsKJiM0MzsJaWYgKCFpbmZvKQoJCXJldHVybiAtRU5PTUVNOwpgYGAKCkFoLCB0aGUgdXNhZ2Ugb2YgYGttYWxsb2Nfb2JqYCwgaXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIGZ1bmN0aW9uLCBpdCYjMzk7cyBsaWtlbHkgYSBtYWNybyB3aXRoaW4gT1ZTLiBUaGF0JiMzOTtzIGZpbmUsIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIGlzIHN0aWxsIGludGFjdC4KCkkmIzM5O20gY2hlY2tpbmcgaWYgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gVGhlIGxvY2FsIGBpbmZvYCBpcyBiZWluZyBhbGxvY2F0ZWQgYW5kICp0aGVuKiBpdHMgZmllbGRzIGFyZSBiZWluZyBwcm9wZXJseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgYXNzaWdubWVudC4gV2UgaGF2ZSBhIHNvbGlkIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlOiBgaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdGAsIGBpbmZvLSZndDtsaW1pdHNgLCBhbmQgYGluZm8tJmd0O2RhdGFgIGFyZSBhbGwgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGFsbG9jYXRpb24uIEl0JiMzOTtzIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGFzIGJlZm9yZSwganVzdCByZWZhY3RvcmVkIGZvciB0aGUgUkNVIGNvbnRleHQuIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgYWxsIGFib3V0IFJDVSBzeW5jaHJvbml6YXRpb24uIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoZSBpc3N1ZXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgKHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgcmFjZXMpLiBXZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIG5ldyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBqdXN0IHNvbGlkaWZ5aW5nIHRoZSBSQ1UgcHJvdGVjdGlvbiBvZiBhbiBleGlzdGluZyBkYXRhIHN0cnVjdHVyZS4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIEtNU0FOIHJ1bGVzLiAmIzM0O05lZWRzS01TQU49ZmFsc2UgSUY6IHByaW1hcmlseSBmaXhlcyBvdXQtb2YtYm91bmRzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7IFRoYXQgZml0cyBwZXJmZWN0bHkuICYjMzQ7QWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuJiMzNDsgWWVwLiAmIzM0O1RoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OyBOb3BlLgoKVGhlIHBhdGNoICppcyogYSBmaXggZm9yIGEgY29uY3VycmVuY3kgYnVnIChtaXNzaW5nIFJDVSBwcm90ZWN0aW9uKSBvbiBgY3RfbGltaXRfaW5mb2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgdG8gcHJvdGVjdCBhZ2FpbnN0IEtBU0FOIGRldGVjdGFibGUgZXJyb3JzLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIChyY3VfZGVyZWZlcmVuY2UsIHJjdV9hc3NpZ25fcG9pbnRlciwgc3luY2hyb25pemVfcmN1KSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBwb2ludGVyIGluIE9wZW4gdlN3aXRjaCBjb25udHJhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGNoYW5nZSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKHRoZSBzYW1lIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYXMgYmVmb3JlKS4gVGhlIHByaW1hcnkgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6MzIuMTYwMDE5NDc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NzQ2NzQ1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkNVIHByb3RlY3Rpb24gdG8gdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBmZWF0dXJlLCBmaXhpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nLCBkZWxldGluZywgYW5kIGdldHRpbmcgY29ubnRyYWNrIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgbGltaXQgY2hlY2tpbmcgbG9naWMgZHVyaW5nIHBhY2tldCBleGVjdXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgZmVhdHVyZXMgaW4gb3BlbnZzd2l0Y2guXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjMyLjE2MDAyNDg2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcxMTU0MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDk5ZWQwOTQxMzg3YjNkOWMwOWM2YTQyNGI5ZmY2MzZkY2E0MDM0ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxNDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0Li5jYzZlYTQwMTRjMTZhIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XFxuIFxcdHUzMiBjb25uY291bnRfa2V5O1xcbiBcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFjdF9saW1pdF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVxcdTAwM2V6b25lLmlkO1xcbiBcXG4gXFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cXHUwMDNlem9uZS5pZCk7XFxuQEAgLTE1ODUsNDAgKzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGksIGVycjtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbylcXG4rXFx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcXG4rXFx0aWYgKCFpbmZvKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzID1cXG4rXFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbitcXHRpbmZvLVxcdTAwM2VsaW1pdHMgPVxcbiBcXHRcXHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKSB7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWxpbWl0cykge1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcXG4tXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbitcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXSk7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcXG4gXFxuLVxcdGlmIChJU19FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmIChJU19FUlIoaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihpbmZvLVxcdTAwM2VkYXRhKTtcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlbGltaXRzKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHByX2VycihcXFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRpbmZvID0gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcXG4rXFx0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFxuIFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTY3OSw2ICsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNjk1LDYgKzE3MDgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuIFxcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuQEAgLTE3MDksMTIgKzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTcyMyw2ICsxNzM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNzMwLDYgKzE3NDYsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH1cXG5AQCAtMTc3Myw2ICsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5AQCAtMTc5NiwxMiArMTgxNCwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ6b25lKSkpIHtcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdFxcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXFxuIFxcdFxcdFxcdFxcdG5ldCwgaW5mby1cXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG5AQCAtMTgxNiw2ICsxODMyLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcXG5AQCAtMTgyOCwxOSArMTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4gXFx0XFx0aGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuIFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXFx1MDAzZWRhdGEsXFxuIFxcdFxcdFxcdFxcdGN0X2xpbWl0LVxcdTAwM2V6b25lLCBjdF9saW1pdC1cXHUwMDNlbGltaXQsIHJlcGx5KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1leGl0X2VycjpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTE4NTAsNyArMTg2NCw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiBcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXFxuQEAgLTE4NjMsOCArMTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgY3RfbGltaXRfaW5mbyk7XFxuK1xcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXG5AQCAtMTg4NCw3ICsxODk3LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcXG5AQCAtMTg5Nyw4ICsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xOTE4LDcgKzE5MzAsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXFxuQEAgLTE5MzIsMTggKzE5NDQsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRyZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbiBcXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XFxuIFxcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbmluZGV4IDY5NjY0MGU4OGZhN2UuLjA2YzY5NTZmYjFkYzQgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbkBAIC0xNjQsNyArMTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcXG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXFxuICAqIEBkcF9ub3RpZnlfd29yazogQSB3b3JrIG5vdGlmaWVyIHRvIGhhbmRsZSBwb3J0IHVucmVnaXN0ZXJpbmcuXFxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXFxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXFxuKyAqIEBjdF9saW1pdF9pbmZvOiBIYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLiBQcm90ZWN0ZWRcXG4rICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xcbisgKiBuZXRucyB0ZWFyZG93bi5cXG4gICogQHh0X2xhYmVsOiBXaGV0aGVyIGNvbm5sYWJsZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBuZXR3b3JrIG9yIG5vdC5cXG4gICovXFxuIHN0cnVjdCBvdnNfbmV0IHtcXG5AQCAtMTcyLDcgKzE3NCw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XFxuICNlbmRpZlxcbiBcXHRib29sIHh0X2xhYmVsO1xcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNDozMi41MzE5MDIzNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzE5NTMxODY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgZmVhdHVyZSwgZml4aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGxpbWl0IGNoZWNraW5nIGxvZ2ljIGR1cmluZyBwYWNrZXQgZXhlY3V0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGZlYXR1cmVzIGluIG9wZW52c3dpdGNoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwOTllZDA5NDEzODdiM2Q5YzA5YzZhNDI0YjlmZjYzNmRjYTQwMzRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTQ6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLmNjNmVhNDAxNGMxNmEgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTY3OSw2ICsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICsxNzA4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0Y3RfbGltaXQtXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFxuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3MDksMTIgKzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTcyMyw2ICsxNzM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiArMTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTc3Myw2ICsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtcbiB9XG4gXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiArMTgxNCwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0XHRcdTAwMjZ6b25lKSkpIHtcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVwiKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiArMTgzMiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG5AQCAtMTgyOCwxOSArMTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRjdF9saW1pdC1cdTAwM2V6b25lLCBjdF9saW1pdC1cdTAwM2VsaW1pdCwgcmVwbHkpO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgKzE4NjQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsOCArMTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuK1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4rXHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE4ODQsNyArMTg5Nyw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5Nyw4ICsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTkxOCw3ICsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDE4ICsxOTQ0LDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgICByZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2VycjtcbiBcbiBcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcbiBcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4rICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcbisgKiBuZXRucyB0ZWFyZG93bi5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6MzIuNTMxOTAzODQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDQ3NTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm50cmFjayBSQ1UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdGhlIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgZmlsZXMgYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgYW5kIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaGAuIEl0IGFwcGVhcnMgdGhleSdyZSBhZGRpbmcgUkNVIChSZWFkLUNvcHkgVXBkYXRlKSBwcm90ZWN0aW9uIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYC4gR29vZCwgdGhhdCdzIGEgcG9zaXRpdmUgc3RhcnQg4oCTIGFkZHJlc3NpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBpcyBhbHdheXMgYSB3aW4sIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBjb21wb25lbnQgbGlrZSBjb25udHJhY2suXG5cblRoZSBjb2RlJ3MgdXNpbmcgc3RhbmRhcmQgUkNVIHByaW1pdGl2ZXM6IGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYC4gSSBhbHNvIHNlZSBgb3ZzbF9kZXJlZmVyZW5jZSgpYCBiZWluZyB1c2VkLCB3aGljaCBpcyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIE9WUyBjb2RlYmFzZS4gVGhlIGNoYW5nZXMgdG8gYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCB0byBub3cgYmUgY2FsbGVkIHdpdGggYW4gUkNVIHJlYWQgbG9jayBoZWxkIGFsc28gbWFrZSBzZW5zZS4gRW5zdXJpbmcgdGhlIGFjY2VzcyB0byB0aGUgbGltaXQgZGF0YSBpcyBwcm90ZWN0ZWQgZHVyaW5nIHJlYWRzIGlzIGNydWNpYWwuIEFuZCBmaW5hbGx5LCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGhvbGRpbmcgYHJjdV9yZWFkX2xvY2soKWAgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBuZWVkIHRvIHByb3RlY3QgdGhlIGRhdGEgd2l0aCBhbiBSQ1UgbG9jay4gVGhpcyBjbGVhcmx5IGluZGljYXRlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFkZHJlc3NpbmcgZWl0aGVyIGEgY29uY3VycmVuY3kgYnVnIG9yIGFuIFJDVSB1c2FnZSBidWcgcmVsYXRlZCB0byBjb25udHJhY2sgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAuIFNvLCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNpbmNlIHRoaXMgaXMgaW4gT3BlbiB2U3dpdGNoLCBteSBpbnN0aW5jdCBpcyB0aGF0IHdlJ2xsIG5lZWQgYENPTkZJR19PUEVOVlNXSVRDSGAgYW5kIHBvc3NpYmx5IGBDT05GSUdfT1BFTlZTV0lUQ0hfQ09OTlRSQUNLYCBhcyB3ZWxsLiBMZXQncyBkb3VibGUtY2hlY2sgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNDozOC40MjIzODIwMDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjU5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNDozOC40NjY0NTUwMDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzU0NTE0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgQ29ubnRyYWNrIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25udHJhY2sgc2l0dWF0aW9uLCBzbyBteSBmaXJzdCBtb3ZlIGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nOyBpdCdzIHRoZSB1c3VhbCBzcG90IHRvIGNvbmZpZ3VyZSBrZXJuZWwgZmVhdHVyZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyB3aXRoaW4gT3BlbiB2U3dpdGNoLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciBjb25udHJhY2sgdGhlcmUg4oCTIHRoaW5ncyBsaWtlIHdoZXRoZXIgaXQncyBlbmFibGVkLCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzLCBhbmQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yIHdpdGhpbiBPVlMuIExldCdzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLi4uIFRpbWUgdG8gZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NDEuMjIwOTcxNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTYzNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSF9DT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjQxLjI2Njg3Nzc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTA4ODE3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgQ09ORklHX09QRU5WU1dJVENIYCBhY3R1YWxseSByZWxpZXMgb24uIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHJpZ2h0PyBUbyBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGludm9sdmUgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgbWF5YmUgc29tZSBoZWFkZXIgZmlsZXMsIGFuZCBkZWZpbml0ZWx5IHNvbWUgY3Jvc3MtcmVmZXJlbmNpbmcuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgYSBjaGFpbiBvZiBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NDQuMDc3NzcwODIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XFxuICAzMjpcXHRcXHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXFxuICAzMzpcXHRcXHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcXG4gIDM0OlxcdFxcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxcbiAgMzc6XFx0XFx0ICB1dGlsaXRpZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgNDA6XFx0XFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRVxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgT3BlbiB2U3dpdGNoIHdpbGwgYmUgYWJsZSBjcmVhdGUgR1JFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjQ0LjA3NzkwNzkwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjEwNjExNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYE9QRU5WU1dJVENIYCBoYXMgc29tZSBwcmV0dHkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGl0IGNsZWFybHkgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gVGhlbiBJIHNlZSB0aGlzIGNvbmRpdGlvbmFsLCBgIU5GX0NPTk5UUkFDSyB8fCAuLi5gLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZWl0aGVyIGV4cGxpY2l0bHkgZGlzYWJsZWQsIG9yIGl0IHJlbGllcyBvbiBzb21lIG90aGVyIGNvbmRpdGlvbi4gU2luY2UgSSdtIGFpbWluZyBmb3IgZnVsbCBmZWF0dXJlIHN1cHBvcnQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyBwaWVjZS5cblxuVG8gZW5hYmxlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZlYXR1cmVzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBkZWZpbmVkLiAgYE5GX0NPTk5UUkFDS2Agc2VlbXMgbGlrZSB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCBsaWtlbHkgYWRkcyBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvciBtZXRyaWNzLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgc2V0dGluZyB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMsIHNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSB3aGF0IEknbSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjQ3LjgzODk3MjA0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMjIzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NDcuODgzMzAxODI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDY0MjgxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBkZWZpbmVkIGFzIGEgdHJpc3RhdGUgb3B0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSBlbmFibGUgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBjcnVjaWFsbHksIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gV2UncmUgZ29pbmcgdG8gbmVlZCB0aGF0IG9uZS5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgY2FuIHRlbGwgaXQgc3BlY2lmaWNhbGx5IHRhcmdldHMgbW9kaWZpY2F0aW9ucyB0byB0aGUgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYW5kIGBvdnNfY3RfY2hlY2tfbGltaXRgIGZ1bmN0aW9ucy4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgZnVuY3Rpb25zLCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgaG9uZWQgaW4gb24gdGhlc2UgZnVuY3Rpb25zLCB0aGF0IGlzLCB0aGUgc3ltYm9scyB0byB3YXRjaCBvdXQgZm9yIGFzIEkgcHJvY2VlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTEuNzI5NzMzNDgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxMDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MzY9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODYxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2Mi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk3NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk3NjpcXHRcXHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTc3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjUxLjc3NTQ0ODE0NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg3NTYzNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lczpcblxuKipDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgd2l0aGluIE9wZW4gdlN3aXRjaCwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhci4gSSdtIHNlZWluZyBmb3VyIGtleSBmdW5jdGlvbnMgaGVyZS4gTGV0J3MgYnJlYWsgZG93biB3aGF0IEkgdGhpbmsgdGhleSAqZG8qOlxuXG4qICAgYG92c19jdF9saW1pdF9jbWRfc2V0YDogVGhpcyBmdW5jdGlvbiAqbXVzdCogYmUgcmVzcG9uc2libGUgZm9yICoqc2V0dGluZyoqIGEgbmV3IGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQuIFRoYXQgY291bGQgbWVhbiBzZXR0aW5nIGxpbWl0cyBvbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucywgbmV3IGNvbm5lY3Rpb25zLCByYXRlIGxpbWl0aW5nLCBjb25uZWN0aW9uIHRpbWVvdXRzIG9yIG90aGVyIHBhcmFtZXRlcnMuIEknZCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGluIHRoZSBwYXJhbWV0ZXJzIHNwZWNpZnlpbmcgdGhlIG5ldyBsaW1pdHMgYW5kIGxpa2VseSBhIGtleSBpZGVudGlmeWluZyB0aGUgZmxvdyBvciBjb25uZWN0aW9uIHN1YmplY3QgdG8gdGhlIGxpbWl0LlxuXG4qICAgYG92c19jdF9saW1pdF9jbWRfZGVsYDogVGhpcyBvbmUgaXMgdGhlIGNvdW50ZXJwYXJ0LCBzbyBpdCdzIG1vc3QgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yICoqZGVsZXRpbmcqKiBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0LiBQZXJoYXBzIGl0J3MgcmVtb3ZpbmcgYSBzcGVjaWZpYyBsaW1pdCBlbnRyeSBpZGVudGlmaWVkIGJ5IHRoZSBzYW1lIGtleSB1c2VkIGR1cmluZyB0aGUgc2V0IG9wZXJhdGlvbiwgb3IgbWF5YmUgaXQgcmVzZXRzIGEgYnJvYWRlciByYW5nZSBvZiBsaW1pdHMuXG5cbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGFjY2Vzc29yLiBJdCB3aWxsIGJlIHVzZWQgdG8gKipyZXRyaWV2ZSoqIHRoZSBjdXJyZW50IGxpbWl0cywgcGVyaGFwcyBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvciBmb3IgcG9saWN5IGVuZm9yY2VtZW50LiBJdCB3b3VsZCBhbGxvdyB5b3UgdG8gcXVlcnkgdGhlIGNvbmZpZ3VyZWQgbGltaXRzIGFuZCBzZWUgdGhlaXIgdmFsdWVzLlxuXG4qICAgYG92c19jdF9jaGVja19saW1pdGA6IFRoaXMgaXMgdGhlIGNydWNpYWwgcGFydDsgaXQncyB0aGUgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCdzIHRoZSBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgY2FsbGVkIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgcHJvYmFibHkgZnJvbSB3aXRoaW4gYSBmdW5jdGlvbiBsaWtlIGBvdnNfY3RfZXhlY3V0ZWAgb3IgYSBzaW1pbGFyIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHJvY2Vzc2luZyByb3V0aW5lLCB0byAqKmNoZWNrKiogaWYgYSBnaXZlbiBwYWNrZXQncyBmbG93IHZpb2xhdGVzIGFueSBvZiB0aGUgY29uZmlndXJlZCBsaW1pdHMuIEl0IGRldGVybWluZXMgd2hldGhlciBhIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyBwZXJtaXR0ZWQsIGRyb3BwZWQsIG9yIHRocm90dGxlZC5cblxuRWZmZWN0aXZlbHksIHRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGEgZnVsbCBzZXQgb2YgZnVuY3Rpb25hbGl0aWVzIGZvciBtYW5hZ2luZyBjb25uZWN0aW9uIGxpbWl0cy4gSXQgaXMgYSBjb21wbGV0ZSBzeXN0ZW0gdGhhdCBzZXRzLCBkZWxldGVzIGFuZCBxdWVyaWVzIHRoZXNlIGxpbWl0cywgd2l0aCBhIGNoZWNrIHRoYXQgd2lsbCBlbnN1cmUgdGhhdCB0aGUgbGltaXRzIGFyZSBhY3R1YWxseSBlbmZvcmNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE0OjU2LjE2MzAxNDU4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDU3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgwLVxcdFxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5ODE6XFx0XFx0XFx0ZXJyID0gb3ZzX2N0X2NoZWNrX2xpbWl0KG5ldCwgc2tiLCBpbmZvKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVxcdFxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTYuMjExNDI0ODMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjA0MjU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUcmFjaW5nIHRoZSBDb25uZWN0aW9uOiBvdnNfY3RfY29tbWl0IGFuZCBJdHMgQ2FsbGVycyoqXG5cbkFscmlnaHQsIG15IGJyYWluIGp1c3QgbWFwcGVkIG91dCBhIGNydWNpYWwgbGluazogYG92c19jdF9jb21taXRgIGNhbGxzIGBvdnNfY3RfY2hlY2tfbGltaXRgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbnRlcmVzdCBpcyBub3cgcGlxdWVkIGJlY2F1c2UgYG92c19jdF9jb21taXRgIGlzIGJlaW5nIGludm9rZWQgYnkgZWl0aGVyIGBfX292c19jdF9leGVjdXRlYCBvciBgb3ZzX2N0X2V4ZWN1dGVgLCB3aGljaCBhcmUgdGhlIHRydWUgZW5naW5lcyBoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIFRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGZsb3csIEkgbmVlZCB0byB6b29tIGluIG9uIGBvdnNfY3RfZXhlY3V0ZWAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTkuMjMxODUzNDU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2OTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfZXhlY3V0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTUzMj1zdGF0aWNcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTMzOnN0cnVjdCBuZl9jb25uICpvdnNfY3RfZXhlY3V0ZWQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01MzQtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTYxPXN0YXRpYyBib29sIHNrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTcxLVxcdGlmICghY3QpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjU3MjpcXHRcXHRjdCA9IG92c19jdF9leGVjdXRlZChuZXQsIGtleSwgaW5mbywgc2tiLCBcXHUwMDI2Y3RfZXhlY3V0ZWQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01NzMtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTQ6NTkuMjc3ODI4MDYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTE5NTIwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIEV4ZWN1dGlvbioqXG5cbkFscmlnaHQsIHNvIGBvdnNfY3RfZXhlY3V0ZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgZWl0aGVyIGEgZGlyZWN0bHkgZXhwb3J0ZWQgZnVuY3Rpb24gKm9yKiBpdCdzIGRlZXBseSBpbnZvbHZlZCB3aXRoaW4gYGFjdGlvbnMuY2AuIEdpdmVuIGl0cyBuYW1lLCBJJ20gbGVhbmluZyB0b3dhcmQgdGhlIGxhdHRlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jYCBmaWxlIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGJlaW5nIGltcGxlbWVudGVkIGF0IHRoaXMgbG93IGxldmVsLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIGxldCdzIGdldCB0byBpdC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgZm9yIG1hdGNoaW5nIGZsb3dzLCBzZXR0aW5nIGNvbm5lY3Rpb24gc3RhdGVzLCBhbmQgbWFuaXB1bGF0aW5nIHBhY2tldHMgYmFzZWQgb24gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiBpbmZvcm1hdGlvbi4gTGV0J3Mgc2VlIGlmIG15IGh1bmNoIGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE1OjAzLjU4OTc4MjY0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTIwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTEyNTU9c3RhdGljIGludCBkb19leGVjdXRlX2FjdGlvbnMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTM4NS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjEzODY6XFx0XFx0XFx0ZXJyID0gb3ZzX2N0X2V4ZWN1dGUob3ZzX2RwX2dldF9uZXQoZHApLCBza2IsIGtleSxcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTEzODctXFx0XFx0XFx0XFx0XFx0ICAgICBubGFfZGF0YShhKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE1OjAzLjYzNTMwNTU5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU4NDQ5MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25udHJhY2sgRXhlY3V0aW9uKipcblxuT2theSwgc28gYG92c19jdF9leGVjdXRlYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYW5kIG9mIGNvdXJzZSwgYG92c19jdF9leGVjdXRlYCBpdHNlbGYuXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgYXJlIHRob3NlIGBvdnNfY3RfbGltaXRfKmAgZnVuY3Rpb25zIHN0YXRpYz8gQSBxdWljayBjaGVjayBpbiBgY29ubnRyYWNrLmNgIGNvbmZpcm1zIHRoZXkgKmFyZSogZGVjbGFyZWQgYXMgc3RhdGljLiBIb3dldmVyLCBiZWluZyBHZW5sIG9wZXJhdGlvbnMsIHRoZXkgYXJlIGFjY2Vzc2libGUuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyBkbyB0aGV5IGludGVyYWN0P1xuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBvdnNfY3RfZXhlY3V0ZWAgaXRzZWxmIGlzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoL2Zyb20gaXQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCBzcGVjaWZpY2FsbHkgaW4gYGNvbm50cmFjay5jYCwgdGhhdCB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UuIEknbGwgbmVlZCB0byBkcmlsbCBkZWVwZXIgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBhbmQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNTowNy43OTM3NTY5ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODIwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTgzNj1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjAtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4NjE6c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODYyLXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xOTcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgY3RfbGltaXRfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTc1LVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTc2OlxcdFxcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5NzctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MDcuODM4NTgyMTg4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDY3NzM0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbm50cmFjayBJbXBsZW1lbnRhdGlvbiBmb3IgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG92c19jdF9leGVjdXRlYCBpc24ndCBzdGF0aWMuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCBtZSBleHBsb3JlIGBjb25udHJhY2suY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBiZXR0ZXIsIG5vbi1zdGF0aWMgb3B0aW9ucy4gSSdtIGxpa2luZyBgb3ZzX2N0X2V4ZWN1dGVgLCBidXQgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBvdnNfY3RfbGltaXRfaW5pdGA/IE5vcGUsIGl0J3Mgc3RhdGljLlxuXG5BaCwgYG92c19jdF9saW1pdF9jbWRfc2V0YCDigJMgdGhhdCBsb29rcyBwcm9taXNpbmcuIEl0J3Mgc3RhdGljLCBidXQgaXQncyBhIGdlbmwgY2FsbGJhY2shIFNvIHRoZSBwcm9tcHQgd2FudHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBhbmQgdGhpcyB3aWxsICpub3QqIGJlIGlubGluZWQuIEl0J3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGBnZW5sX3NtYWxsX29wc2AsIG1lYW5pbmcgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQncyB3aGF0IEkgbmVlZC5cblxuTGV0J3MgbWFrZSBzdXJlLCBJIHdhbnQgdG8gY2hlY2sgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCB0aGVuIEknbGwgbG9vayBiYWNrIGF0IGBvdnNfY3RfZXhlY3V0ZWAgYXMgd2VsbCwganVzdCB0byBiZSBzdXJlLlxuXG5SZWdhcmRpbmcgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCB0aGUgbWFpbiBvbmVzIGFyZSBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gTmVlZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyB0aGUgY29ycmVjdCBuYW1lLi4uIFllcCwgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYC5cblxuTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLiBJIHJlbWVtYmVyIHRoYXQgYE9QRU5WU1dJVENIYCBkZXBlbmRzIG9uIGBJTkVUYCwgc28gYElORVRgIGlzIG5lZWRlZC4gYE5GX0NPTk5UUkFDS2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgc28gd2UgbmVlZCBgTkVURklMVEVSYCB0b28uIEJ1dCBnZW5lcmFsbHksIHRoZSBwcmVmZXJlbmNlIGlzIHRvIGxpc3Qgb25seSBkaXJlY3QgZGVwZW5kZW5jaWVzLiBTbywgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAgYXJlIHRoZSBjb25maWdzIEknbGwgYmUgbm90aW5nLlxuXG5JIHdpbGwgYWxzbyBjaGVjayB0aGUgY29kZSBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgaG93IGBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTQuNzQ1MzU4MDA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEzOTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJU19FTkFCTEVEXFxcXChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NjE9c3RydWN0IG92c19jb25udHJhY2tfaW5mbyB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNzktXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjgwOiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTgxLSNkZWZpbmUgT1ZTX0NUX0xJTUlUX1VOTElNSVRFRFxcdDBcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04NjA9c3RhdGljIGJvb2wgbGFiZWxzX25vbnplcm8oY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4NzE6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODcyLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk3Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTc4OiNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk3OS1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTU3Mz1zdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1ODgtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE1ODk6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU5MC1zdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAxMz1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMjQtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMjU6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAyNi1cXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDMyPXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMzUtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMzY6I2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAzNy1cXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxNToxNC44Mjg1MDI0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE3NDY1NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCBhbmQgQ29ubnRyYWNrIGluIE9WUyoqXG5cblJpZ2h0LCBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgIGlzIGRlZmluaXRlbHkgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIHdpdGhpbiBgY29ubnRyYWNrLmNgLiBOZWVkIHRvIGJlIHN1cmUgYWJvdXQgYSBmZXcgdGhpbmdzLiBGaXJzdCwgaXMgaXQgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IFl1cCwgaXQgaXMuIEV4Y2VsbGVudC4gTWFrZXMgaXQgYSBkZWNlbnQgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBJdCdzIGFsc28gYSBnZW5sIGNhbGxiYWNrLCB3aGljaCBtZWFucyBpdOKAmXMgbm90IGlubGluZWQsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0LiBCdXQsIGxldCdzIG5vdCBsaW1pdCBvdXIgdmlldyB0byB0aGF0LiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGtlZXAgYG92c19jdF9leGVjdXRlYCBpbiBtaW5kIOKAkyBpdCdzICpub3QqIHN0YXRpYywgc28gaXQgY291bGQgb2ZmZXIgYWRkaXRpb25hbCBpbnNpZ2h0cyBpbnRvIHRoZSBkYXRhIGZsb3cuIFRoaW5raW5nIGBzZXQtcmVzdWx0c2AgaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgYW5hbHlzaXMuIE5lZWQgdG8gdGVzdCB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwOCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTkuNjQ1OTcwODc0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyNDcwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfY3RfZXhlY3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkNVIHByb3RlY3Rpb24gdG8gdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBmZWF0dXJlLCBmaXhpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nLCBkZWxldGluZywgYW5kIGdldHRpbmcgY29ubnRyYWNrIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgbGltaXQgY2hlY2tpbmcgbG9naWMgZHVyaW5nIHBhY2tldCBleGVjdXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgZmVhdHVyZXMgaW4gb3BlbnZzd2l0Y2guXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBSQ1UgcHJvdGVjdGlvbiB0byB0aGUgb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGZlYXR1cmUsIGZpeGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgZm9yIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyBjb25udHJhY2sgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBsaW1pdCBjaGVja2luZyBsb2dpYyBkdXJpbmcgcGFja2V0IGV4ZWN1dGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBmZWF0dXJlcyBpbiBvcGVudnN3aXRjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTkuNzI3MjI0NjU1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAwNzQ1NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE1OjE5LjcyNzc3NTYyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDAwNjkwMjk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIChyY3VfZGVyZWZlcmVuY2UsIHJjdV9hc3NpZ25fcG9pbnRlciwgc3luY2hyb25pemVfcmN1KSBmb3IgdGhlIGBjdF9saW1pdF9pbmZvYCBwb2ludGVyIGluIE9wZW4gdlN3aXRjaCBjb25udHJhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGNoYW5nZSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKHRoZSBzYW1lIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYXMgYmVmb3JlKS4gVGhlIHByaW1hcnkgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwOTllZDA5NDEzODdiM2Q5YzA5YzZhNDI0YjlmZjYzNmRjYTQwMzRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTQ6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLmNjNmVhNDAxNGMxNmEgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTY3OSw2ICsxNjkxLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTY5NSw2ICsxNzA4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0Y3RfbGltaXQtXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFxuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3MDksMTIgKzE3MjMsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTcyMyw2ICsxNzM4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE3MzAsNiArMTc0Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTc3Myw2ICsxNzkwLDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtcbiB9XG4gXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5AQCAtMTc5NiwxMiArMTgxNCwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0XHRcdTAwMjZ6b25lKSkpIHtcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVwiKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XG4gXG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0XHRuZXQsIGluZm8tXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTE4MTYsNiArMTgzMiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG5AQCAtMTgyOCwxOSArMTg0NSwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRjdF9saW1pdC1cdTAwM2V6b25lLCBjdF9saW1pdC1cdTAwM2VsaW1pdCwgcmVwbHkpO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0fVxuIFxuLWV4aXRfZXJyOlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xODUwLDcgKzE4NjQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsOCArMTg3Niw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuK1x0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXG4rXHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE4ODQsNyArMTg5Nyw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5Nyw4ICsxOTA5LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTkxOCw3ICsxOTMwLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDE4ICsxOTQ0LDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgICByZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2VycjtcbiBcbiBcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcbiBcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4rICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcbisgKiBuZXRucyB0ZWFyZG93bi5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MTkuNzI3Nzc2ODI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDA2ODc5NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJDVSBDb25jdXJyZW5jeSBGaXg6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSBzZWVpbmcuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBtYWtlIGl0IGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlci4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIFRoZSBwYXRjaCBhZGRzIHRoZSBzdGFuZGFyZCBSQ1UgcHJpbWl0aXZlcyBsaWtlIGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdSgpYCB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbi5cblxuVGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiB1c2luZyBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSBiZWZvcmUgYXNzaWduaW5nIGl0IHRvIHRoZSBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaXMgYSBnb29kIHByYWN0aWNlLiBJdCBtaW5pbWl6ZXMgdGhlIHdpbmRvdyBvZiB2dWxuZXJhYmlsaXR5LiBMZXQgbWUganVzdCBjb25maXJtLi4uIHRoZSBwYXRjaCBkb2VzIHJlZmFjdG9yIHRoZSBhbGxvY2F0aW9uIGxvZ2ljOlxuYGBgY1xuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xuK1x0aWYgKCFpbmZvKVxuXHRcdHJldHVybiAtRU5PTUVNO1xuYGBgXG5cbkFoLCB0aGUgdXNhZ2Ugb2YgYGttYWxsb2Nfb2JqYCwgaXQncyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24sIGl0J3MgbGlrZWx5IGEgbWFjcm8gd2l0aGluIE9WUy4gVGhhdCdzIGZpbmUsIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIGlzIHN0aWxsIGludGFjdC5cblxuSSdtIGNoZWNraW5nIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFRoZSBsb2NhbCBgaW5mb2AgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCAqdGhlbiogaXRzIGZpZWxkcyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIGFzc2lnbm1lbnQuIFdlIGhhdmUgYSBzb2xpZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZTogYGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdGAsIGBpbmZvLVx1MDAzZWxpbWl0c2AsIGFuZCBgaW5mby1cdTAwM2VkYXRhYCBhcmUgYWxsIGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBhbGxvY2F0aW9uLiBJdCdzIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGFzIGJlZm9yZSwganVzdCByZWZhY3RvcmVkIGZvciB0aGUgUkNVIGNvbnRleHQuIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBSQ1Ugc3luY2hyb25pemF0aW9uLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGUgaXNzdWVzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nICh1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIHJhY2VzKS4gV2UncmUgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIG5ldyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBJdCdzIGp1c3Qgc29saWRpZnlpbmcgdGhlIFJDVSBwcm90ZWN0aW9uIG9mIGFuIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlLlxuXG5Pa2F5LCBsZXQncyByZXZpZXcgdGhlIEtNU0FOIHJ1bGVzLiBcIk5lZWRzS01TQU49ZmFsc2UgSUY6IHByaW1hcmlseSBmaXhlcyBvdXQtb2YtYm91bmRzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlwiIFRoYXQgZml0cyBwZXJmZWN0bHkuIFwiQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuXCIgWWVwLiBcIlRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cIiBOb3BlLlxuXG5UaGUgcGF0Y2ggKmlzKiBhIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBidWcgKG1pc3NpbmcgUkNVIHByb3RlY3Rpb24pIG9uIGBjdF9saW1pdF9pbmZvYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gVGhlIGNoYW5nZXMgYXJlIGFsbCB0byBwcm90ZWN0IGFnYWluc3QgS0FTQU4gZGV0ZWN0YWJsZSBlcnJvcnMuIEknbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGlzIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MSwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTU6MzMuNzM0NjU4OTI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgcHJvcGVyIFJDVSBzeW5jaHJvbml6YXRpb24gKHJjdV9kZXJlZmVyZW5jZSwgcmN1X2Fzc2lnbl9wb2ludGVyLCBzeW5jaHJvbml6ZV9yY3UpIGZvciB0aGUgYGN0X2xpbWl0X2luZm9gIHBvaW50ZXIgaW4gT3BlbiB2U3dpdGNoIGNvbm50cmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgY2hhbmdlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAodGhlIHNhbWUgZmllbGRzIGFyZSBpbml0aWFsaXplZCBhcyBiZWZvcmUpLiBUaGUgcHJpbWFyeSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IGFkZGluZyBwcm9wZXIgUkNVIHN5bmNocm9uaXphdGlvbiAocmN1X2RlcmVmZXJlbmNlLCByY3VfYXNzaWduX3BvaW50ZXIsIHN5bmNocm9uaXplX3JjdSkgZm9yIHRoZSBgY3RfbGltaXRfaW5mb2AgcG9pbnRlciBpbiBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBjaGFuZ2UgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5ICh0aGUgc2FtZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGFzIGJlZm9yZSkuIFRoZSBwcmltYXJ5IHJpc2tzIG1pdGlnYXRlZCBieSB0aGlzIHBhdGNoIGFyZSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6l9bp[1] Phase: Succeeded StartedAt: 2026-08-11 10:15:44 +0000 UTC FinishedAt: 2026-08-11 10:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 10:15:44 +0000 UTC FinishedAt: 2026-08-11 10:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2] Phase: Succeeded StartedAt: 2026-08-11 10:15:44 +0000 UTC FinishedAt: 2026-08-11 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:15:44 +0000 UTC FinishedAt: 2026-08-11 13:59:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:15:44 +0000 UTC FinishedAt: 2026-08-11 10:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:15:44 +0000 UTC FinishedAt: 2026-08-11 10:15:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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-workflow6l9bp/series-workflow6l9bp-convert-artifact-26599335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:15:54 +0000 UTC FinishedAt: 2026-08-11 10:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:15:54 +0000 UTC FinishedAt: 2026-08-11 10:32:44 +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:*4b054d69-a4bb-4d0e-98f9-894cc34d70d5,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-workflow6l9bp/series-workflow6l9bp-convert-artifact-26599335/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": "ccfaa8bd-f2be-4b5c-959a-aa6666f684a6", "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-workflow6l9bp/series-workflow6l9bp-build-action-3498979133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:15:54 +0000 UTC FinishedAt: 2026-08-11 10:32:34 +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:*4b054d69-a4bb-4d0e-98f9-894cc34d70d5,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-workflow6l9bp/series-workflow6l9bp-convert-artifact-26599335/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": "ccfaa8bd-f2be-4b5c-959a-aa6666f684a6", "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-workflow6l9bp/series-workflow6l9bp-build-action-3498979133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:32:44 +0000 UTC FinishedAt: 2026-08-11 10:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:32:44 +0000 UTC FinishedAt: 2026-08-11 10:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:32:44 +0000 UTC FinishedAt: 2026-08-11 10:32:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:32:44 +0000 UTC FinishedAt: 2026-08-11 10:32:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-workflow6l9bp/series-workflow6l9bp-convert-artifact-726599766/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:32:54 +0000 UTC FinishedAt: 2026-08-11 10:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:32:54 +0000 UTC FinishedAt: 2026-08-11 10:35:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ccfaa8bd-f2be-4b5c-959a-aa6666f684a6,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-workflow6l9bp/series-workflow6l9bp-build-action-3498979133/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-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:35:16 +0000 UTC FinishedAt: 2026-08-11 10:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:35:16 +0000 UTC FinishedAt: 2026-08-11 10:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:35:16 +0000 UTC FinishedAt: 2026-08-11 10:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:35:16 +0000 UTC FinishedAt: 2026-08-11 10:51:42 +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:*4b054d69-a4bb-4d0e-98f9-894cc34d70d5,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-workflow6l9bp/series-workflow6l9bp-convert-artifact-726599766/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": "52e4df72-f5a3-4c6d-a069-b0751f713b34", "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-workflow6l9bp/series-workflow6l9bp-build-action-1543745114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:35:16 +0000 UTC FinishedAt: 2026-08-11 10:51:32 +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:*4b054d69-a4bb-4d0e-98f9-894cc34d70d5,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-workflow6l9bp/series-workflow6l9bp-convert-artifact-726599766/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": "52e4df72-f5a3-4c6d-a069-b0751f713b34", "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-workflow6l9bp/series-workflow6l9bp-build-action-1543745114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:51:42 +0000 UTC FinishedAt: 2026-08-11 10:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:51:42 +0000 UTC FinishedAt: 2026-08-11 10:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:51:42 +0000 UTC FinishedAt: 2026-08-11 10:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:51:42 +0000 UTC FinishedAt: 2026-08-11 10:53:53 +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:*52e4df72-f5a3-4c6d-a069-b0751f713b34,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-workflow6l9bp/series-workflow6l9bp-build-action-1543745114/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-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:03 +0000 UTC FinishedAt: 2026-08-11 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:03 +0000 UTC FinishedAt: 2026-08-11 13:59:11 +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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"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:*ccfaa8bd-f2be-4b5c-959a-aa6666f684a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*52e4df72-f5a3-4c6d-a069-b0751f713b34,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-workflow6l9bp/series-workflow6l9bp-build-action-3498979133/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-workflow6l9bp/series-workflow6l9bp-build-action-1543745114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:03 +0000 UTC FinishedAt: 2026-08-11 10:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:03 +0000 UTC FinishedAt: 2026-08-11 10:54:08 +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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"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-workflow6l9bp/series-workflow6l9bp-convert-artifact-3097921275/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:03 +0000 UTC FinishedAt: 2026-08-11 10:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:03 +0000 UTC FinishedAt: 2026-08-11 10:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:03 +0000 UTC FinishedAt: 2026-08-11 10:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:13 +0000 UTC FinishedAt: 2026-08-11 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l9bp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"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_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f1b3416ceaf7ca4cb5cbd986ee8fe3ffaeda2d48","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"39a107c6-a4a9-41fd-b199-17f0428dd2b7","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-11 10:54:13 +0000 UTC FinishedAt: 2026-08-11 13:59:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ccfaa8bd-f2be-4b5c-959a-aa6666f684a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*52e4df72-f5a3-4c6d-a069-b0751f713b34,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-workflow6l9bp/series-workflow6l9bp-build-action-3498979133/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-workflow6l9bp/series-workflow6l9bp-build-action-1543745114/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-workflow6l9bp/series-workflow6l9bp-convert-artifact-3097921275/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,}