Name: series-workflow9bpkc Phase: Succeeded StartedAt: 2026-09-02 10:51:58 +0000 UTC FinishedAt: 2026-09-02 14:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[0] Phase: Succeeded StartedAt: 2026-09-02 10:51:58 +0000 UTC FinishedAt: 2026-09-02 11:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 10:51:58 +0000 UTC FinishedAt: 2026-09-02 11:13:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "6853fd39-7d06-4e57-bea7-c803137ce3c3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "max_lru_gen_memcg", "try_to_free_pages", "try_to_free_mem_cgroup_pages", "shrink_all_memory" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttYXhfbHJ1X2dlbl9tZW1jZyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludm9sdmUgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcyAoc3RydWN0IGZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkLCBhbmQgZ2VuZXJhdGlvbiBjb3VudGVycy9mbGFncykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgZ2VuX2luY3JlYXNlZCwgZGVsdGEsIGJhdGNoX2VuZCwgYW5kIHRoZSBtb3ZhYmxlIGxpc3QgaGVhZCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzeXNjYWxsL2lvY3RsL3NvY2tldCBib3VuZGFyaWVzLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxpbmtlZCBsaXN0IGNvcnJ1cHRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFjY291bnRpbmcgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgQ09ORklHX0RFQlVHX0xJU1QsIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGFnaW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMuIFNwZWNpZmljYWxseSwgaW5jX21pbl9zZXEgYW5kIGZvbGlvX2luY19nZW4gYXJlIHVwZGF0ZWQgdG8gYmF0Y2ggbGlzdCBzcGxpY2luZyAodmlhIGZsdXNoX2xydV9iYXRjaCkgYW5kIGdlbmVyYXRpb24gYWNjb3VudGluZywgY2hhbmdpbmcgaG93IGZvbGlvcyBhcmUgbW92ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIExSVSBhZ2luZyBhbmQgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJkNjI4YTEwYjk4ZjVmODRmYjI0MTFlZjM2ZWJiOWJjZGRmYmM3ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDExOjA5OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xODIsMTcgJiM0MzsxODIsMzcgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gfTtcbiBcbiAjaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4tXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICgoX2ZvbGlvKS1cdTAwM2VscnUucHJldiAhPSBfYmFzZSkge1x0XHRcdFxcXG4tXHRcdFx0c3RydWN0IGZvbGlvICpwcmV2O1x0XHRcdFx0XFxcbi1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdHByZXYgPSBscnVfdG9fZm9saW8oXHUwMDI2KF9mb2xpby1cdTAwM2VscnUpKTtcdFx0XFxcbi1cdFx0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VfZmllbGQpO1x0XHRcdFxcXG4tXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4tXHR9IHdoaWxlICgwKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvLVx1MDAzZWxydS5wcmV2ICE9IGJhc2UpIHtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqcHJldjtcbiYjNDM7XG4mIzQzO1x0XHRwcmV2ID0gbHJ1X3RvX2ZvbGlvKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4mIzQzO1x0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvLVx1MDAzZWxydS5uZXh0ICE9IGJhc2UpIHtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRuZXh0ID0gbGlzdF9lbnRyeShmb2xpby1cdTAwM2VscnUubmV4dCwgc3RydWN0IGZvbGlvLCBscnUpO1xuJiM0MztcdFx0cHJlZmV0Y2h3KFx1MDAyNm5leHQtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7fVxuICNlbHNlXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbiYjNDM7e1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gLypcbkBAIC0xNjk1LDcgJiM0MzsxNzE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oc3JjKTtcbi1cdFx0cHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKGZvbGlvLCBzcmMsIGZsYWdzKTtcbiYjNDM7XHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjKTtcbiBcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzO1xuQEAgLTMyOTUsMjEgJiM0MzszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiB9XG4gXG4tLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHRpbnQgbmV3X2dlbjtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuIFxuIFx0ZG8ge1xuIFx0XHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKVxuJiM0MztcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbiYjNDM7XHRcdFx0aWYgKGluY3JlYXNlZClcbiYjNDM7XHRcdFx0XHQqaW5jcmVhc2VkID0gZmFsc2U7XG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCAmIzQzOzMzMzcsMjIgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4mIzQzO1x0aWYgKGluY3JlYXNlZClcbiYjNDM7XHRcdCppbmNyZWFzZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiBuZXdfZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xuJiM0MztzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4mIzQzO1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4mIzQzO1x0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbiYjNDM7XHRib29sIGdlbl9pbmNyZWFzZWQ7XG4gXG4mIzQzO1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4mIzQzO1x0aWYgKGdlbl9pbmNyZWFzZWQpXG4mIzQzO1x0XHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuIFx0cmV0dXJuIG5ld19nZW47XG4gfVxuIFxuQEAgLTM4OTcsNiAmIzQzOzM5MzEsMTkgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRMSVNUX0hFQUQobW92YWJsZSk7XG4mIzQzO1xuJiM0MztcdGlmICghKmJhdGNoX2VuZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNm1vdmFibGUsIGRzdCk7XG4mIzQzO1x0KmJhdGNoX2VuZCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0aW50IHpvbmU7XG5AQCAtMzkwNCw2ICYjNDM7Mzk1MSw3IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4mIzQzO1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuIFx0LyogRm9yIGZpbGUgdHlwZSwgc2tpcCB0aGUgY2hlY2sgaWYgc3dhcHBpbmVzcyBpcyBhbm9uIG9ubHkgKi9cbiBcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpXG5AQCAtMzkxMywzNSAmIzQzOzM5NjEsNjMgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4gXHRpZiAoIXR5cGUgXHUwMDI2XHUwMDI2ICFzd2FwcGluZXNzKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIG9sZF9nZW4pICE9XG4mIzQzO1x0XHRcdGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgdGFyZ2V0X2dlbikpO1xuIFx0LyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovXG4gXHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0YXJnZXRfbGlzdCA9IFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV07XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcbiYjNDM7XHRcdGxvbmcgZGVsdGEgPSAwO1xuIFxuLVx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuJiM0MztcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGZvbGlvLCBscnUpO1xuJiM0MztcdFx0XHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHRcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xuIFx0XHRcdGJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuJiM0MztcdFx0XHRwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oZm9saW8sIGhlYWQpO1xuJiM0MztcdFx0XHRwb3MgPSBwb3MtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIGdlbl9pbmNyZWFzZWQgaXMgZmFsc2UsIHRoaXMgaXMgYSBwcm9tb3Rpb24uIFB1dCBmb2xpb3NcbiYjNDM7XHRcdFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxuJiM0MztcdFx0XHQgKiB0aGUgdGFpbCBvZiB0aGUgc2Vjb25kLW9sZGVzdCBnZW4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoZ2VuX2luY3JlYXNlZCkge1xuJiM0MztcdFx0XHRcdGRlbHRhICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRcdFx0XHRiYXRjaF9lbmQgPSBcdTAwMjZmb2xpby1cdTAwM2VscnU7XG4gXG4tXHRcdFx0LyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuLVx0XHRcdGlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7XG4tXHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbi1cdFx0XHRcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRcdFx0XHQvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4mIzQzO1x0XHRcdFx0aWYgKHJlZnMgJiM0Mzsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICYjNDM7IDEpIHtcbiYjNDM7XHRcdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuIFxuLVx0XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuLVx0XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICYjNDM7IGRlbHRhKTtcbiYjNDM7XHRcdFx0XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBucl9wYWdlcyk7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcbiYjNDM7XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcbiBcdFx0XHR9XG4tXG4gXHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiBcdFx0fVxuJiM0MztcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuJiM0MztcdFx0XHQgICBscnVnZW4tXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0gLSBkZWx0YSk7XG4mIzQzO1x0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSxcbiYjNDM7XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICYjNDM7IGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmVtYWluaW5nKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmQ2MjhhMTBiOThmNWY4NGZiMjQxMWVmMzZlYmI5YmNkZGZiYzdkZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTE6MDk6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODIsMTcgJiM0MzsxODIsMzcgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiB9OwogCiAjaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXCi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKChfZm9saW8pLSZndDtscnUucHJldiAhPSBfYmFzZSkgewkJCVwKLQkJCXN0cnVjdCBmb2xpbyAqcHJldjsJCQkJXAotCQkJCQkJCQkJXAotCQkJcHJldiA9IGxydV90b19mb2xpbygmYW1wOyhfZm9saW8tJmd0O2xydSkpOwkJXAotCQkJcHJlZmV0Y2h3KCZhbXA7cHJldi0mZ3Q7X2ZpZWxkKTsJCQlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqYmFzZSkKJiM0Mzt7CiYjNDM7CWlmIChmb2xpby0mZ3Q7bHJ1LnByZXYgIT0gYmFzZSkgewomIzQzOwkJc3RydWN0IGZvbGlvICpwcmV2OwomIzQzOwomIzQzOwkJcHJldiA9IGxydV90b19mb2xpbygmYW1wO2ZvbGlvLSZndDtscnUpOwomIzQzOwkJcHJlZmV0Y2h3KCZhbXA7cHJldi0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCiYjNDM7ewomIzQzOwlpZiAoZm9saW8tJmd0O2xydS5uZXh0ICE9IGJhc2UpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqbmV4dDsKJiM0MzsKJiM0MzsJCW5leHQgPSBsaXN0X2VudHJ5KGZvbGlvLSZndDtscnUubmV4dCwgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJcHJlZmV0Y2h3KCZhbXA7bmV4dC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQogI2Vsc2UKLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQomIzQzO3sKJiM0Mzt9CiAjZW5kaWYKIAogLyoKQEAgLTE2OTUsNyAmIzQzOzE3MTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJCWZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7Ci0JCXByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7CiYjNDM7CQlwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYyk7CiAKIAkJbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCXRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzOwpAQCAtMzI5NSwyMSAmIzQzOzMzMTUsMjEgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWEKIAlyZXR1cm4gKChvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiB9CiAKLS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7Ci0Jc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Ci0JaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CWludCBuZXdfZ2VuOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKIAogCWRvIHsKIAkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKJiM0MzsJCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pIHsKJiM0MzsJCQlpZiAoaW5jcmVhc2VkKQomIzQzOwkJCQkqaW5jcmVhc2VkID0gZmFsc2U7CiAJCQlyZXR1cm4gbmV3X2dlbjsKJiM0MzsJCX0KIAogCQluZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKIApAQCAtMzMxNyw4ICYjNDM7MzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKLQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwlpZiAoaW5jcmVhc2VkKQomIzQzOwkJKmluY3JlYXNlZCA9IHRydWU7CiYjNDM7CXJldHVybiBuZXdfZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwomIzQzO3N0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKJiM0MzsJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwlib29sIGdlbl9pbmNyZWFzZWQ7CiAKJiM0MzsJbmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgJmFtcDtnZW5faW5jcmVhc2VkKTsKJiM0MzsJaWYgKGdlbl9pbmNyZWFzZWQpCiYjNDM7CQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCXJldHVybiBuZXdfZ2VuOwogfQogCkBAIC0zODk3LDYgJiM0MzszOTMxLDE5IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZCkKIAkJa2ZyZWUod2Fsayk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCkKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChtb3ZhYmxlKTsKJiM0MzsKJiM0MzsJaWYgKCEqYmF0Y2hfZW5kKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsaXN0X2N1dF9wb3NpdGlvbigmYW1wO21vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpOwomIzQzOwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFtcDttb3ZhYmxlLCBkc3QpOwomIzQzOwkqYmF0Y2hfZW5kID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlpbnQgem9uZTsKQEAgLTM5MDQsNiAmIzQzOzM5NTEsNyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAJaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiYjNDM7CWludCB0YXJnZXRfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKIAogCS8qIEZvciBmaWxlIHR5cGUsIHNraXAgdGhlIGNoZWNrIGlmIHN3YXBwaW5lc3MgaXMgYW5vbiBvbmx5ICovCiAJaWYgKHR5cGUgJmFtcDsmYW1wOyAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpCkBAIC0zOTEzLDM1ICYjNDM7Mzk2MSw2MyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIAlpZiAoIXR5cGUgJmFtcDsmYW1wOyAhc3dhcHBpbmVzcykKIAkJZ290byBkb25lOwogCiYjNDM7CVZNX1dBUk5fT05fT05DRShnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpICE9IE1BWF9OUl9HRU5TKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT0KJiM0MzsJCQlscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIHRhcmdldF9nZW4pKTsKIAkvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi8KIAlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSAmYW1wO2xydWdlbi0mZ3Q7Zm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IGhlYWQtJmd0O25leHQ7CiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMOwomIzQzOwkJbG9uZyBkZWx0YSA9IDA7CiAKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJd2hpbGUgKHBvcyAhPSBoZWFkKSB7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiYjNDM7CQkJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJCWludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pOwogCQkJYm9vbCB3b3JraW5nc2V0ID0gZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCQlib29sIGdlbl9pbmNyZWFzZWQ7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7CiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pOwogCi0JCQluZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTsKLQkJCWxpc3RfbW92ZV90YWlsKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiYjNDM7CQkJcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkKTsKJiM0MzsJCQlwb3MgPSBwb3MtJmd0O25leHQ7CiYjNDM7CQkJbmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgJmFtcDtnZW5faW5jcmVhc2VkKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGdlbl9pbmNyZWFzZWQgaXMgZmFsc2UsIHRoaXMgaXMgYSBwcm9tb3Rpb24uIFB1dCBmb2xpb3MKJiM0MzsJCQkgKiBhdCB0aGUgaGVhZCBvZiB0aGUgcHJvbW90ZWQgZ2VuLiBPdGhlcndpc2UsIHB1dCB0aGVtIGF0CiYjNDM7CQkJICogdGhlIHRhaWwgb2YgdGhlIHNlY29uZC1vbGRlc3QgZ2VuLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChnZW5faW5jcmVhc2VkKSB7CiYjNDM7CQkJCWRlbHRhICYjNDM7PSBucl9wYWdlczsKJiM0MzsJCQkJYmF0Y2hfZW5kID0gJmFtcDtmb2xpby0mZ3Q7bHJ1OwogCi0JCQkvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovCi0JCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewotCQkJCWludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpOwotCQkJCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCQkJLyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqLwomIzQzOwkJCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewomIzQzOwkJCQkJaW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7CiAKLQkJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAotCQkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBkZWx0YSk7CiYjNDM7CQkJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAomIzQzOwkJCQkJCSAgIGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICYjNDM7IG5yX3BhZ2VzKTsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWZsdXNoX2xydV9iYXRjaChoZWFkLCAmYW1wO2JhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpOwomIzQzOwkJCQlsaXN0X21vdmUoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2xydWdlbi0mZ3Q7Zm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTsKIAkJCX0KLQogCQkJaWYgKCEtLXJlbWFpbmluZykKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJCWJyZWFrOwogCQl9CiYjNDM7CQlmbHVzaF9scnVfYmF0Y2goaGVhZCwgJmFtcDtiYXRjaF9lbmQsIHRhcmdldF9saXN0KTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSwKJiM0MzsJCQkgICBscnVnZW4tJmd0O25yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpOwomIzQzOwkJV1JJVEVfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdLAomIzQzOwkJCSAgIGxydWdlbi0mZ3Q7bnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0gJiM0MzsgZGVsdGEpOwomIzQzOwkJaWYgKCFyZW1haW5pbmcpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCX0KIGRvbmU6CiAJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZNU2NhbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWUgcmVmaW5lbWVudHMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBMUlUgcGFnZSBoYW5kbGluZywgd2hpY2ggaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIE1HTFJVLgoKRmlyc3QsIEkgc2VlIHByZWZldGNoaW5nIG1vZGlmaWNhdGlvbnMuIFRoZSBhZGRpdGlvbiBvZiBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYCBhbG9uZ3NpZGUgYHByZWZldGNod19wcmV2X2xydV9mb2xpb2Agc3VnZ2VzdHMgd2UgYXJlIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgcGFnZSB3YWxraW5nIHRocm91Z2ggdGhlIExSVSBsaXN0cywgcGVyaGFwcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGR1cmluZyBzY2FubmluZyBvciByZWNsYWltLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBwcmVmZXRjaGluZyBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBoZXJlLgoKTmV4dCwgYW5kIHByb2JhYmx5IHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQsIGFyZSB0aGUgTFJVIEdlbiBmdW5jdGlvbiBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gZnVuY3Rpb25zIGxpa2UgYF9fZm9saW9faW5jX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIGBmbHVzaF9scnVfYmF0Y2hgLiBUaGVzZSBhcmUgY29yZSB0byB0aGUgTXVsdGktR2VuIExSVSBsb2dpYywgaW5kaWNhdGluZyB0aGlzIHBhdGNoIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggZ2VuZXJhdGlvbmFsIExSVSBtYW5hZ2VtZW50LiBJIG5vdGljZSBvcHRpbWl6YXRpb25zIGluIGBpbmNfbWluX3NlcWAgcmVnYXJkaW5nIGhvdyBMUlUgYmF0Y2ggbW92ZXMgYXJlIGhhbmRsZWQgLSBtb3ZpbmcgdGhlbSB0byBhIGB0YXJnZXRfZ2VuYCBsaXN0LCB1cGRhdGluZyBgbnJfcGFnZXNgIGluIHRoZSBiYXRjaCwgYW5kIG1vdmluZyBwcm9tb3RlZCBmb2xpb3MgdG8gdGhlIGhlYWQuIFRoaXMgY291bGQgc2lnbmlmaWNhbnRseSByZWR1Y2Ugb3ZlcmhlYWQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjb3JyZWN0bHkgb3B0aW1pemluZyBob3cgcGFnZXMgdHJhbnNpdGlvbiBiZXR3ZWVuIGdlbmVyYXRpb25zIGlzIGNyaXRpY2FsIGZvciBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBvbiBzeXN0ZW1zIHdpdGggaGlnaCBtZW1vcnkgcHJlc3N1cmUuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGVyZSBleGFjdGx5IGFyZSB0aGVzZSBtb2RpZmljYXRpb25zIGxvY2F0ZWQgd2l0aGluIHRoZSBsYXJnZXIgYHZtc2Nhbi5jYCBjb2RlPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoYENPTkZJR18uLi5gKSBjb250cm9sIHRoaXMgY29kZSBwYXRoPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBhbmQgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGltcGFjdCB1bmRlciB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBjYW4gaGVscCBtZSB3aXRoIHRoZSBpbnZlc3RpZ2F0aW9uIG9mIGBtbS92bXNjYW4uY2AgYW5kIEtjb25maWcuIFRoYXQgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBpbi1kZXB0aCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG5tbS9LY29uZmlnOjE0MTU6XHRkZXBlbmRzIG9uIExSVV9HRU5cbm1tL0tjb25maWctMTQxNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLTE0MTgtXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyMC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjE0MjE6XHRkZXBlbmRzIG9uIExSVV9HRU5cbm1tL0tjb25maWctMTQyMi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE0MzA6XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xubW0vS2NvbmZpZy0xNDMxLSMgfVxuLS1cbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNTEtXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL2ZvbGlvLmMtMzUzLVxuLS1cbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzk1LVxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS9mb2xpby5jLTM5Ny1cbi0tXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTQwNi1cbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDgtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3NDUtXHRcdFx0XHQgKDFMIFx1MDAzY1x1MDAzYyBQR19kcm9wYmVoaW5kKSB8XG5tbS9odWdlX21lbW9yeS5jOjM3NDY6XHRcdFx0XHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzQ3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjI3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2NDMtXG5tbS9tZW1jb250cm9sLmM6NDY0NDojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00NjQ1LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjYzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxubW0vbWVtY29udHJvbC5jOjQ2NjQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1jb250cm9sLmMtNDY2NS1cbi0tXG5tbS9tZW1vcnkuYz02NzI4PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbi0tXG5tbS9tZW1vcnkuYy02NzgwLVxubW0vbWVtb3J5LmM6Njc4MTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbW9yeS5jLTY3ODItc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1vcnkuYz02Nzk3PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxuLS1cbm1tL21lbW9yeS5jLTY3OTktfVxubW0vbWVtb3J5LmM6NjgwMDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL21lbW9yeS5jLTY4MDEtXG4tLVxubW0vbW1faW5pdC5jPTExMj12b2lkIF9faW5pdCBtbWluaXRfdmVyaWZ5X3BhZ2VmbGFnc19sYXlvdXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMTI1LVx0XHRLQVNBTl9UQUdfV0lEVEgsXG5tbS9tbV9pbml0LmM6MTI2Olx0XHRMUlVfR0VOX1dJRFRILFxubW0vbW1faW5pdC5jLTEyNy1cdFx0TFJVX1JFRlNfV0lEVEgsXG4tLVxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODUyLVxubW0vdm1zY2FuLmM6ODUzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODU0LS8qXG4tLVxubW0vdm1zY2FuLmM9ODgyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy04ODUtfVxubW0vdm1zY2FuLmM6ODg2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODg3LVxuLS1cbm1tL3Ztc2Nhbi5jPTI3MDA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNzExLVxubW0vdm1zY2FuLmM6MjcxMjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI3MTMtXG5tbS92bXNjYW4uYz0yNzE0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjcxNTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jLTI3MTctI2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmMtMjcxOC0jZWxzZVxubW0vdm1zY2FuLmM6MjcxOTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNzIwLSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxuLS1cbm1tL3Ztc2Nhbi5jPTI3MjM9c3RhdGljIGJvb2wgc2hvdWxkX3dhbGtfbW11KHZvaWQpXG5tbS92bXNjYW4uYy0yNzI0LXtcbm1tL3Ztc2Nhbi5jOjI3MjU6XHRyZXR1cm4gYXJjaF9oYXNfaHdfcHRlX3lvdW5nKCkgXHUwMDI2XHUwMDI2IGdldF9jYXAoTFJVX0dFTl9NTV9XQUxLKTtcbm1tL3Ztc2Nhbi5jLTI3MjYtfVxuLS1cbm1tL3Ztc2Nhbi5jPTI3Mjg9c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxubW0vdm1zY2FuLmMtMjcyOS17XG5tbS92bXNjYW4uYzoyNzMwOlx0cmV0dXJuIGFyY2hfaGFzX2h3X25vbmxlYWZfcG1kX3lvdW5nKCkgXHUwMDI2XHUwMDI2IGdldF9jYXAoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTI3MzEtfVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NDEtXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XHRcdFx0XFxcbm1tL3Ztc2Nhbi5jOjI3NDI6XHRcdFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWluX3NlcVtMUlVfR0VOX0FOT05dKSxcdFxcXG5tbS92bXNjYW4uYzoyNzQzOlx0XHRSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbTFJVX0dFTl9GSUxFXSksXHRcXFxubW0vdm1zY2FuLmMtMjc0NC1cdH1cbi0tXG5tbS92bXNjYW4uYz0yOTAwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MTktXG5tbS92bXNjYW4uYzoyOTIwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MjEtXG4tLVxubW0vdm1zY2FuLmM9MzAyOT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDU3LVxubW0vdm1zY2FuLmM6MzA1ODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0zMDU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTMyODk9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzMwNy1cdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xubW0vdm1zY2FuLmM6MzMwODpcdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxubW0vdm1zY2FuLmMtMzMwOS1cdFx0XHRyZXR1cm4gLTE7XG5tbS92bXNjYW4uYy0zMzEwLVxubW0vdm1zY2FuLmM6MzMxMTpcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbm1tL3Ztc2Nhbi5jOjMzMTI6XHRcdG5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbm1tL3Ztc2Nhbi5jLTMzMTMtXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbm1tL3Ztc2Nhbi5jLTMzMTQtXG5tbS92bXNjYW4uYzozMzE1Olx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG5tbS92bXNjYW4uYy0zMzE2LX1cbi0tXG5tbS92bXNjYW4uYz0zMzE4PXN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4tLVxubW0vdm1zY2FuLmMtMzMyMi1cbm1tL3Ztc2Nhbi5jOjMzMjM6XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTMzMjQtXG5tbS92bXNjYW4uYy0zMzI1LVx0ZG8ge1xubW0vdm1zY2FuLmM6MzMyNjpcdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG5tbS92bXNjYW4uYy0zMzI3LVx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi0tXG5tbS92bXNjYW4uYy0zMzM1LVxubW0vdm1zY2FuLmM6MzMzNjpcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbm1tL3Ztc2Nhbi5jOjMzMzc6XHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xubW0vdm1zY2FuLmMtMzMzOC1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQwMjk9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDA2NS1cbm1tL3Ztc2Nhbi5jOjQwNjY6XHRcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFx1MDAzYyBzZXEpXG5tbS92bXNjYW4uYzo0MDY3Olx0XHRcdG1pbl9zZXFbTFJVX0dFTl9BTk9OXSA9IHNlcTtcbm1tL3Ztc2Nhbi5jOjQwNjg6XHRcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcdTAwM2Ugc2VxIFx1MDAyNlx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNjIHNlcSlcbm1tL3Ztc2Nhbi5jOjQwNjk6XHRcdFx0bWluX3NlcVtMUlVfR0VOX0ZJTEVdID0gc2VxO1xubW0vdm1zY2FuLmMtNDA3MC1cdH1cbi0tXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxMTMtXHQgKiB0aGUgY3VycmVudCBtYXhfc2VxIG5lZWQgdG8gYmUgY292ZXJlZCwgc2luY2UgbWF4X3NlcSYjNDM7MSBjYW4gb3ZlcmxhcFxubW0vdm1zY2FuLmM6NDExNDpcdCAqIHdpdGggbWluX3NlcVtMUlVfR0VOX0FOT05dIGlmIHN3YXBwaW5nIGlzIGNvbnN0cmFpbmVkLiBBbmQgaWYgdGhleSBkb1xubW0vdm1zY2FuLmMtNDExNS1cdCAqIG92ZXJsYXAsIGNvbGQvaG90IGludmVyc2lvbiBoYXBwZW5zLlxuLS1cbm1tL3Ztc2Nhbi5jPTQ4OTg9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDkwMi1cdGlmIChzd2FwcGluZXNzIFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgJiM0MzsgMSlcbm1tL3Ztc2Nhbi5jOjQ5MDM6XHRcdHJldHVybiBMUlVfR0VOX0ZJTEU7XG5tbS92bXNjYW4uYy00OTA0LVxubW0vdm1zY2FuLmMtNDkwNS1cdGlmIChzd2FwcGluZXNzIFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXG5tbS92bXNjYW4uYzo0OTA2Olx0XHRyZXR1cm4gTFJVX0dFTl9BTk9OO1xubW0vdm1zY2FuLmMtNDkwNy1cdC8qXG4tLVxubW0vdm1zY2FuLmMtNDkxMC1cdCAqL1xubW0vdm1zY2FuLmM6NDkxMTpcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xubW0vdm1zY2FuLmM6NDkxMjpcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG5tbS92bXNjYW4uYy00OTEzLVxuLS1cbm1tL3Ztc2Nhbi5jPTU0MzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NTAtXHRpZiAoZW5hYmxlZClcbm1tL3Ztc2Nhbi5jOjU0NTE6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xubW0vdm1zY2FuLmMtNTQ1Mi1cdGVsc2Vcbm1tL3Ztc2Nhbi5jOjU0NTM6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcbm1tL3Ztc2Nhbi5jLTU0NTQtXG4tLVxubW0vdm1zY2FuLmM9NTUxNT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL3Ztc2Nhbi5jLTU1MTgtXG5tbS92bXNjYW4uYzo1NTE5Olx0aWYgKGdldF9jYXAoTFJVX0dFTl9DT1JFKSlcbm1tL3Ztc2Nhbi5jOjU1MjA6XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fQ09SRSk7XG5tbS92bXNjYW4uYy01NTIxLVxubW0vdm1zY2FuLmMtNTUyMi1cdGlmIChzaG91bGRfd2Fsa19tbXUoKSlcbm1tL3Ztc2Nhbi5jOjU1MjM6XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fTU1fV0FMSyk7XG5tbS92bXNjYW4uYy01NTI0LVxubW0vdm1zY2FuLmMtNTUyNS1cdGlmIChzaG91bGRfY2xlYXJfcG1kX3lvdW5nKCkpXG5tbS92bXNjYW4uYzo1NTI2Olx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xubW0vdm1zY2FuLmMtNTUyNy1cbi0tXG5tbS92bXNjYW4uYz01NTMyPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NTQ0LVxubW0vdm1zY2FuLmM6NTU0NTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSYjNDM7JiM0MzspIHtcbm1tL3Ztc2Nhbi5jLTU1NDYtXHRcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXHUwMDI2IEJJVChpKTtcbm1tL3Ztc2Nhbi5jLTU1NDctXG5tbS92bXNjYW4uYzo1NTQ4Olx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG5tbS92bXNjYW4uYy01NTQ5LVx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTYwMDk9c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXG4tLVxubW0vdm1zY2FuLmMtNjAxMS1cdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyAmIzQzOyAxIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xubW0vdm1zY2FuLmM6NjAxMjpcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXHUwMDNjPSBNQVhfTlJfR0VOUyk7XG5tbS92bXNjYW4uYy02MDEzLVxuLS1cbm1tL3Ztc2Nhbi5jPTYwMjQ9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNjAyNS1cbm1tL3Ztc2Nhbi5jOjYwMjY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MDI3LVxuLS1cbm1tL3Ztc2Nhbi5jPTYwMzg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDQyLVxubW0vdm1zY2FuLmM6NjA0MzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTYwNDQtXG4tLVxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTIzMi1cbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS93b3JraW5nc2V0LmMtMjM0LVxubW0vd29ya2luZ3NldC5jPTIzNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yNTAtXG5tbS93b3JraW5nc2V0LmM6MjUxOlx0QlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggJiM0MzsgTFJVX1JFRlNfV0lEVEggXHUwMDNlXG5tbS93b3JraW5nc2V0LmMtMjUyLVx0XHQgICAgIEJJVFNfUEVSX0xPTkcgLSBtYXgoRVZJQ1RJT05fU0hJRlQsIEVWSUNUSU9OX1NISUZUX0FOT04pKTtcbi0tXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTMzNi1cbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzM4LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzUzLVxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBMUlVfR0VOIGFuZCB2bXNjYW4uYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgb2YgYExSVV9HRU5gIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBtb3JlIGRlZXBseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1tL0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBMUlVfR0VOYCBkZWZpbml0aW9uLiBJIHdhbnQgdG8gc2VlIHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW50YW5nbGVkIHdpdGggaXQg4oCTIHdoYXQgcHJlcmVxdWlzaXRlcyBleGlzdCwgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBpdHMgcGxhY2UgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4KCkZyb20gdGhlcmUsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLiBJIGhhdmUgYSByb3VnaCBhcmVhIGluIG1pbmQsIHJvdWdobHkgbGluZXMgMjcwMC00MDAwLiBJdCYjMzk7cyBhIGJyb2FkIHJhbmdlLCBJIGtub3csIGJ1dCBpdCBzaG91bGQgY29udGFpbiBzb21lIG9mIHRoZSBjb3JlIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEnigJltIGxvb2tpbmcgZm9yIHRoZSBwbGFjZXMgd2hlcmUgYGluY19taW5fc2VxYCBvciBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbiBjYWxscyBhcmUgYmVpbmcgbWFkZS4gVHJhY2luZyB0aGVzZSBjYWxscyBzaG91bGQgZXhwb3NlIGhvdyB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGJlaW5nIGluY3JlbWVudGVkIGFuZCBob3cgaXTigJlzIGJlaW5nIHVzZWQgdG8gYWZmZWN0IHBhZ2UgcmVjbGFpbS4gVGhpcyB3aWxsIHJldmVhbCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBnZW5lcmF0aW9uYWwgTFJVIGltcGxlbWVudGF0aW9uIGFuZCB3aGVyZSBpdCYjMzk7cyB0cnVseSBtYWtpbmcgYW4gaW1wYWN0IG9uIHBhZ2Ugc2Nhbm5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDE6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDI6XHRcbjE0MDM6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDI0Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDI1Olx0XG4xNDI2Olx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyOTpcdFx0ZGVmX2Jvb2wgeVxuMTQzMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MzE6XHQjIH1cbjE0MzI6XHRcbjE0MzM6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzQ6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzNTpcdFxuMTQzNjpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0Mzc6XHRcdGRlZl9ib29sIHlcbjE0Mzg6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTXVsdGktR2VuIExSVSBDb25maWd1cmF0aW9uIGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbXVsdGktZ2VuIExSVSBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHN3aXRjaC4gSWYgdGhhdCYjMzk7cyBlbmFibGVkLCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgc2VlbXMgdG8gYmUgc2V0dGluZyB1cCB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5IHJpZ2h0IG91dCBvZiB0aGUgZ2F0ZSwgbm8gbWFudWFsIHN5c2ZzIGZpZGRsaW5nIG5lZWRlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHNpbXBsaWZpZXMgdGhpbmdzLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgYGluY19taW5fc2VxYCBhbmQgb3RoZXIgTUdMUlUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGV5IGRlZmluZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSBhcmUgdGhleSBiZWluZyAqY2FsbGVkKj8gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgaGllcmFyY2h5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cuIFNvLCBJJiMzOTtsbCBzdGFydCB3aXRoIGBtbS92bXNjYW4uY2AgYmVjYXVzZSBpdCYjMzk7cyBhIGdvb2QgYmV0IGZvciBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbHMuIEnigJlsbCBsb2NhdGUgYGluY19taW5fc2VxYCB3aXRoaW4gdGhhdCBmaWxlIGFuZCB0aGVuIG1ldGljdWxvdXNseSB3b3JrIG15IHdheSB1cCB0aGUgY2FsbCBzdGFjay4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGdlbi1MUlUgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGFuZCB3aGF0IHRoZSBzeXN0ZW0gaXMgcmVseWluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmNfbWluX3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM5MzQ9c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM5NDYtXG5tbS92bXNjYW4uYzozOTQ3OnN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtMzk0OC17XG4tLVxubW0vdm1zY2FuLmMtNDAyOC1cbm1tL3Ztc2Nhbi5jOjQwMjk6c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy00MDMwLXtcbi0tXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxMDItXG5tbS92bXNjYW4uYzo0MTAzOlx0XHRpZiAoaW5jX21pbl9zZXEobHJ1dmVjLCB0eXBlLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTQxMDQtXHRcdFx0Y29udGludWU7XG4tLVxubW0vdm1zY2FuLmM9NDk1MT1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00OTcwLVx0LyogSW4gY2FzZSBmb2xpbyBkZWxldGlvbiBsZWZ0IGVtcHR5IG9sZCBnZW5zLCBmbHVzaCB0aGVtICovXG5tbS92bXNjYW4uYzo0OTcxOlx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy00OTcyLVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NzgtXHRpZiAoc2Nhbm5lZClcbm1tL3Ztc2Nhbi5jOjQ5Nzk6XHRcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNDk4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgaGllcmFyY2h5IHdpdGhpbiB0aGUgVk0gc2Nhbm5pbmcgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzZXF1ZW5jZSBudW1iZXJzIGFyZSBpbmNyZW1lbnRlZC4gSSBzZWUgdGhhdCBgaW5jX21pbl9zZXFgIGlzIGNhbGxlZCBmcm9tIGBpbmNfbWF4X3NlcWAgYW5kIGB0cnlfdG9faW5jX21pbl9zZXFgLCBib3RoIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiAgVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgKmVsc2UqIGlzIHRyaWdnZXJpbmcgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUgYnJvYWRlciBlbnRyeSBwb2ludHMgaW50byB0aGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIGFyZSBpbml0aWF0ZWQuCgpJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIGJyb2FkZW4gbXkgc2VhcmNoLiBJIHdpbGwgaW52ZXN0aWdhdGUgY2FsbGVycyBvZiBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAg4oCTIG9yIGFueSBvdGhlciBvYnZpb3VzIGVudHJ5IHBvaW50cyBpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIOKAkyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhvc2Ugc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMuIEJ5IHRyYWNpbmcgdGhvc2UgY2FsbHMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSByZWNsYWltIHByb2Nlc3MsIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01Mjg0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMDQtXG5tbS92bXNjYW4uYzo1MzA1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzA2LXtcbi0tXG5tbS92bXNjYW4uYz02MDMzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzctXG5tbS92bXNjYW4uYzo2MDM4OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDM5LXtcbi0tXG5tbS92bXNjYW4uYz02MzE1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzMjItXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MzIzOlx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MzI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBNR0xSVSBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYHNocmlua19ub2RlYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgcGFnZSByZWNsYWltLCBzcGVjaWZpY2FsbHkgd2hlbiBrc3dhcGQgb3IgZGlyZWN0IHJlY2xhaW0gYXJlIHJ1bm5pbmcuIFJpZ2h0LCBnb3QgaXQuIE15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgYXJlYXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXR0YWNrIHZlY3RvcnMgdG8gbG9vayBhdC4gQXJlIHRoZXJlIGFueSBleHBvcnRlZCBzeW1ib2xzLCBzeXNmcyBlbnRyeXBvaW50cywgb3IgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgYXJlbiYjMzk7dCBjb25zaWRlcmVkICYjMzQ7aG90IHBhdGhzJiMzNDsgdGhhdCBtaWdodCBiZSByaXBlIGZvciBmdXp6aW5nPyBUaG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLgoKTmV4dCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBkZWJ1Z2ZzLCBzeXNmcywgb3IgcHJvY2ZzIGludGVyZmFjZXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gTUdMUlUgb3IgTFJVIGdlbmVyYXRpb24gaW4gZ2VuZXJhbC4gVGhvc2UgdHlwZXMgb2YgaW50ZXJmYWNlcyBhcmUgb2Z0ZW4gb3Zlcmxvb2tlZCBhbmQgY2FuIGV4cG9zZSBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIGZvciB0aGUgdGVybSBgbHJ1X2dlbmAgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL3Ztc2Nhbi5jPTg0Nz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTg1OS0gKi9cbm1tL3Ztc2Nhbi5jOjg2MDpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTg4MS0jZWxzZVxubW0vdm1zY2FuLmM6ODgyOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg4My17XG4tLVxubW0vdm1zY2FuLmM9ODg4PXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTkxMi1cbm1tL3Ztc2Nhbi5jOjkxMzpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTkxNC1cdFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXG4tLVxubW0vdm1zY2FuLmMtOTE2LVxubW0vdm1zY2FuLmM6OTE3Olx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbm1tL3Ztc2Nhbi5jLTkxOC1cdH1cbi0tXG5tbS92bXNjYW4uYz0yMzAwPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzMDYtXG5tbS92bXNjYW4uYzoyMzA3Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbm1tL3Ztc2Nhbi5jLTIzMDgtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz0yNzE0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmMtMjcxNS0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jOjI3MTc6I2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmMtMjcxOC0jZWxzZVxubW0vdm1zY2FuLmM6MjcxOTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYzoyNzIwOiNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmMtMjcyMS0jZW5kaWZcbi0tXG5tbS92bXNjYW4uYz0yODA4PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgzNy0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4Mzg6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgzOS0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTI4NTU9c3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAqa2V5KVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NjQtXG5tbS92bXNjYW4uYzoyODY1OnN0YXRpYyBib29sIHRlc3RfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODY2LVx0XHRcdCAgICAgIHZvaWQgKml0ZW0pXG4tLVxubW0vdm1zY2FuLmMtMjg4MC1cbm1tL3Ztc2Nhbi5jOjI4ODE6c3RhdGljIHZvaWQgdXBkYXRlX2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtMjg4Mi1cdFx0XHRcdHZvaWQgKml0ZW0pXG4tLVxubW0vdm1zY2FuLmMtMjg5OS1cbm1tL3Ztc2Nhbi5jOjI5MDA6c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG5tbS92bXNjYW4uYy0yOTAxLXtcbi0tXG5tbS92bXNjYW4uYy0yOTIxLVxubW0vdm1zY2FuLmM6MjkyMjpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMjkyMy17XG5tbS92bXNjYW4uYzoyOTI0Olx0c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgbW1fbGlzdCA9IHtcbm1tL3Ztc2Nhbi5jLTI5MjUtXHRcdC5maWZvID0gTElTVF9IRUFEX0lOSVQobW1fbGlzdC5maWZvKSxcbi0tXG5tbS92bXNjYW4uYy0yOTM3LVxubW0vdm1zY2FuLmM6MjkzODpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKmdldF9tbV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0yOTM5LXtcbi0tXG5tbS92bXNjYW4uYy0yOTQyLVxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTI5NDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NDctXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjI5NDg6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk0OS1cbi0tXG5tbS92bXNjYW4uYy0yOTYxLVxubW0vdm1zY2FuLmM6Mjk2Mjp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk2My17XG4tLVxubW0vdm1zY2FuLmMtMjk2NS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vdm1zY2FuLmM6Mjk2NjpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYy0yOTY3LVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NzYtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5tbS92bXNjYW4uYzoyOTc3Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTI5NzgtXG4tLVxubW0vdm1zY2FuLmMtMjk4OC1cbm1tL3Ztc2Nhbi5jOjI5ODk6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5OTAte1xubW0vdm1zY2FuLmMtMjk5MS1cdGludCBuaWQ7XG5tbS92bXNjYW4uYzoyOTkyOlx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdDtcbm1tL3Ztc2Nhbi5jLTI5OTMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMDYtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5tbS92bXNjYW4uYzozMDA3Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMwMDgtXG4tLVxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMzAzMC17XG4tLVxubW0vdm1zY2FuLmMtMzA1Mi1cbm1tL3Ztc2Nhbi5jOjMwNTM6XHRscnVfZ2VuX2RlbF9tbShtbSk7XG5tbS92bXNjYW4uYzozMDU0Olx0bHJ1X2dlbl9hZGRfbW0obW0pO1xubW0vdm1zY2FuLmMtMzA1NS19XG4tLVxubW0vdm1zY2FuLmMtMzA1OS1cbm1tL3Ztc2Nhbi5jOjMwNjA6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTMwNjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjQtXG5tbS92bXNjYW4uYzozMDY1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTMwNjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjktXG5tbS92bXNjYW4uYzozMDcwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMzA3MS17XG4tLVxubW0vdm1zY2FuLmMtMzA3Ni1cbm1tL3Ztc2Nhbi5jOjMwNzc6c3RhdGljIHZvaWQgcmVzZXRfbW1fc3RhdHMoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaywgYm9vbCBsYXN0KVxubW0vdm1zY2FuLmMtMzA3OC17XG4tLVxubW0vdm1zY2FuLmMtMzA4MS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXHUwMDNlbHJ1dmVjO1xubW0vdm1zY2FuLmM6MzA4MjpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzA4My1cbi0tXG5tbS92bXNjYW4uYy0zMTAxLVxubW0vdm1zY2FuLmM6MzEwMjpzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Qoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IG1tX3N0cnVjdCAqKml0ZXIpXG5tbS92bXNjYW4uYy0zMTAzLXtcbi0tXG5tbS92bXNjYW4uYy0zMTA4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzozMTA5Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjMxMTA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMxMTEtXG4tLVxubW0vdm1zY2FuLmM9MzE2Nj1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMzE2OS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzE3MDpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYzozMTcxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMTcyLVxuLS1cbm1tL3Ztc2Nhbi5jPTMyMTg9c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tLVxubW0vdm1zY2FuLmMtMzIyMS1cdGludCBpO1xubW0vdm1zY2FuLmM6MzIyMjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzIyMy1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyMzc9c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXG4tLVxubW0vdm1zY2FuLmMtMzIzOS1cdGludCBoaXN0LCB0aWVyO1xubW0vdm1zY2FuLmM6MzI0MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzI0MS1cdGJvb2wgY2xlYXIgPSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyBcdTAwM2UgMTtcbi0tXG5tbS92bXNjYW4uYz0zMjg5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzMDYtXHRkbyB7XG5tbS92bXNjYW4uYzozMzA3Olx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG5tbS92bXNjYW4uYy0zMzA4LVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tLVxubW0vdm1zY2FuLmM9MzM0Nj1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNDgtXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjMzNDk6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jOjMzNTA6XHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmMtMzM1MS1cdGJvb2wgZ2VuX2luY3JlYXNlZDtcbi0tXG5tbS92bXNjYW4uYy0zMzU0LVx0aWYgKGdlbl9pbmNyZWFzZWQpXG5tbS92bXNjYW4uYzozMzU1Olx0XHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xubW0vdm1zY2FuLmMtMzM1Ni1cdHJldHVybiBuZXdfZ2VuO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNTgtXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0zMzYwLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbi0tXG5tbS92bXNjYW4uYy0zMzc0LVxubW0vdm1zY2FuLmM6MzM3NTpzdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMzc2LXtcbi0tXG5tbS92bXNjYW4uYy0zMzc4LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzM3OTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzM4MC1cbi0tXG5tbS92bXNjYW4uYy0zMzkzLVxubW0vdm1zY2FuLmM6MzM5NDpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSlcbm1tL3Ztc2Nhbi5jLTMzOTUtXHRcdFx0bHJ1ICYjNDM7PSBMUlVfQUNUSVZFO1xuLS1cbm1tL3Ztc2Nhbi5jPTM0MDI9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM0MDUtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXHUwMDNldm1hO1xubW0vdm1zY2FuLmM6MzQwNjpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYy0zNDA3LVxuLS1cbm1tL3Ztc2Nhbi5jPTM1NDA9c3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbi0tXG5tbS92bXNjYW4uYy0zNTQ3LVxubW0vdm1zY2FuLmM6MzU0ODpzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM1NDktXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1NjQtXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xubW0vdm1zY2FuLmM6MzU2NTpcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xubW0vdm1zY2FuLmMtMzU2Ni1cdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTM1NzI9c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzU4Mi1cdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG5tbS92bXNjYW4uYzozNTgzOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM1ODQtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM1ODYtXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozNTg3Olx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG5tbS92bXNjYW4uYy0zNTg4LVx0dW5zaWduZWQgaW50IG5yO1xuLS1cbm1tL3Ztc2Nhbi5jPTM2NjM9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1zY2FuLmMtMzY3MC1cdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG5tbS92bXNjYW4uYzozNjcxOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM2NzItXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM2NzQtXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozNjc1Olx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG5tbS92bXNjYW4uYy0zNjc2LVxuLS1cbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzc2MC1cdHVuc2lnbmVkIGxvbmcgZmlyc3QgPSAtMTtcbm1tL3Ztc2Nhbi5jOjM3NjE6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmM6Mzc2MjpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYy0zNzYzLVxuLS1cbm1tL3Ztc2Nhbi5jPTM4MjQ9c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zODMwLVx0dW5zaWduZWQgbG9uZyBuZXh0O1xubW0vdm1zY2FuLmM6MzgzMTpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYy0zODMyLVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NjUtXG5tbS92bXNjYW4uYzozODY2OnN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zODY3LXtcbi0tXG5tbS92bXNjYW4uYy0zOTAwLVxubW0vdm1zY2FuLmM6MzkwMTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbm1tL3Ztc2Nhbi5jLTM5MDIte1xubW0vdm1zY2FuLmM6MzkwMzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM5MDQtXG4tLVxubW0vdm1zY2FuLmM9MzkyMT1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXG5tbS92bXNjYW4uYy0zOTIyLXtcbm1tL3Ztc2Nhbi5jOjM5MjM6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gY3VycmVudC1cdTAwM2VyZWNsYWltX3N0YXRlLVx1MDAzZW1tX3dhbGs7XG5tbS92bXNjYW4uYy0zOTI0LVxuLS1cbm1tL3Ztc2Nhbi5jPTM5NDc9c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtMzk1MC1cdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIO1xubW0vdm1zY2FuLmM6Mzk1MTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzk1Mi1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmM6Mzk1MzpcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy0zOTU0LVx0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5NjQtXHRWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7XG5tbS92bXNjYW4uYzozOTY1Olx0Vk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT1cbm1tL3Ztc2Nhbi5jOjM5NjY6XHRcdFx0bHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCB0YXJnZXRfZ2VuKSk7XG5tbS92bXNjYW4uYy0zOTY3LVx0LyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovXG4tLVxubW0vdm1zY2FuLmM9NDAyOT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MDMyLVx0Ym9vbCBzZXFfaW5jX2ZsYWcgPSBmYWxzZTtcbm1tL3Ztc2Nhbi5jOjQwMzM6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMzQtXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTQwNDAtXHRcdHdoaWxlIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEpIHtcbm1tL3Ztc2Nhbi5jOjQwNDE6XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTQwNDItXG4tLVxubW0vdm1zY2FuLmMtNDA2MS1cbm1tL3Ztc2Nhbi5jOjQwNjI6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtNDA2My1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwODUtXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwODY6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwODctcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYy00MTE2LVx0ICovXG5tbS92bXNjYW4uYzo0MTE3Olx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSAxKTtcbm1tL3Ztc2Nhbi5jOjQxMTg6XHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWF4X3NlcSAmIzQzOyAxKTtcbm1tL3Ztc2Nhbi5jLTQxMTktXG4tLVxubW0vdm1zY2FuLmM9NDE0Nj1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MTQ5LVx0Ym9vbCBzdWNjZXNzO1xubW0vdm1zY2FuLmM6NDE1MDpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MTUxLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xubW0vdm1zY2FuLmM6NDE1MjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6NDE1MzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDE1NC1cbi0tXG5tbS92bXNjYW4uYy00MTY1LVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MTY2Olx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQxNjctXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MjMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyMzMtXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xubW0vdm1zY2FuLmM6NDIzNDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDIzNS1cdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtNDIzOS1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0MjQwOlx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbm1tL3Ztc2Nhbi5jLTQyNDEtXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOylcbi0tXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQyNzUtXG5tbS92bXNjYW4uYzo0Mjc2Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSk7XG5tbS92bXNjYW4uYy00Mjc3LVx0YmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xuLS1cbm1tL3Ztc2Nhbi5jLTQyODItLyogdG8gcHJvdGVjdCB0aGUgd29ya2luZyBzZXQgb2YgdGhlIGxhc3QgTiBqaWZmaWVzICovXG5tbS92bXNjYW4uYzo0MjgzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNDI4NC1cbm1tL3Ztc2Nhbi5jOjQyODU6c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQyODYte1xubW0vdm1zY2FuLmMtNDI4Ny1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbm1tL3Ztc2Nhbi5jOjQyODg6XHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcbm1tL3Ztc2Nhbi5jLTQyODktXHRib29sIHJlY2xhaW1hYmxlID0gIW1pbl90dGw7XG4tLVxubW0vdm1zY2FuLmMtNDMzMS0gKi9cbm1tL3Ztc2Nhbi5jOjQzMzI6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDMzMy17XG4tLVxubW0vdm1zY2FuLmMtNDMzNy1cdHVuc2lnbmVkIGxvbmcgZW5kO1xubW0vdm1zY2FuLmM6NDMzODpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MzM5LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy00MzQ3LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vdm1zY2FuLmM6NDM0ODpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbm1tL3Ztc2Nhbi5jLTQzNDktXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tLVxubW0vdm1zY2FuLmMtNDM4Ny1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xubW0vdm1zY2FuLmM6NDM4ODpcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG5tbS92bXNjYW4uYy00Mzg5LVx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYz00NDUwPWVudW0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NTctXG5tbS92bXNjYW4uYzo0NDU4OnN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxubW0vdm1zY2FuLmMtNDQ1OS17XG4tLVxubW0vdm1zY2FuLmMtNDUwNS1cbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA3LXtcbi0tXG5tbS92bXNjYW4uYy00NTMwLVxubW0vdm1zY2FuLmM6NDUzMTp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMyLXtcbi0tXG5tbS92bXNjYW4uYy00NTM3LVxubW0vdm1zY2FuLmM6NDUzODpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcbm1tL3Ztc2Nhbi5jLTQ1MzktXHR9XG4tLVxubW0vdm1zY2FuLmMtNDU0MS1cbm1tL3Ztc2Nhbi5jOjQ1NDI6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDU0My17XG4tLVxubW0vdm1zY2FuLmMtNDU2Ny1cbm1tL3Ztc2Nhbi5jOjQ1Njg6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTY5LXtcbi0tXG5tbS92bXNjYW4uYy00NTczLVx0aWYgKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXG5tbS92bXNjYW4uYzo0NTc0Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9IRUFEKTtcbm1tL3Ztc2Nhbi5jLTQ1NzUtfVxubW0vdm1zY2FuLmMtNDU3Ni1cbm1tL3Ztc2Nhbi5jOjQ1Nzc6Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1Nzgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ1OTA9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNDU5Mi17XG5tbS92bXNjYW4uYzo0NTkzOlx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjQ1OTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQ1OTUtXHRpbnQgc3dhcHBpbmVzcyA9IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4tLVxubW0vdm1zY2FuLmMtNDYyMy0gKi9cbm1tL3Ztc2Nhbi5jOjQ2MjQ6dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NjI1LXtcbi0tXG5tbS92bXNjYW4uYy00NjUwLSAqICAgIGdlbmVyYXRpb25zIG9uIGFuIExSVSBsaXN0LlxubW0vdm1zY2FuLmM6NDY1MTogKiA0LiBJbiBscnVfZ2VuX2RlbF9mb2xpbygpLCB0aGUgZ2VuZXJhdGlvbiB0byB3aGljaCB0aGUgZm9saW8gYmVsb25ncyBpc1xubW0vdm1zY2FuLmMtNDY1Mi0gKiAgICBmb3VuZCBiYXNlZCBvbiB0aGUgZ2VuZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiBmb2xpby1cdTAwM2VmbGFncywgYW5kIHRoZVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NTQtICogICAgdGhlIGxydSBzaXplIGNvcnJlY3RseSBkdXJpbmcgcmVwYXJlbnRpbmcsIG90aGVyd2lzZSB0aGUgbHJ1IHNpemUgbWF5XG5tbS92bXNjYW4uYzo0NjU1OiAqICAgIGJlIHVwZGF0ZWQgaW5jb3JyZWN0bHkgaW4gbHJ1X2dlbl9kZWxfZm9saW8oKS5cbm1tL3Ztc2Nhbi5jLTQ2NTYtICpcbi0tXG5tbS92bXNjYW4uYy00NjY0LSAqL1xubW0vdm1zY2FuLmM6NDY2NTpzdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDY2Ni1cdFx0XHRcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxubW0vdm1zY2FuLmMtNDY2Ny17XG5tbS92bXNjYW4uYzo0NjY4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmNoaWxkX2xydWdlbiwgKnBhcmVudF9scnVnZW47XG5tbS92bXNjYW4uYy00NjY5LVx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XG4tLVxubW0vdm1zY2FuLmMtNDY3NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdldF9ucl9nZW5zKGNoaWxkX2xydXZlYywgdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0Njc2Olx0XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShjaGlsZF9scnVnZW4tXHUwMDNlbWF4X3NlcSAtIGkpO1xubW0vdm1zY2FuLmMtNDY3Ny1cdFx0bG9uZyBucl9wYWdlcyA9IGNoaWxkX2xydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdO1xubW0vdm1zY2FuLmM6NDY3ODpcdFx0aW50IGNoaWxkX2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcbm1tL3Ztc2Nhbi5jOjQ2Nzk6XHRcdGludCBwYXJlbnRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcbm1tL3Ztc2Nhbi5jLTQ2ODAtXG4tLVxubW0vdm1zY2FuLmMtNDY4OC1cbm1tL3Ztc2Nhbi5jOjQ2ODk6XHRcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgIT0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSkge1xubW0vdm1zY2FuLmMtNDY5MC1cdFx0XHRfX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSAmIzQzOyBjaGlsZF9scnVfYWN0aXZlLCB6b25lLCAtbnJfcGFnZXMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2OTUtXG5tbS92bXNjYW4uYzo0Njk2OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5tbS92bXNjYW4uYy00Njk3LXtcbi0tXG5tbS92bXNjYW4uYy00NzA3LVx0XHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOylcbm1tL3Ztc2Nhbi5jOjQ3MDg6XHRcdFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcbm1tL3Ztc2Nhbi5jLTQ3MDktXG4tLVxubW0vdm1zY2FuLmM9NDczMD1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDczOS1cdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xubW0vdm1zY2FuLmM6NDc0MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDc0MS1cbi0tXG5tbS92bXNjYW4uYy00NzQ4LVx0LyogcHJvbW90ZWQgKi9cbm1tL3Ztc2Nhbi5jOjQ3NDk6XHRpZiAoZ2VuICE9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XG5tbS92bXNjYW4uYy00NzUwLVx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ3Nzk9c3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3OTYtXG5tbS92bXNjYW4uYzo0Nzk3Olx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xubW0vdm1zY2FuLmMtNDc5OC1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4MDM9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODE0LVx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xubW0vdm1zY2FuLmM6NDgxNTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDgxNi1cbi0tXG5tbS92bXNjYW4uYy00ODIyLVxubW0vdm1zY2FuLmM6NDgyMzpcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmMtNDgyNC1cbi0tXG5tbS92bXNjYW4uYz00OTUxPXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NTktXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG5tbS92bXNjYW4uYzo0OTYwOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTQ5NjEtXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuLS1cbm1tL3Ztc2Nhbi5jLTUwMTAtXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xubW0vdm1zY2FuLmM6NTAxMTpcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxubW0vdm1zY2FuLmMtNTAxMi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4tLVxubW0vdm1zY2FuLmM9NTE3Mz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTgwLVxubW0vdm1zY2FuLmM6NTE4MTpcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG5tbS92bXNjYW4uYy01MTgyLVx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcbi0tXG5tbS92bXNjYW4uYz01MjE0PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMjAtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo1MjIxOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUyMjItXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtNTIzNC1cdFx0aWYgKG9wKSB7XG5tbS92bXNjYW4uYzo1MjM1Olx0XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xubW0vdm1zY2FuLmMtNTIzNi1cdFx0XHRvcCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNTI0OC1cdFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcbm1tL3Ztc2Nhbi5jOjUyNDk6XHRcdFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTUyNTAtXHRcdFx0bWVtY2cgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTUyNjYtXHRpZiAob3ApXG5tbS92bXNjYW4uYzo1MjY3Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcbm1tL3Ztc2Nhbi5jLTUyNjgtXG4tLVxubW0vdm1zY2FuLmMtNTI3My1cbm1tL3Ztc2Nhbi5jOjUyNzQ6XHQvKiByZXN0YXJ0IGlmIHJhY2VkIHdpdGggbHJ1X2dlbl9yb3RhdGVfbWVtY2coKSAqL1xubW0vdm1zY2FuLmMtNTI3NS1cdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXG4tLVxubW0vdm1zY2FuLmMtNTI4My1cbm1tL3Ztc2Nhbi5jOjUyODQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01Mjg1LXtcbi0tXG5tbS92bXNjYW4uYy01Mjk3LVx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmM6NTI5ODpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xubW0vdm1zY2FuLmMtNTI5OS1cbi0tXG5tbS92bXNjYW4uYy01MzA0LVxubW0vdm1zY2FuLmM6NTMwNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTMwNi17XG4tLVxubW0vdm1zY2FuLmM9NTM1MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01MzUyLXtcbm1tL3Ztc2Nhbi5jOjUzNTM6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUzNTQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtbS92bXNjYW4uY2AgY29kZSByZWxhdGVkIHRvIGRlYnVnZnMgYW5kIHN5c2ZzIGludGVyYWN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSB0aG9zZSBjb25uZWN0ZWQgdG8gdGhlIGRlYnVnIGFuZCBzeXN0ZW0gZmlsZSBzeXN0ZW1zLgoKVG8gbWFrZSB0aGlzIGVmZmljaWVudCwgSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiB0aGUgbGlrZWx5IGFyZWEgd2hlcmUgc3VjaCBjb2RlIHdvdWxkIHJlc2lkZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIGFyb3VuZCBsaW5lcyA1NTAwIHRvIDYwMDAuIFRoYXQgcmFuZ2Ugb2Z0ZW4gaG9sZHMgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBzeXN0ZW0gaXMgZXhwb3NlZCBmb3IgZGVidWdnaW5nIG9yIG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBgdm1zY2FuYCBleHBvc2VzIGFueSBpbnRlcm5hbCBzdGF0ZSBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU1MDA6XHRzdGF0aWMgc3NpemVfdCBtaW5fdHRsX21zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG41NTAxOlx0XHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG41NTAyOlx0e1xuNTUwMzpcdFx0dW5zaWduZWQgaW50IG1zZWNzO1xuNTUwNDpcdFxuNTUwNTpcdFx0aWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZtc2VjcykpXG41NTA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTUwNzpcdFxuNTUwODpcdFx0V1JJVEVfT05DRShscnVfZ2VuX21pbl90dGwsIG1zZWNzX3RvX2ppZmZpZXMobXNlY3MpKTtcbjU1MDk6XHRcbjU1MTA6XHRcdHJldHVybiBsZW47XG41NTExOlx0fVxuNTUxMjpcdFxuNTUxMzpcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9taW5fdHRsX2F0dHIgPSBfX0FUVFJfUlcobWluX3R0bF9tcyk7XG41NTE0Olx0XG41NTE1Olx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbjU1MTY6XHR7XG41NTE3Olx0XHR1bnNpZ25lZCBpbnQgY2FwcyA9IDA7XG41NTE4Olx0XG41NTE5Olx0XHRpZiAoZ2V0X2NhcChMUlVfR0VOX0NPUkUpKVxuNTUyMDpcdFx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xuNTUyMTpcdFxuNTUyMjpcdFx0aWYgKHNob3VsZF93YWxrX21tdSgpKVxuNTUyMzpcdFx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xuNTUyNDpcdFxuNTUyNTpcdFx0aWYgKHNob3VsZF9jbGVhcl9wbWRfeW91bmcoKSlcbjU1MjY6XHRcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcbjU1Mjc6XHRcbjU1Mjg6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7MHglMDR4XFxuXCYjMzQ7LCBjYXBzKTtcbjU1Mjk6XHR9XG41NTMwOlx0XG41NTMxOlx0Lyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xuNTUzMjpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbjU1MzM6XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjU1MzQ6XHR7XG41NTM1Olx0XHRpbnQgaTtcbjU1MzY6XHRcdHVuc2lnbmVkIGludCBjYXBzO1xuNTUzNzpcdFxuNTUzODpcdFx0aWYgKHRvbG93ZXIoKmJ1ZikgPT0gJiMzOTtuJiMzOTspXG41NTM5Olx0XHRcdGNhcHMgPSAwO1xuNTU0MDpcdFx0ZWxzZSBpZiAodG9sb3dlcigqYnVmKSA9PSAmIzM5O3kmIzM5OylcbjU1NDE6XHRcdFx0Y2FwcyA9IC0xO1xuNTU0MjpcdFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFx1MDAyNmNhcHMpKVxuNTU0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU1NDQ6XHRcbjU1NDU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSYjNDM7JiM0MzspIHtcbjU1NDY6XHRcdFx0Ym9vbCBlbmFibGVkID0gY2FwcyBcdTAwMjYgQklUKGkpO1xuNTU0NzpcdFxuNTU0ODpcdFx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG41NTQ5Olx0XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG41NTUwOlx0XHRcdGVsc2UgaWYgKGVuYWJsZWQpXG41NTUxOlx0XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbjU1NTI6XHRcdFx0ZWxzZVxuNTU1MzpcdFx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xuNTU1NDpcdFx0fVxuNTU1NTpcdFxuNTU1NjpcdFx0cmV0dXJuIGxlbjtcbjU1NTc6XHR9XG41NTU4Olx0XG41NTU5Olx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcbjU1NjA6XHRcbjU1NjE6XHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xuNTU2MjpcdFx0XHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcbjU1NjM6XHRcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG41NTY0Olx0XHROVUxMXG41NTY1Olx0fTtcbjU1NjY6XHRcbjU1Njc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XG41NTY4Olx0XHQubmFtZSA9IFwmIzM0O2xydV9nZW5cJiMzNDssXG41NTY5Olx0XHQuYXR0cnMgPSBscnVfZ2VuX2F0dHJzLFxuNTU3MDpcdH07XG41NTcxOlx0XG41NTcyOlx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNTU3MzpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxuNTU3NDpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG41NTc1Olx0XG41NTc2Olx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXG41NTc3Olx0e1xuNTU3ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTU3OTpcdFx0bG9mZl90IG5yX3RvX3NraXAgPSAqcG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBkZWJ1Z2ZzIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IHNjYW5uaW5nLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGxpa2VseSByZXNpZGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cywgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgYG1tYCBkaXJlY3RvcnkuIE5vdywgd2hlcmUgd291bGQgdGhlIHZtIHNjYW5uaW5nIGRldGFpbHMgYmU/ICpBaCwgeWVzLCBgdm1zY2FuLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGUuKiBMZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmVzIDU1NzUgdGhyb3VnaCA2MDEwIHdpdGhpbiB0aGF0IGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbnMgb3Igc29tZSBpbmRpY2F0aW9uIG9mIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGFyZSBleHBvc2VkLiBGcm9tIHRob3NlIGxpbmVzIEkmIzM5O2xsIGJlIGFibGUgdG8gc2VlIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgdm1zYW4gY29kZS4gSXQmIzM5O3MgYSB0YXJnZXRlZCBzZWFyY2gsIEkgaG9wZSB0byBmaW5kIHNvbWUgaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbnMgdGhlcmUsIG90aGVyd2lzZSBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NTgwOlx0XG41NTgxOlx0XHRtLVx1MDAzZXByaXZhdGUgPSBrdm1hbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7XG41NTgyOlx0XHRpZiAoIW0tXHUwMDNlcHJpdmF0ZSlcbjU1ODM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG41NTg0Olx0XG41NTg1Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTtcbjU1ODY6XHRcdGRvIHtcbjU1ODc6XHRcdFx0aW50IG5pZDtcbjU1ODg6XHRcbjU1ODk6XHRcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG41NTkwOlx0XHRcdFx0aWYgKCFucl90b19za2lwLS0pXG41NTkxOlx0XHRcdFx0XHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjU1OTI6XHRcdFx0fVxuNTU5MzpcdFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xuNTU5NDpcdFxuNTU5NTpcdFx0cmV0dXJuIE5VTEw7XG41NTk2Olx0fVxuNTU5NzpcdFxuNTU5ODpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTU5OTpcdHtcbjU2MDA6XHRcdGlmICghSVNfRVJSX09SX05VTEwodikpXG41NjAxOlx0XHRcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhOVUxMLCBscnV2ZWNfbWVtY2codikpO1xuNTYwMjpcdFxuNTYwMzpcdFx0a3ZmcmVlKG0tXHUwMDNlcHJpdmF0ZSk7XG41NjA0Olx0XHRtLVx1MDAzZXByaXZhdGUgPSBOVUxMO1xuNTYwNTpcdH1cbjU2MDY6XHRcbjU2MDc6XHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuNTYwODpcdHtcbjU2MDk6XHRcdGludCBuaWQgPSBscnV2ZWNfcGdkYXQodiktXHUwMDNlbm9kZV9pZDtcbjU2MTA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh2KTtcbjU2MTE6XHRcbjU2MTI6XHRcdCYjNDM7JiM0MzsqcG9zO1xuNTYxMzpcdFxuNTYxNDpcdFx0bmlkID0gbmV4dF9tZW1vcnlfbm9kZShuaWQpO1xuNTYxNTpcdFx0aWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMpIHtcbjU2MTY6XHRcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpO1xuNTYxNzpcdFx0XHRpZiAoIW1lbWNnKVxuNTYxODpcdFx0XHRcdHJldHVybiBOVUxMO1xuNTYxOTpcdFxuNTYyMDpcdFx0XHRuaWQgPSBmaXJzdF9tZW1vcnlfbm9kZTtcbjU2MjE6XHRcdH1cbjU2MjI6XHRcbjU2MjM6XHRcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTYyNDpcdH1cbjU2MjU6XHRcbjU2MjY6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG41NjI3Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgdW5zaWduZWQgbG9uZyAqbWluX3NlcSxcbjU2Mjg6XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzZXEpXG41NjI5Olx0e1xuNTYzMDpcdFx0aW50IGk7XG41NjMxOlx0XHRpbnQgdHlwZSwgdGllcjtcbjU2MzI6XHRcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcbjU2MzM6XHRcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuNTYzNDpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG41NjM1Olx0XG41NjM2Olx0XHRmb3IgKHRpZXIgPSAwOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7XG41NjM3Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICAgICAgICAgICAgJTEwZFwmIzM0OywgdGllcik7XG41NjM4Olx0XHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KSB7XG41NjM5Olx0XHRcdFx0Y29uc3QgY2hhciAqcyA9IFwmIzM0O3h4eFwmIzM0OztcbjU2NDA6XHRcdFx0XHR1bnNpZ25lZCBsb25nIG5bM10gPSB7fTtcbjU2NDE6XHRcbjU2NDI6XHRcdFx0XHRpZiAoc2VxID09IG1heF9zZXEpIHtcbjU2NDM6XHRcdFx0XHRcdHMgPSBcJiMzNDtSVHhcJiMzNDs7XG41NjQ0Olx0XHRcdFx0XHRuWzBdID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW3RpZXJdKTtcbjU2NDU6XHRcdFx0XHRcdG5bMV0gPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVt0aWVyXSk7XG41NjQ2Olx0XHRcdFx0fSBlbHNlIGlmIChzZXEgPT0gbWluX3NlcVt0eXBlXSB8fCBOUl9ISVNUX0dFTlMgXHUwMDNlIDEpIHtcbjU2NDc6XHRcdFx0XHRcdHMgPSBcJiMzNDtyZXBcJiMzNDs7XG41NjQ4Olx0XHRcdFx0XHRuWzBdID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnVnZW4tXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcbjU2NDk6XHRcdFx0XHRcdG5bMV0gPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcbjU2NTA6XHRcdFx0XHRcdG5bMl0gPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XG41NjUxOlx0XHRcdFx0fVxuNTY1MjpcdFxuNTY1MzpcdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDM7IGkmIzQzOyYjNDM7KVxuNTY1NDpcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgJTEwbHUlY1wmIzM0OywgbltpXSwgc1tpXSk7XG41NjU1Olx0XHRcdH1cbjU2NTY6XHRcdFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG41NjU3Olx0XHR9XG41NjU4Olx0XG41NjU5Olx0XHRpZiAoIW1tX3N0YXRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGVidWdmcyBXcml0ZSBIYW5kbGVycyBmb3IgYGxydV9nZW5gKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBkZWJ1Z2ZzYCBpbnRlcmZhY2UgYW5kIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGUgaGFuZGxlcnMgYXZhaWxhYmxlIGZvciB0aGUgYGxydV9nZW5gIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgbW9kaWZpYWJsZSBvciBjb25maWd1cmFibGUgdGhyb3VnaCB0aGF0IGRlYnVnIGludGVyZmFjZS4gTXkgdGhpbmtpbmcgaXMgdG8gZGlyZWN0bHkgZXhhbWluZSB0aGUgY29kZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucyB0byBgbHJ1X2dlbmAuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSYjMzk7bGwgcmVhZCBmcm9tIGxpbmUgNTc1MCB0byA2MDIwLCB0byBwaW5wb2ludCB0aG9zZSBjcml0aWNhbCB3cml0ZSBoYW5kbGVyIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodCBuZWVkZWQgb24gd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGV4cG9zZWQgdG8gbWUgdmlhIGRlYnVnZnMsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGVmZmVjdHMgYXJlIG9uIHRoZSBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTc1MTpcdFxuNTc1MjpcdFx0cmV0dXJuIHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MsIGZvcmNlX3NjYW4pID8gMCA6IC1FRVhJU1Q7XG41NzUzOlx0fVxuNTc1NDpcdFxuNTc1NTpcdHN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuNTc1NjpcdFx0XHRcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG41NzU3Olx0e1xuNTc1ODpcdFx0aW50IG5yX2JhdGNoO1xuNTc1OTpcdFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbjU3NjA6XHRcbjU3NjE6XHRcdGlmIChzZXEgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG41NzYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTc2MzpcdFxuNTc2NDpcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcbjU3NjU6XHRcbjU3NjY6XHRcdHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjU3Njc6XHRcdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbjU3Njg6XHRcbjU3Njk6XHRcdFx0aWYgKHNlcSBcdTAwM2MgZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykpXG41NzcwOlx0XHRcdFx0cmV0dXJuIDA7XG41NzcxOlx0XG41NzcyOlx0XHRcdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlPSBucl90b19yZWNsYWltKVxuNTc3MzpcdFx0XHRcdHJldHVybiAwO1xuNTc3NDpcdFxuNTc3NTpcdFx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbjU3NzY6XHRcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxuNTc3NzpcdFx0XHRcdHJldHVybiAwO1xuNTc3ODpcdFxuNTc3OTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjU3ODA6XHRcdH1cbjU3ODE6XHRcbjU3ODI6XHRcdHJldHVybiAtRUlOVFI7XG41NzgzOlx0fVxuNTc4NDpcdFxuNTc4NTpcdHN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcbjU3ODY6XHRcdFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcbjU3ODc6XHR7XG41Nzg4Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG41Nzg5Olx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjU3OTA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG41NzkxOlx0XG41NzkyOlx0XHRpZiAobmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSlcbjU3OTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41Nzk0Olx0XG41Nzk1Olx0XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xuNTc5NjpcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQobWVtY2dfaWQpO1xuNTc5NzpcdFx0XHRpZiAoIW1lbWNnKVxuNTc5ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTc5OTpcdFx0fVxuNTgwMDpcdFxuNTgwMTpcdFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxuNTgwMjpcdFx0XHRnb3RvIGRvbmU7XG41ODAzOlx0XG41ODA0Olx0XHRzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnO1xuNTgwNTpcdFx0bHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjU4MDY6XHRcbjU4MDc6XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUylcbjU4MDg6XHRcdFx0c3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuNTgwOTpcdFx0ZWxzZSBpZiAoc3dhcHBpbmVzcyBcdTAwM2UgU1dBUFBJTkVTU19BTk9OX09OTFkpXG41ODEwOlx0XHRcdGdvdG8gZG9uZTtcbjU4MTE6XHRcbjU4MTI6XHRcdHN3aXRjaCAoY21kKSB7XG41ODEzOlx0XHRjYXNlICYjMzk7JiM0MzsmIzM5OzpcbjU4MTQ6XHRcdFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xuNTgxNTpcdFx0XHRicmVhaztcbjU4MTY6XHRcdGNhc2UgJiMzOTstJiMzOTs6XG41ODE3Olx0XHRcdGVyciA9IHJ1bl9ldmljdGlvbihscnV2ZWMsIHNlcSwgc2MsIHN3YXBwaW5lc3MsIG9wdCk7XG41ODE4Olx0XHRcdGJyZWFrO1xuNTgxOTpcdFx0fVxuNTgyMDpcdGRvbmU6XG41ODIxOlx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG41ODIyOlx0XG41ODIzOlx0XHRyZXR1cm4gZXJyO1xuNTgyNDpcdH1cbjU4MjU6XHRcbjU4MjY6XHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG41ODI3Olx0c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXG41ODI4Olx0XHRcdFx0XHQgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG41ODI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE1HTFJVIExpc3QgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYGxydV9nZW5fc2VxX3dyaXRlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGRlYnVnZnMgY29tbWFuZHMgdGhhdCB0cmlnZ2VyIGFnaW5nIG9yIGV2aWN0aW9uLCBhbmQgdGhhdCwgaW4gdHVybiwgZnVubmVscyBpbnRvIHRoZSBjb3JlIHNlcXVlbmNlIGluY3JlbWVudCBhbmQgZm9saW8gZXZpY3Rpb24gbG9naWMuIFRoZSBmbG93IGlzIGNsZWFyOiBjb21tYW5kcyBmcm9tIGRlYnVnZnMsIHdoaWNoLCBpbiB0dXJuLCB0cmlnZ2VycyBhZ2luZy9ldmljdGlvbiwgdHJpZ2dlcnMgdGhlIHNlcXVlbmNlIGluY3JlbWVudCBhbmQvb3IgZm9saW8gZXZpY3Rpb24uIEJvdGggbm9ybWFsIHBhZ2UgcmVjbGFtYXRpb24gYW5kIHRoZSBkZWJ1Z2ZzIHBhdGhzIHNlZW0gdG8gaGl0IHNpbWlsYXIgY29kZSBwYXRoczogYHNocmlua19ub2RlYCAtJmd0OyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgLSZndDsgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCAtJmd0OyBgZXZpY3RfZm9saW9zYCBvciBgdHJ5X3RvX2luY19tYXhfc2VxYC4KCk5vdywgdGhpcyBzcGVjaWZpYyBwYXRjaDogVGhlIGluaXRpYWwgY2hhbmdlIGlzIHRoZSBgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvYCBtYWNybyB0dXJuZWQgaW50byBhbiBpbmxpbmUgZnVuY3Rpb24sIGFuZCBhIG5ldyBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYC4gVGhhdCYjMzk7cyBhIHJlZmFjdG9yLCBtYWtpbmcgdGhlIGNvZGUgYSBsaXR0bGUgbW9yZSByZWFkYWJsZS4gQWxzbywgdGhlcmUmIzM5O3MgYSBuZXcgaGVscGVyLCBgX19mb2xpb19pbmNfZ2VuYCwgdGhhdCBhYnN0cmFjdHMgdGhlIGNvcmUgZ2VuZXJhdGlvbiBpbmNyZW1lbnQgbG9naWMuIFRoZSBuZXcgYGZsdXNoX2xydV9iYXRjaGAgaGVscGVyIGlzIGEgbmljZSB0b3VjaDsgdGhpcyBjbGVhcmx5IGFpbXMgdG8gb3B0aW1pemUgbGlzdCBtYW5pcHVsYXRpb25zIGZvciBwZXJmb3JtYW5jZS4KClRoZSBiaWcgY2hhbmdlIGlzIHdpdGhpbiBgaW5jX21pbl9zZXFgLiBJbnN0ZWFkIG9mIGluZGl2aWR1YWxseSBtb3ZpbmcgZWFjaCBmb2xpbywgaXQmIzM5O3Mgbm93IGJhdGNoaW5nIHRoZSBtb3ZlcyEgSXQgaXRlcmF0ZXMgdGhlIGxpc3QsIHByZWZldGNoZXMgdGhlIG5leHQgZW50cnksIGluY3JlbWVudHMgdGhlIGdlbmVyYXRpb24sIGFuZCAqdGhlbiogZG9lcyB0aGUgZm9saW8gbW92ZS4gSXQga2VlcHMgdHJhY2sgb2YgYSBgYmF0Y2hfZW5kYCwgYWNjdW11bGF0aW5nIGZvbGlvcyB0byBiZSBtb3ZlZC4gSWYgdGhlIGdlbmVyYXRpb24gaW5jcmVhc2VzIChgZ2VuX2luY3JlYXNlZGAgaXMgdHJ1ZSksIGl0IHVwZGF0ZXMgYSBkZWx0YSwgYWNjdW11bGF0ZXMgdGhlIGJhdGNoLCBhbmQgdXBkYXRlcyBwcm90ZWN0ZWQgdGllciBzdGF0cy4gSWYgdGhlIGdlbmVyYXRpb24gZG9lc24mIzM5O3QgaW5jcmVhc2UgKHByb21vdGlvbiksIGl0IGZsdXNoZXMgdGhlIGJhdGNoIGFuZCB0aGVuIG1vdmVzIHRoZSBjdXJyZW50IGZvbGlvLiBBZnRlciB0aGUgbG9vcCwgdGhlIHJlbWFpbmluZyBiYXRjaCBpcyBmbHVzaGVkLiBUaGVyZSBhcmUgYWxzbyBuZXcgYFZNX1dBUk5fT05fT05DRWAgY2hlY2tzIGFkZGVkIHRvIGVuc3VyZSBzYW5pdHkgYXJvdW5kIHRoZSBudW1iZXIgb2YgZ2VuZXJhdGlvbnMgYW5kIGFjdGl2ZSBMUlUgc3RhdGUuIFRoZSBiYXRjaGluZyBpcyBzbWFydC4KCk9rYXksIGlzIHRoaXMgcGF0Y2ggZnV6emFibGU/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB0aGUgdmVyeSBjb3JlIG9mIE1HTFJVJiMzOTtzIGFnaW5nIGFuZCBldmljdGlvbiBhbGdvcml0aG1zLCBpbiB0aGUgY3JpdGljYWwgYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgbWFuaXB1bGF0aW5nIGxpc3RzIHVzaW5nIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBsaXN0X3NwbGljZV90YWlsX2luaXRgIGFuZCB0cmFja2luZyBhIGdlbmVyYXRpb24sIGFuZCBiYXRjaGluZyBhY2NvdW50aW5nLiBUaGlzIGtpbmQgb2YgbG9naWMgaXMgcHJpbWUgZm9yIGZpbmRpbmcgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSwgTFJVIGFnaW5nLCBwYWdlIHJlY2xhaW0sIG9yIGRlYnVnZ2luZy4gVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBpbiBgbW0vdm1zY2FuLmNgIG9yIHJlbGF0ZWQgYXJlIGdvb2QgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMuIEkgd2FudCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIChiZWNhdXNlIHRob3NlIGhlbHBlcnMgYXJlIHVzdWFsbHkgaW5saW5lZCwgc28gdGhlIGZ1enplciB3b3VsZG4mIzM5O3QgdGFyZ2V0IHRoZSBzeW1ib2xzIGRpcmVjdGx5KS4gTGV0JiMzOTtzIGxvb2sgZm9yIGZ1bmN0aW9ucyBpbiB0aGF0IGFyZWEgcmVsYXRlZCB0byBNR0xSVSBvciB2bXNjYW4gdGhhdCBhcmVuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtMTg0LSNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbm1tL3Ztc2Nhbi5jOjE4NTpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0xODYtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4tLVxubW0vdm1zY2FuLmMtMTk1LVxubW0vdm1zY2FuLmM6MTk2OnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTE5Ny1cdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbi0tXG5tbS92bXNjYW4uYy0yMDYtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjIwNzpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0yMDgtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4tLVxubW0vdm1zY2FuLmMtMjExLVxubW0vdm1zY2FuLmM6MjEyOnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTIxMy1cdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbi0tXG5tbS92bXNjYW4uYz0yMjE9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcbm1tL3Ztc2Nhbi5jLTIyMi1cbm1tL3Ztc2Nhbi5jOjIyMzpzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTIyNC17XG4tLVxubW0vdm1zY2FuLmMtMjMyLS8qIFJldHVybnMgdHJ1ZSBmb3IgcmVjbGFpbSB0aHJvdWdoIGNncm91cCBsaW1pdHMgb3IgY2dyb3VwIGludGVyZmFjZXMuICovXG5tbS92bXNjYW4uYzoyMzM6c3RhdGljIGJvb2wgY2dyb3VwX3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yMzQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI0MS0gKi9cbm1tL3Ztc2Nhbi5jOjI0MjpzdGF0aWMgYm9vbCByb290X3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yNDMte1xuLS1cbm1tL3Ztc2Nhbi5jLTI1OS0gKi9cbm1tL3Ztc2Nhbi5jOjI2MDpzdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjYxLXtcbi0tXG5tbS92bXNjYW4uYy0yNzAtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI3MTpzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTI3Mi17XG4tLVxubW0vdm1zY2FuLmMtMjc1LVxubW0vdm1zY2FuLmM6Mjc2OnN0YXRpYyBib29sIHJvb3RfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTI3Ny17XG4tLVxubW0vdm1zY2FuLmMtMjgwLVxubW0vdm1zY2FuLmM6MjgxOnN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yODIte1xuLS1cbm1tL3Ztc2Nhbi5jLTI4Ni1cbm1tL3Ztc2Nhbi5jOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0yODgtXHRcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtMjkyLVxubW0vdm1zY2FuLmM6MjkzOnN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxubW0vdm1zY2FuLmMtMjk0LVx0XHRcdFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwOC0gKi9cbm1tL3Ztc2Nhbi5jOjMwOTpzdGF0aWMgdm9pZCBmbHVzaF9yZWNsYWltX3N0YXRlKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMzEwLXtcbi0tXG5tbS92bXNjYW4uYy0zNDQtXG5tbS92bXNjYW4uYzozNDU6c3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbm1tL3Ztc2Nhbi5jLTM0Ni1cdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0zNjQtXG5tbS92bXNjYW4uYzozNjU6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtMzY2LVx0XHRcdFx0XHQgIGludCBuaWQsXG4tLVxubW0vdm1zY2FuLmMtMzk0LSAqL1xubW0vdm1zY2FuLmM6Mzk1OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbm1tL3Ztc2Nhbi5jLTM5Ni17XG4tLVxubW0vdm1zY2FuLmMtNDEzLSAqL1xubW0vdm1zY2FuLmM6NDE0OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbm1tL3Ztc2Nhbi5jLTQxNS17XG4tLVxubW0vdm1zY2FuLmMtNDI4LVxubW0vdm1zY2FuLmM6NDI5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRyb3Bfc2xhYl9ub2RlKGludCBuaWQpXG5tbS92bXNjYW4uYy00MzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0MS1cbm1tL3Ztc2Nhbi5jOjQ0Mjp2b2lkIGRyb3Bfc2xhYih2b2lkKVxubW0vdm1zY2FuLmMtNDQzLXtcbi0tXG5tbS92bXNjYW4uYy00NjYtXG5tbS92bXNjYW4uYzo0Njc6c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDY4LXtcbi0tXG5tbS92bXNjYW4uYy00OTMtICovXG5tbS92bXNjYW4uYzo0OTQ6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2Vycm9yKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vdm1zY2FuLmMtNDk1LVx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IGVycm9yKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMi1cbm1tL3Ztc2Nhbi5jOjUwMzpzdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTUwNC17XG4tLVxubW0vdm1zY2FuLmMtNTMwLVxubW0vdm1zY2FuLmM6NTMxOnZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXG5tbS92bXNjYW4uYy01MzIte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNC0gKi9cbm1tL3Ztc2Nhbi5jOjYwNTp2b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdm1zY2FuLmMtNjA2LVx0XHRcdFx0XHRcdFx0aW50IG5yX3Rocm90dGxlZClcbi0tXG5tbS92bXNjYW4uYz02Mjc9dHlwZWRlZiBlbnVtIHtcbi0tXG5tbS92bXNjYW4uYy02NDAtICovXG5tbS92bXNjYW4uYzo2NDE6c3RhdGljIHBhZ2VvdXRfdCBwYWdlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbm1tL3Ztc2Nhbi5jLTY0Mi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbi0tXG5tbS92bXNjYW4uYy03MDEtICovXG5tbS92bXNjYW4uYzo3MDI6c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdm1zY2FuLmMtNzAzLVx0XHRcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbi0tXG5tbS92bXNjYW4uYy04MTctICovXG5tbS92bXNjYW4uYzo4MTg6bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTgxOS17XG4tLVxubW0vdm1zY2FuLmMtODQwLSAqL1xubW0vdm1zY2FuLmM6ODQxOnZvaWQgZm9saW9fcHV0YmFja19scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTg0Mi17XG4tLVxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODU5LSAqL1xubW0vdm1zY2FuLmM6ODYwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg2MS17XG4tLVxubW0vdm1zY2FuLmMtODgxLSNlbHNlXG5tbS92bXNjYW4uYzo4ODI6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODgzLXtcbi0tXG5tbS92bXNjYW4uYy04ODctXG5tbS92bXNjYW4uYzo4ODg6c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy04ODktXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy05NTQtLyogQ2hlY2sgaWYgYSBmb2xpbyBpcyBkaXJ0eSBvciB1bmRlciB3cml0ZWJhY2sgKi9cbm1tL3Ztc2Nhbi5jOjk1NTpzdGF0aWMgdm9pZCBmb2xpb19jaGVja19kaXJ0eV93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTk1Ni1cdFx0XHRcdCAgICAgICBib29sICpkaXJ0eSwgYm9vbCAqd3JpdGViYWNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTk4NS1cbm1tL3Ztc2Nhbi5jOjk4NjpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG5tbS92bXNjYW4uYy05ODctXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbi0tXG5tbS92bXNjYW4uYy0xMDE2LSAqL1xubW0vdm1zY2FuLmM6MTAxNzpzdGF0aWMgdW5zaWduZWQgaW50IGRlbW90ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbW90ZV9mb2xpb3MsXG5tbS92bXNjYW4uYy0xMDE4LVx0XHRcdFx0ICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy0xMDU5LVxubW0vdm1zY2FuLmM6MTA2MDpzdGF0aWMgYm9vbCBtYXlfZW50ZXJfZnMoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX21hc2spXG5tbS92bXNjYW4uYy0xMDYxLXtcbi0tXG5tbS92bXNjYW4uYy0xMDc3LSAqL1xubW0vdm1zY2FuLmM6MTA3ODpzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG5tbS92bXNjYW4uYy0xMDc5LVx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0xNjA4LVxubW0vdm1zY2FuLmM6MTYwOTp1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS92bXNjYW4uYy0xNjEwLVx0XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTE2NjMtICovXG5tbS92bXNjYW4uYzoxNjY0OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTE2NjUtXHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgKm5yX3pvbmVfdGFrZW4pXG4tLVxubW0vdm1zY2FuLmMtMTY5OC0gKi9cbm1tL3Ztc2Nhbi5jOjE2OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTE3MDAtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTE4MTUtICovXG5tbS92bXNjYW4uYzoxODE2OmJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTE4MTcte1xuLS1cbm1tL3Ztc2Nhbi5jLTE4NDEtICovXG5tbS92bXNjYW4uYzoxODQyOnN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxubW0vdm1zY2FuLmMtMTg0My1cdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMTg4NS0gKi9cbm1tL3Ztc2Nhbi5jOjE4ODY6c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL3Ztc2Nhbi5jLTE4ODcte1xuLS1cbm1tL3Ztc2Nhbi5jLTE5NTUtICovXG5tbS92bXNjYW4uYzoxOTU2OnN0YXRpYyBpbnQgY3VycmVudF9tYXlfdGhyb3R0bGUodm9pZClcbm1tL3Ztc2Nhbi5jLTE5NTcte1xuLS1cbm1tL3Ztc2Nhbi5jLTE5NjAtXG5tbS92bXNjYW4uYzoxOTYxOnN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxubW0vdm1zY2FuLmMtMTk2Mi1cdFx0XHRcdCAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy0yMDAyLSAqL1xubW0vdm1zY2FuLmM6MjAwMzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDA0LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwODQtICovXG5tbS92bXNjYW4uYzoyMDg1OnN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDg2LVx0XHRcdCAgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjE3My1cbm1tL3Ztc2Nhbi5jOjIxNzQ6c3RhdGljIHVuc2lnbmVkIGludCByZWNsYWltX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbm1tL3Ztc2Nhbi5jLTIxNzUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTIxOTgtXG5tbS92bXNjYW4uYzoyMTk5OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxubW0vdm1zY2FuLmMtMjIwMC17XG4tLVxubW0vdm1zY2FuLmMtMjIzMS1cbm1tL3Ztc2Nhbi5jOjIyMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIyMzMtXHRcdFx0XHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMjczLSAqL1xubW0vdm1zY2FuLmM6MjI3NDpzdGF0aWMgYm9vbCBpbmFjdGl2ZV9pc19sb3coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGluYWN0aXZlX2xydSlcbm1tL3Ztc2Nhbi5jLTIyNzUte1xuLS1cbm1tL3Ztc2Nhbi5jPTIyOTM9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyOTktXG5tbS92bXNjYW4uYzoyMzAwOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjMwMS17XG4tLVxubW0vdm1zY2FuLmMtMjQ2My1cbm1tL3Ztc2Nhbi5jOjI0NjQ6c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9wcmVzc3VyZV9iYWxhbmNlKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtMjQ2NS1cdFx0XHRpbnQgc3dhcHBpbmVzcywgdTY0ICpmcmFjdGlvbiwgdTY0ICpkZW5vbWluYXRvcilcbi0tXG5tbS92bXNjYW4uYy0yNTAwLVxubW0vdm1zY2FuLmM6MjUwMTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy0yNTAyLVx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBzY2FuKVxuLS1cbm1tL3Ztc2Nhbi5jLTI1NjktICovXG5tbS92bXNjYW4uYzoyNTcwOnN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy0yNTcxLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKm5yKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTktICovXG5tbS92bXNjYW4uYzoyNzAwOnN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy0yNzAxLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNzEzLVxubW0vdm1zY2FuLmM6MjcxNDpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jLTI3MTUtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI3MTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNzE3LSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI3MTgtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI3MTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmMtMjcyMC0jZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbi0tXG5tbS92bXNjYW4uYy0yNzIyLVxubW0vdm1zY2FuLmM6MjcyMzpzdGF0aWMgYm9vbCBzaG91bGRfd2Fsa19tbXUodm9pZClcbm1tL3Ztc2Nhbi5jLTI3MjQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI3MjctXG5tbS92bXNjYW4uYzoyNzI4OnN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbm1tL3Ztc2Nhbi5jLTI3Mjkte1xuLS1cbm1tL3Ztc2Nhbi5jLTI3NjMtXG5tbS92bXNjYW4uYzoyNzY0OnN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTI3NjUte1xuLS1cbm1tL3Ztc2Nhbi5jLTI3ODMtXG5tbS92bXNjYW4uYzoyNzg0OnN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTI3ODUte1xuLS1cbm1tL3Ztc2Nhbi5jLTI4MDItXG5tbS92bXNjYW4uYzoyODAzOnN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbm1tL3Ztc2Nhbi5jLTI4MDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI4MDctXG5tbS92bXNjYW4uYzoyODA4OnN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0yODA5LXtcbi0tXG5tbS92bXNjYW4uYy0yODQ5LVxubW0vdm1zY2FuLmM6Mjg1MDpzdGF0aWMgaW5saW5lIGludCBmaWx0ZXJfZ2VuX2Zyb21fc2VxKHVuc2lnbmVkIGxvbmcgc2VxKVxubW0vdm1zY2FuLmMtMjg1MS17XG4tLVxubW0vdm1zY2FuLmMtMjg1NC1cbm1tL3Ztc2Nhbi5jOjI4NTU6c3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAqa2V5KVxubW0vdm1zY2FuLmMtMjg1Ni17XG4tLVxubW0vdm1zY2FuLmMtMjg2NC1cbm1tL3Ztc2Nhbi5jOjI4NjU6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NjYtXHRcdFx0ICAgICAgdm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODgwLVxubW0vdm1zY2FuLmM6Mjg4MTpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODgyLVx0XHRcdFx0dm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbm1tL3Ztc2Nhbi5jLTI5MDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjEtXG5tbS92bXNjYW4uYzoyOTIyOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yOTIzLXtcbi0tXG5tbS92bXNjYW4uYy0yOTM3LVxubW0vdm1zY2FuLmM6MjkzODpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKmdldF9tbV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0yOTM5LXtcbi0tXG5tbS92bXNjYW4uYy0yOTQyLVxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTI5NDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NjEtXG5tbS92bXNjYW4uYzoyOTYyOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTYzLXtcbi0tXG5tbS92bXNjYW4uYy0yOTg4LVxubW0vdm1zY2FuLmM6Mjk4OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk5MC17XG4tLVxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMzAzMC17XG4tLVxubW0vdm1zY2FuLmMtMzA1OS1cbm1tL3Ztc2Nhbi5jOjMwNjA6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTMwNjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjQtXG5tbS92bXNjYW4uYzozMDY1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTMwNjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjktXG5tbS92bXNjYW4uYzozMDcwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMzA3MS17XG4tLVxubW0vdm1zY2FuLmMtMzA3Ni1cbm1tL3Ztc2Nhbi5jOjMwNzc6c3RhdGljIHZvaWQgcmVzZXRfbW1fc3RhdHMoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaywgYm9vbCBsYXN0KVxubW0vdm1zY2FuLmMtMzA3OC17XG4tLVxubW0vdm1zY2FuLmMtMzEwMS1cbm1tL3Ztc2Nhbi5jOjMxMDI6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxubW0vdm1zY2FuLmMtMzEwMy17XG4tLVxubW0vdm1zY2FuLmMtMzE2NS1cbm1tL3Ztc2Nhbi5jOjMxNjY6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0X25vd2FsayhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxKVxubW0vdm1zY2FuLmMtMzE2Ny17XG4tLVxubW0vdm1zY2FuLmM9MzIxMj1zdHJ1Y3QgY3RybF9wb3Mge1xuLS1cbm1tL3Ztc2Nhbi5jLTMyMTctXG5tbS92bXNjYW4uYzozMjE4OnN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxubW0vdm1zY2FuLmMtMzIxOS1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuLS1cbm1tL3Ztc2Nhbi5jLTMyMzYtXG5tbS92bXNjYW4uYzozMjM3OnN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxubW0vdm1zY2FuLmMtMzIzOC17XG4tLVxubW0vdm1zY2FuLmMtMzI3Mi1cbm1tL3Ztc2Nhbi5jOjMyNzM6c3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbm1tL3Ztc2Nhbi5jLTMyNzQte1xuLS1cbm1tL3Ztc2Nhbi5jLTMyODgtLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG5tbS92bXNjYW4uYzozMjg5OnN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtMzI5MC17XG4tLVxubW0vdm1zY2FuLmMtMzMxNy1cbm1tL3Ztc2Nhbi5jOjMzMTg6c3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbm1tL3Ztc2Nhbi5jLTMzMTkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNDUtLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbm1tL3Ztc2Nhbi5jOjMzNDY6c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTMzNDcte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNTgtXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0zMzYwLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbi0tXG5tbS92bXNjYW4uYy0zMzc0LVxubW0vdm1zY2FuLmM6MzM3NTpzdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMzc2LXtcbi0tXG5tbS92bXNjYW4uYy0zNDAxLVxubW0vdm1zY2FuLmM6MzQwMjpzdGF0aWMgaW50IHNob3VsZF9za2lwX3ZtYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKmFyZ3MpXG5tbS92bXNjYW4uYy0zNDAzLXtcbi0tXG5tbS92bXNjYW4uYy0zNDQ3LSAqL1xubW0vdm1zY2FuLmM6MzQ0ODpzdGF0aWMgYm9vbCBnZXRfbmV4dF92bWEodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtbV93YWxrICphcmdzLFxubW0vdm1zY2FuLmMtMzQ0OS1cdFx0XHQgdW5zaWduZWQgbG9uZyAqdm1fc3RhcnQsIHVuc2lnbmVkIGxvbmcgKnZtX2VuZClcbi0tXG5tbS92bXNjYW4uYy0zNDczLVxubW0vdm1zY2FuLmM6MzQ3NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcHRlX3BmbihwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS92bXNjYW4uYy0zNDc1LVx0XHRcdFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtMzQ5OC1cbm1tL3Ztc2Nhbi5jOjM0OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3BtZF9wZm4ocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vdm1zY2FuLmMtMzUwMC1cdFx0XHRcdCBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1MjAtXG5tbS92bXNjYW4uYzozNTIxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmdldF9wZm5fZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTM1MjItXHRcdFx0XHQgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1MzktXG5tbS92bXNjYW4uYzozNTQwOnN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG5tbS92bXNjYW4uYy0zNTQxLXtcbi0tXG5tbS92bXNjYW4uYy0zNTQ3LVxubW0vdm1zY2FuLmM6MzU0ODpzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM1NDktXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1NzEtXG5tbS92bXNjYW4uYzozNTcyOnN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzU3My1cdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYy0zNjYyLVxubW0vdm1zY2FuLmM6MzY2MzpzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM2NjQtXHRcdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzLCB1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGxvbmcgKmZpcnN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTM3NTAtXG5tbS92bXNjYW4uYzozNzUxOnN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzc1Mi1cdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYy0zODIzLVxubW0vdm1zY2FuLmM6MzgyNDpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzgyNS1cdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NjUtXG5tbS92bXNjYW4uYzozODY2OnN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zODY3LXtcbi0tXG5tbS92bXNjYW4uYy0zOTAwLVxubW0vdm1zY2FuLmM6MzkwMTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbm1tL3Ztc2Nhbi5jLTM5MDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MjAtXG5tbS92bXNjYW4uYzozOTIxOnN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM5MjIte1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MzMtXG5tbS92bXNjYW4uYzozOTM0OnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbm1tL3Ztc2Nhbi5jLTM5MzUtXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4tLVxubW0vdm1zY2FuLmMtMzk0Ni1cbm1tL3Ztc2Nhbi5jOjM5NDc6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy0zOTQ4LXtcbi0tXG5tbS92bXNjYW4uYy00MDI4LVxubW0vdm1zY2FuLmM6NDAyOTpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbm1tL3Ztc2Nhbi5jLTQwMzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQwODAtXG5tbS92bXNjYW4uYzo0MDgxOnN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtNDA4Mi17XG4tLVxubW0vdm1zY2FuLmMtNDE0NS1cbm1tL3Ztc2Nhbi5jOjQxNDY6c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy00MTQ3LVx0XHRcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyMDMtXG5tbS92bXNjYW4uYzo0MjA0OnN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDIwNS17XG4tLVxubW0vdm1zY2FuLmMtNDIyOS1cbm1tL3Ztc2Nhbi5jOjQyMzA6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy00MjMxLXtcbi0tXG5tbS92bXNjYW4uYy00MjQ4LVxubW0vdm1zY2FuLmM6NDI0OTpzdGF0aWMgYm9vbCBscnV2ZWNfaXNfc2l6YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDI1MC17XG4tLVxubW0vdm1zY2FuLmMtNDI2MC1cbm1tL3Ztc2Nhbi5jOjQyNjE6c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy00MjYyLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG1pbl90dGwpXG4tLVxubW0vdm1zY2FuLmM9NDI4Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnVfZ2VuX21pbl90dGwgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTQyODQtXG5tbS92bXNjYW4uYzo0Mjg1OnN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00Mjg2LXtcbi0tXG5tbS92bXNjYW4uYy00MzMxLSAqL1xubW0vdm1zY2FuLmM6NDMzMjpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MzMzLXtcbi0tXG5tbS92bXNjYW4uYz00NDUwPWVudW0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NTctXG5tbS92bXNjYW4uYzo0NDU4OnN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxubW0vdm1zY2FuLmMtNDQ1OS17XG4tLVxubW0vdm1zY2FuLmMtNDUwNS1cbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA3LXtcbi0tXG5tbS92bXNjYW4uYy00NTMwLVxubW0vdm1zY2FuLmM6NDUzMTp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMyLXtcbi0tXG5tbS92bXNjYW4uYy00NTQxLVxubW0vdm1zY2FuLmM6NDU0Mjp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQzLXtcbi0tXG5tbS92bXNjYW4uYy00NTY3LVxubW0vdm1zY2FuLmM6NDU2ODp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1Njkte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NzYtXG5tbS92bXNjYW4uYzo0NTc3OmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTc4LXtcbi0tXG5tbS92bXNjYW4uYy00NTg5LVxubW0vdm1zY2FuLmM6NDU5MDpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTQ1OTEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNDYyMy0gKi9cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY1NQoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX3NlcV93cml0ZWAgYW5kIGl0cyBDb25uZWN0aW9ucyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgc3RhdGljIGZpbGUgb3BlcmF0aW9uIGhhbmRsZXIg4oCTIEkgZ2V0IHRoYXQuIEJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgVk0gc2Nhbm5pbmcgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRoYXQgYXJlIHNvbWVob3cgcmVsYXRlZCB0byBgbHJ1X2dlbmAgb3IsIG1vcmUgYnJvYWRseSwgdGhlIFZNIHNjYW4gaXRzZWxmLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBjb25uZWN0aW9uLCBhbmQgSSBuZWVkIHRvIG1hcCBpdC4gVGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24uIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBpdCBhbmQgbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBvciBiZSBjYWxsZWQgYnkgdGhpcyBzdGF0aWMgaGFuZGxlci4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZSByZWxhdGlvbnNoaXAgaXMgbGlrZWx5IHRoZXJlIGFuZCBJIHdpbGwgZmluZCB0aGUgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIFthLXpBLVowLTlfXSYjNDM7fF51bnNpZ25lZCBsb25nIFthLXpBLVowLTlfXSYjNDM7fF5pbnQgW2EtekEtWjAtOV9dJiM0Mzt8XmJvb2wgW2EtekEtWjAtOV9dJiM0MzsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMTI9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyMC0gKi9cbm1tL3Ztc2Nhbi5jOjIyMTppbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjIyLVxuLS1cbm1tL3Ztc2Nhbi5jPTM2NT1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtMzk0LSAqL1xubW0vdm1zY2FuLmM6Mzk1OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbm1tL3Ztc2Nhbi5jLTM5Ni17XG4tLVxubW0vdm1zY2FuLmMtNDEzLSAqL1xubW0vdm1zY2FuLmM6NDE0OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbm1tL3Ztc2Nhbi5jLTQxNS17XG4tLVxubW0vdm1zY2FuLmM9NDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRyb3Bfc2xhYl9ub2RlKGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDQxLVxubW0vdm1zY2FuLmM6NDQyOnZvaWQgZHJvcF9zbGFiKHZvaWQpXG5tbS92bXNjYW4uYy00NDMte1xuLS1cbm1tL3Ztc2Nhbi5jPTUwMz1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy01MzAtXG5tbS92bXNjYW4uYzo1MzE6dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcbm1tL3Ztc2Nhbi5jLTUzMi17XG4tLVxubW0vdm1zY2FuLmMtNjA0LSAqL1xubW0vdm1zY2FuLmM6NjA1OnZvaWQgX19hY2N0X3JlY2xhaW1fd3JpdGViYWNrKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy02MDYtXHRcdFx0XHRcdFx0XHRpbnQgbnJfdGhyb3R0bGVkKVxuLS1cbm1tL3Ztc2Nhbi5jPTgxOD1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3Ztc2Nhbi5jLTg0MC0gKi9cbm1tL3Ztc2Nhbi5jOjg0MTp2b2lkIGZvbGlvX3B1dGJhY2tfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS92bXNjYW4uYy04NDIte1xuLS1cbm1tL3Ztc2Nhbi5jPTE2OTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0xODE1LSAqL1xubW0vdm1zY2FuLmM6MTgxNjpib29sIGZvbGlvX2lzb2xhdGVfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS92bXNjYW4uYy0xODE3LXtcbi0tXG5tbS92bXNjYW4uYz0yMTc0PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE5OC1cbm1tL3Ztc2Nhbi5jOjIxOTk6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG5tbS92bXNjYW4uYy0yMjAwLXtcbi0tXG5tbS92bXNjYW4uYz0yOTQzPXN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NjEtXG5tbS92bXNjYW4uYzoyOTYyOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTYzLXtcbi0tXG5tbS92bXNjYW4uYy0yOTg4LVxubW0vdm1zY2FuLmM6Mjk4OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk5MC17XG4tLVxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMzAzMC17XG4tLVxubW0vdm1zY2FuLmM9NDI4NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQzMzEtICovXG5tbS92bXNjYW4uYzo0MzMyOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQzMzMte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDUwNS1cbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA3LXtcbi0tXG5tbS92bXNjYW4uYy00NTMwLVxubW0vdm1zY2FuLmM6NDUzMTp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMyLXtcbi0tXG5tbS92bXNjYW4uYy00NTQxLVxubW0vdm1zY2FuLmM6NDU0Mjp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQzLXtcbi0tXG5tbS92bXNjYW4uYy00NTY3LVxubW0vdm1zY2FuLmM6NDU2ODp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1Njkte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NzYtXG5tbS92bXNjYW4uYzo0NTc3OmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTc4LXtcbi0tXG5tbS92bXNjYW4uYz00NTkwPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MjMtICovXG5tbS92bXNjYW4uYzo0NjI0OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyNS17XG4tLVxubW0vdm1zY2FuLmM9NDY2NT1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2OTUtXG5tbS92bXNjYW4uYzo0Njk2OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5tbS92bXNjYW4uYy00Njk3LXtcbi0tXG5tbS92bXNjYW4uYz01OTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcbi0tXG5tbS92bXNjYW4uYy01OTM0LVxubW0vdm1zY2FuLmM6NTkzNTp2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxubW0vdm1zY2FuLmMtNTkzNi17XG4tLVxubW0vdm1zY2FuLmMtNTk0Ni1cbm1tL3Ztc2Nhbi5jOjU5NDc6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTU5NDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NjgtXG5tbS92bXNjYW4uYzo1OTY5OnZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTU5NzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NzktXG5tbS92bXNjYW4uYzo1OTgwOnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTU5ODEte1xuLS1cbm1tL3Ztc2Nhbi5jPTY3NjU9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjg0NC1cbm1tL3Ztc2Nhbi5jOjY4NDU6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02ODQ2LVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTAtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg5MTp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg5Mi1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjkzMC1cbm1tL3Ztc2Nhbi5jOjY5MzE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY5MzItXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjk3MS0jZWxzZVxubW0vdm1zY2FuLmM6Njk3Mjp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjk3My1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03NTY4PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4tLVxubW0vdm1zY2FuLmMtNzY0OC0gKi9cbm1tL3Ztc2Nhbi5jOjc2NDk6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc2NTAtXHRcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NjkzLVxubW0vdm1zY2FuLmM6NzY5NDp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxubW0vdm1zY2FuLmMtNzY5NS17XG4tLVxubW0vdm1zY2FuLmMtNzcwNi0gKi9cbm1tL3Ztc2Nhbi5jOjc3MDc6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NzA4LVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzcxNC1cbm1tL3Ztc2Nhbi5jOjc3MTU6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxubW0vdm1zY2FuLmMtNzcxNi17XG4tLVxubW0vdm1zY2FuLmMtNzcyOC0gKi9cbm1tL3Ztc2Nhbi5jOjc3Mjk6dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG5tbS92bXNjYW4uYy03NzMwLXtcbi0tXG5tbS92bXNjYW4uYy03NzYxLSAqL1xubW0vdm1zY2FuLmM6Nzc2Mjp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXG5tbS92bXNjYW4uYy03NzYzLXtcbi0tXG5tbS92bXNjYW4uYy03Nzg1LSAqL1xubW0vdm1zY2FuLmM6Nzc4Njp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxubW0vdm1zY2FuLmMtNzc4Ny17XG4tLVxubW0vdm1zY2FuLmM9NzgzMj1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbi0tXG5tbS92bXNjYW4uYy03ODQwLSAqL1xubW0vdm1zY2FuLmM6Nzg0MTppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTc4NDItXG4tLVxubW0vdm1zY2FuLmMtNzg1My0gKi9cbm1tL3Ztc2Nhbi5jOjc4NTQ6aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xubW0vdm1zY2FuLmMtNzg1NS1cbi0tXG5tbS92bXNjYW4uYy03ODU5LSAqL1xubW0vdm1zY2FuLmM6Nzg2MDppbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbm1tL3Ztc2Nhbi5jLTc4NjEtXG4tLVxubW0vdm1zY2FuLmM9NzkwOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NTEtXG5tbS92bXNjYW4uYzo3OTUyOnVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bXNjYW4uYy03OTUzLXtcbi0tXG5tbS92bXNjYW4uYz04MDI4PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy04MDMzLVxubW0vdm1zY2FuLmM6ODAzNDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy04MDM1LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy04MTQ4LSAqL1xubW0vdm1zY2FuLmM6ODE0OTp2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxubW0vdm1zY2FuLmMtODE1MC17XG4tLVxubW0vdm1zY2FuLmM9ODE5Nz1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG5tbS92bXNjYW4uYzo4MTk4OmludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG5tbS92bXNjYW4uYy04MTk5LXtcbi0tXG5tbS92bXNjYW4uYy04MjAyLVxubW0vdm1zY2FuLmM6ODIwMzp2b2lkIHJlY2xhaW1fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxubW0vdm1zY2FuLmMtODIwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzQ1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIExSVSBHZW5lcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhbWF0aW9uOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtYXhfbHJ1X2dlbl9tZW1jZ2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2dgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gU2VlbXMgbGlrZSBhIHdob2xlIGVjb3N5c3RlbSBvZiByZWNsYW1hdGlvbiBzdHJhdGVnaWVzIGlzIGF0IHBsYXkgaGVyZSwgY2VudGVyZWQgYXJvdW5kIHRoaXMgTFJVIGdlbmVyYXRpb24gY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGJlaGluZCB0aGlzLiBEaWdnaW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBJIHNlZSB0aGUgY29yZSBgY29uZmlnIExSVV9HRU5gIGRlZmluZWQsIGFsb25nIHdpdGggYGNvbmZpZyBMUlVfR0VOX0VOQUJMRURgIHdoaWNoIGltcGxpZXMgdGhpcyBpcyBsaWtlbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBgY29uZmlnIExSVV9HRU5fU1RBVFNgIGlzIGludGVyZXN0aW5nLCBmdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmcuLi4gdGhhdCYjMzk7cyBhbHdheXMgaGVscGZ1bC4gQW5kIGZpbmFsbHksIGBjb25maWcgTFJVX0dFTl9XQUxLU19NTVVgIGlzIGEgcG9pbnQgb2YgY29uY2VybiAtIHRoZSBNTVUgaW50ZXJhY3Rpb24gY2FuIGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGxvb2tpbmcgYXQgdGhlIGFyY2hpdGVjdHVyZS4KCkZpbmFsbHksIEkmIzM5O20ganVzdCBjdXJpb3VzIC0gaXMgYEFSQ0hfSEFTX1BSRUZFVENIV2AgZXZlbiBhIGNvbmZpZz8gSSBzaG91bGQgZ3JlcCB0aGUgS2NvbmZpZyB0byBiZSBzdXJlLCBpbiBjYXNlIHRoaXMgaW1wYWN0cyB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX0hBU19QUkVGRVRDSFcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zNT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00NC0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjQ1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQ2LVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTExMT1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqcHRyKVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTExOC0jaWYgX19MSU5VWF9BUk1fQVJDSF9fIFx1MDAzZT0gNyBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTE5OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0xMjAtc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICpwdHIpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKnB0cilcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQwMC1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NDAxOiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQwMi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKnB0cilcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xOTk9dW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIxNS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIxNjojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMjE3LSNkZWZpbmUgcHJlZmV0Y2h3KHgpIF9fYnVpbHRpbl9wcmVmZXRjaCgoeCksIDEsIDEpXG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTM2MT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM4OC1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozODk6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zOTAtI2RlZmluZSBwcmVmZXRjaHcoeCkgX19idWlsdGluX3ByZWZldGNoKCh4KSwgMSwgMSlcbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oPTIzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICphZGRyKVxuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3ByZWZldGNoLmgtMzQtI2lmZGVmIENPTkZJR19QQTIwXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oOjM1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oLTM2LXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9Mzk0PWludCB2YWxpZGF0ZV9zcF9zaXplKHVuc2lnbmVkIGxvbmcgc3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNDAwLSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDo0MDE6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00MDItXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xNjk9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0xNzMtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjE3NDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0xNzUtc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICp4KVxuLS1cbmFyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmg9MTgxPWV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaC0xODktI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaDoxOTA6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcbmFyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgtMTkxLVxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0Lmg9MTc5PXVuc2lnbmVkIGxvbmcgX19nZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oLTE4OS0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oOjE5MDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaC0xOTEtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9NjI0PWV4dGVybiBjaGFyXHRcdFx0aWdub3JlX2ZwdV9pcnE7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNjI2LSNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NjI3OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC02MjgtXG4tLVxuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oPTE4PXN0cnVjdCBwYWdlO1xuLS1cbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaC00MS1cbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaDo0MjojaWZuZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oLTQzLSNkZWZpbmUgcHJlZmV0Y2h3KHgpIF9fYnVpbHRpbl9wcmVmZXRjaCh4LDEpXG4tLVxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtMTgzLVxubW0vdm1zY2FuLmM6MTg0OiNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbm1tL3Ztc2Nhbi5jLTE4NS1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzU5CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDU2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTUdMUlUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBkZWZpbml0aW9uIG9mIGBBUkNIX0hBU19QUkVGRVRDSFdgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHByZWZldGNoaW5nIG9wdGltaXphdGlvbnMsIGFuZCB3aGVyZSB0aGF0IGxpdmVzIChpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhlYWRlcnMpLiBJJiMzOTttIGFsc28gY29uZmlybWluZyB0aGF0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgb2YgY291cnNlLCBhbmQgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBgTUVNQ0dgIHBsYXlzIGEgcm9sZSBpbiBtZW1jZyBMUlUgZ2VuIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTFJVX0dFTmA7IGl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBNTVUsIGFuZCBpdCYjMzk7cyBjb250aW5nZW50IG9uIGJpdCBhdmFpbGFiaWxpdHkgd2l0aGluIGBmb2xpby0mZ3Q7ZmxhZ3NgIGFuZCB0aGVuIGVpdGhlciBgNjRCSVRgIG9yIHRoZSBTUEFSU0VNRU0gY29uZmlndXJhdGlvbi4gVGhlIHByZXNlbmNlIG9mIGBMUlVfR0VOX0VOQUJMRURgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgZGVwZW5kaW5nIG9ubHkgb24gYExSVV9HRU5gLgoKTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb2RlIGNoYW5nZXMgdGhlbXNlbHZlcy4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBtb2RpZmljYXRpb25zLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIHNlZWluZyBhcmUgdGhpbmdzIGxpa2UgYGluY19taW5fc2VxYCwgYF9fZm9saW9faW5jX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYGZsdXNoX2xydV9iYXRjaGAsIGBwcmVmZXRjaHdfcHJldl9scnVfZm9saW9gLCBhbmQgYHByZWZldGNod19uZXh0X2xydV9mb2xpb2AuIEkgc2VlIHRoYXQgdGhlIGNvcmUgTFJVIGdlbiBmdW5jdGlvbnMgbGlrZSBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgZmx1c2hfbHJ1X2JhdGNoYCwgYW5kIGBpbmNfbWluX3NlcWAgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGBtbS92bXNjYW4uY2AuIFNvIEkgd2lsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0LCBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0byBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC4gSSBzZWUgdGhlIGZ1bmN0aW9ucyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBtYXhfbHJ1X2dlbl9tZW1jZ2AsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24uCgpUbyB3cmFwIHRoaXMgdXAsIEkgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O20gZ29pbmcgdG8gdGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAgYmVjYXVzZSBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIE1HTFJVIGZvbGlvIG1hbmFnZW1lbnQgYW5kIExSVSBsaXN0IG1hbmlwdWxhdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgcmVmYWN0b3JpbmcgYGluY19taW5fc2VxYCB0byBiYXRjaCBMUlUgbGlzdCBtYW5pcHVsYXRpb25zLCB3aGljaCBjYW4gaGF2ZSBpbnRlcmVzdGluZyBlZmZlY3RzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBgWyYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7XWAuIEZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgWyYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LCAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0O11gLiBXaXRoIGFsbCBvZiB0aGlzIGluIGhhbmQsIEkgY2FuIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttYXhfbHJ1X2dlbl9tZW1jZyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGFnaW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMuIFNwZWNpZmljYWxseSwgaW5jX21pbl9zZXEgYW5kIGZvbGlvX2luY19nZW4gYXJlIHVwZGF0ZWQgdG8gYmF0Y2ggbGlzdCBzcGxpY2luZyAodmlhIGZsdXNoX2xydV9iYXRjaCkgYW5kIGdlbmVyYXRpb24gYWNjb3VudGluZywgY2hhbmdpbmcgaG93IGZvbGlvcyBhcmUgbW92ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIExSVSBhZ2luZyBhbmQgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludm9sdmUgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcyAoc3RydWN0IGZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkLCBhbmQgZ2VuZXJhdGlvbiBjb3VudGVycy9mbGFncykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgZ2VuX2luY3JlYXNlZCwgZGVsdGEsIGJhdGNoX2VuZCwgYW5kIHRoZSBtb3ZhYmxlIGxpc3QgaGVhZCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzeXNjYWxsL2lvY3RsL3NvY2tldCBib3VuZGFyaWVzLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxpbmtlZCBsaXN0IGNvcnJ1cHRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFjY291bnRpbmcgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgQ09ORklHX0RFQlVHX0xJU1QsIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNjI4YTEwYjk4ZjVmODRmYjI0MTFlZjM2ZWJiOWJjZGRmYmM3ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDExOjA5OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi43OWRlZmJiNDRjNmU0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTgyLDE3ICYjNDM7MTgyLDM3IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wgewogfTsKIAogI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIVwotI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICgoX2ZvbGlvKS0mZ3Q7bHJ1LnByZXYgIT0gX2Jhc2UpIHsJCQlcCi0JCQlzdHJ1Y3QgZm9saW8gKnByZXY7CQkJCVwKLQkJCQkJCQkJCVwKLQkJCXByZXYgPSBscnVfdG9fZm9saW8oJmFtcDsoX2ZvbGlvLSZndDtscnUpKTsJCVwKLQkJCXByZWZldGNodygmYW1wO3ByZXYtJmd0O19maWVsZCk7CQkJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCiYjNDM7ewomIzQzOwlpZiAoZm9saW8tJmd0O2xydS5wcmV2ICE9IGJhc2UpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqcHJldjsKJiM0MzsKJiM0MzsJCXByZXYgPSBscnVfdG9fZm9saW8oJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKJiM0MzsJCXByZWZldGNodygmYW1wO3ByZXYtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQomIzQzO3sKJiM0MzsJaWYgKGZvbGlvLSZndDtscnUubmV4dCAhPSBiYXNlKSB7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKm5leHQ7CiYjNDM7CiYjNDM7CQluZXh0ID0gbGlzdF9lbnRyeShmb2xpby0mZ3Q7bHJ1Lm5leHQsIHN0cnVjdCBmb2xpbywgbHJ1KTsKJiM0MzsJCXByZWZldGNodygmYW1wO25leHQtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzO30KICNlbHNlCi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqYmFzZSkKJiM0Mzt7CiYjNDM7fQogI2VuZGlmCiAKIC8qCkBAIC0xNjk1LDcgJiM0MzsxNzE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCQlmb2xpbyA9IGxydV90b19mb2xpbyhzcmMpOwotCQlwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpOwomIzQzOwkJcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKGZvbGlvLCBzcmMpOwogCiAJCW5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCQl0b3RhbF9zY2FuICYjNDM7PSBucl9wYWdlczsKQEAgLTMyOTUsMjEgJiM0MzszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogfQogCi0vKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwotc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwotCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwotCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlpbnQgbmV3X2dlbjsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiAKIAlkbyB7CiAJCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCi0JCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pCiYjNDM7CQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiYjNDM7CQkJaWYgKGluY3JlYXNlZCkKJiM0MzsJCQkJKmluY3JlYXNlZCA9IGZhbHNlOwogCQkJcmV0dXJuIG5ld19nZW47CiYjNDM7CQl9CiAKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKQEAgLTMzMTcsOCAmIzQzOzMzMzcsMjIgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKIAl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJaWYgKGluY3JlYXNlZCkKJiM0MzsJCSppbmNyZWFzZWQgPSB0cnVlOwomIzQzOwlyZXR1cm4gbmV3X2dlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi8KJiM0MztzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiYjNDM7CXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJYm9vbCBnZW5faW5jcmVhc2VkOwogCiYjNDM7CW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CWlmIChnZW5faW5jcmVhc2VkKQomIzQzOwkJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAlyZXR1cm4gbmV3X2dlbjsKIH0KIApAQCAtMzg5Nyw2ICYjNDM7MzkzMSwxOSBAQCBzdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpCiAJCWtmcmVlKHdhbGspOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLAomIzQzOwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpCiYjNDM7ewomIzQzOwlMSVNUX0hFQUQobW92YWJsZSk7CiYjNDM7CiYjNDM7CWlmICghKmJhdGNoX2VuZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGlzdF9jdXRfcG9zaXRpb24oJmFtcDttb3ZhYmxlLCBoZWFkLCAqYmF0Y2hfZW5kKTsKJiM0MzsJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZhbXA7bW92YWJsZSwgZHN0KTsKJiM0MzsJKmJhdGNoX2VuZCA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiB7CiAJaW50IHpvbmU7CkBAIC0zOTA0LDYgJiM0MzszOTUxLDcgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiAJaW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwlpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKIAkvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqLwogCWlmICh0eXBlICZhbXA7JmFtcDsgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpKQpAQCAtMzkxMywzNSAmIzQzOzM5NjEsNjMgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiAJaWYgKCF0eXBlICZhbXA7JmFtcDsgIXN3YXBwaW5lc3MpCiAJCWdvdG8gZG9uZTsKIAomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIG9sZF9nZW4pICE9CiYjNDM7CQkJbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCB0YXJnZXRfZ2VuKSk7CiAJLyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovCiAJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXTsKIAkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3Nbb2xkX2dlbl1bdHlwZV1bem9uZV07CiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBoZWFkLSZndDtuZXh0OwomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDsKJiM0MzsJCWxvbmcgZGVsdGEgPSAwOwogCi0JCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCXdoaWxlIChwb3MgIT0gaGVhZCkgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJCWxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCQlpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTsKIAkJCWJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJYm9vbCBnZW5faW5jcmVhc2VkOwogCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTsKIAotCQkJbmV3X2dlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbyk7Ci0JCQlsaXN0X21vdmVfdGFpbCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pOwomIzQzOwkJCXByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCk7CiYjNDM7CQkJcG9zID0gcG9zLSZndDtuZXh0OwomIzQzOwkJCW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBJZiBnZW5faW5jcmVhc2VkIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHJvbW90aW9uLiBQdXQgZm9saW9zCiYjNDM7CQkJICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdAomIzQzOwkJCSAqIHRoZSB0YWlsIG9mIHRoZSBzZWNvbmQtb2xkZXN0IGdlbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoZ2VuX2luY3JlYXNlZCkgewomIzQzOwkJCQlkZWx0YSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CQkJCWJhdGNoX2VuZCA9ICZhbXA7Zm9saW8tJmd0O2xydTsKIAotCQkJLyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqLwotCQkJaWYgKHJlZnMgJiM0Mzsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICYjNDM7IDEpIHsKLQkJCQlpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTsKLQkJCQlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQkJCS8qIGRvbiYjMzk7dCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi8KJiM0MzsJCQkJaWYgKHJlZnMgJiM0Mzsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICYjNDM7IDEpIHsKJiM0MzsJCQkJCWludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpOwogCi0JCQkJV1JJVEVfT05DRShscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSwKLQkJCQkJICAgbHJ1Z2VuLSZndDtwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gJiM0MzsgZGVsdGEpOwomIzQzOwkJCQkJV1JJVEVfT05DRShscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSwKJiM0MzsJCQkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBucl9wYWdlcyk7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlmbHVzaF9scnVfYmF0Y2goaGVhZCwgJmFtcDtiYXRjaF9lbmQsIHRhcmdldF9saXN0KTsKJiM0MzsJCQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiAJCQl9Ci0KIAkJCWlmICghLS1yZW1haW5pbmcpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlicmVhazsKIAkJfQomIzQzOwkJZmx1c2hfbHJ1X2JhdGNoKGhlYWQsICZhbXA7YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sCiYjNDM7CQkJICAgbHJ1Z2VuLSZndDtucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTsKJiM0MzsJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSwKJiM0MzsJCQkgICBscnVnZW4tJmd0O25yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICYjNDM7IGRlbHRhKTsKJiM0MzsJCWlmICghcmVtYWluaW5nKQomIzQzOwkJCXJldHVybiBmYWxzZTsKIAl9CiBkb25lOgogCXJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODA2CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDEyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBtbS92bXNjYW4uYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRvIGBtbS92bXNjYW4uY2AgYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBmaXJlIHVwIHRoZSBLTVNBTiBmdXp6aW5nIGVuZ2luZSBvciBpZiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAgd2lsbCBkbyB0aGUgdHJpY2suCgpGaXJzdCwgSSYjMzk7bSBzZWVpbmcgYSByZWZhY3RvcmluZyB3aXRoIGNoYW5nZXMgYXJvdW5kIHByZWZldGNoaW5nIGFuZCB0aGUgTFJVIGxpc3QgbWFuaXB1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGlubGluaW5nIGBwcmVmZXRjaHdgIGhlbHBlcnMsIHVwZGF0aW5nIGNhbGxzIGluIGBpc29sYXRlX2xydV9mb2xpb3NgLCBzcGxpdHRpbmcgYGZvbGlvX2luY19nZW5gLCBhbmQgYmF0Y2hpbmcgZm9saW8gbW92ZXMgd2l0aCBgZmx1c2hfbHJ1X2JhdGNoYCBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpIGNvZGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbGlzdCBtYW5pcHVsYXRpb24gKGBzdHJ1Y3QgbGlzdF9oZWFkYCwgYGZvbGlvLSZndDtscnVgKSwgZm9saW8gZmxhZ3MvZ2VuZXJhdGlvbiB0cmFja2luZyAoYGZvbGlvLSZndDtmbGFncy5mYCwgYGNtcHhjaGdgKSwgZm9saW8gYWNjb3VudGluZyAoYGxydWdlbi0mZ3Q7bnJfcGFnZXNgLCBgbHJ1Z2VuLSZndDtwcm90ZWN0ZWRgKSwgYW5kIG1lbW9yeSBwcmVmZXRjaGluZyAoYHByZWZldGNod2ApLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm8gbGVha3M/IExldCYjMzk7cyBjaGVjayBhZ2FpbnN0IG91ciBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKlVzZXItc3BhY2UgaW50ZXJhY3Rpb24/KiogTm8sIG5vdGhpbmcgaGVyZSBpcyB0b3VjaGluZyB1c2VyIHNwYWNlIHZpYSBjb3B5IG9wZXJhdGlvbnMsIHB1dCBvcGVyYXRpb25zLCBuZXRsaW5rLCBpb2N0bHMsIG9yIGFueXRoaW5nIHNpbWlsYXIuIE5vIHdvcnJpZXMgdGhlcmUuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBXZSBoYXZlIGEgYGJvb2wgZ2VuX2luY3JlYXNlZGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byBgX19mb2xpb19pbmNfZ2VuYCwgYnV0IGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZC4gYGJhdGNoX2VuZGAsIGBwb3NgLCBhbmQgYGRlbHRhYCBhcmUgYWxsIGluaXRpYWxpemVkIGFzIHdlbGwuIFNvLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IGhlcmUgZWl0aGVyLgozLiAgKipEYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbj8qKiBObyBuZXcgYWxsb2NhdGlvbnMsIHNvIHRoYXQmIzM5O3MgYSBub24taXNzdWUuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm8gY29uY2VybnMgd2l0aCB0aGF0IGhlcmUuCgpTbywgZnJvbSBteSBhc3Nlc3NtZW50LCB0aGVyZSBhcmVuJiMzOTt0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIG9yIGluZm8gbGVha3MgdGhhdCBuZWNlc3NpdGF0ZSBLTVNBTi4KCldoYXQgYWJvdXQgb3RoZXIgYnVncyB0aGF0IG1pZ2h0IGNyZWVwIGluPyBMaXN0IGNvcnJ1cHRpb24sIHBhZ2UgZmxhZyBjb3JydXB0aW9uLCByYWNlIGNvbmRpdGlvbnMsIGFjY291bnRpbmcgaW1iYWxhbmNlcywgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBhcmUgYWxsIHBvdGVudGlhbC4gSG93ZXZlciwgS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBsaWtlIENPTkZJR1xfREVCVUdcX0xJU1QgYW5kIFZNXF9XQVJOXF9PTlxfT05DRSwgYXJlIHdlbGwtc3VpdGVkIHRvIGNhdGNoIHRoZXNlIGlzc3Vlcy4gV2UgY2FuIGFsc28gdXNlIGRhdGEtcmFjZSBkZXRlY3RvcnMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gYGxpc3RfY3V0X3Bvc2l0aW9uYCBhbmQgYGZsdXNoX2xydV9iYXRjaGAsIGFzIHRoZXkgaW52b2x2ZSBsaXN0IG1hbmlwdWxhdGlvbi4gQWZ0ZXIgYSBicmllZiByZXZpZXcsIGl0IGlzIGNsZWFyIHRoYXQgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuCgpTbywgSSB0aGluayB3ZSYjMzk7cmUgZ29vZCB0byBwcm9jZWVkIHdpdGggc3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4uIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBpbnZva2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYW1hdGlvbiBtZWNoYW5pc20gaW4gbW0vdm1zY2FuLmMuIEl0IG9wdGltaXplcyB0aGUgZ2VuZXJhdGlvbiBpbmNyZW1lbnQgcGF0aCBhbmQgYmF0Y2gtbW92ZXMgZm9saW9zIGJldHdlZW4gTFJVIGdlbmVyYXRpb24gbGlzdHMgdXNpbmcgbGlzdF9jdXRfcG9zaXRpb24vbGlzdF9zcGxpY2VfdGFpbF9pbml0LCByZWZhY3RvcnMgZm9saW9faW5jX2dlbiAvIF9fZm9saW9faW5jX2dlbiwgYW5kIHVwZGF0ZXMgcHJlZmV0Y2ggaGVscGVycy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgKHN0cnVjdCBmb2xpbywgc3RydWN0IGxpc3RfaGVhZCwgYW5kIGdlbmVyYXRpb24gY291bnRlcnMvZmxhZ3MpLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGdlbl9pbmNyZWFzZWQsIGRlbHRhLCBiYXRjaF9lbmQsIGFuZCB0aGUgbW92YWJsZSBsaXN0IGhlYWQpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3lzY2FsbC9pb2N0bC9zb2NrZXQgYm91bmRhcmllcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsaW5rZWQgbGlzdCBjb3JydXB0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBhY2NvdW50aW5nIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIENPTkZJR19ERUJVR19MSVNULCBhbmQga2VybmVsIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludm9sdmUgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcyAoc3RydWN0IGZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkLCBhbmQgZ2VuZXJhdGlvbiBjb3VudGVycy9mbGFncykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgZ2VuX2luY3JlYXNlZCwgZGVsdGEsIGJhdGNoX2VuZCwgYW5kIHRoZSBtb3ZhYmxlIGxpc3QgaGVhZCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzeXNjYWxsL2lvY3RsL3NvY2tldCBib3VuZGFyaWVzLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxpbmtlZCBsaXN0IGNvcnJ1cHRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFjY291bnRpbmcgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgQ09ORklHX0RFQlVHX0xJU1QsIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjMxLjk5NTY3OTMyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzc2MDQ5NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFtYXRpb24gbWVjaGFuaXNtIGluIG1tL3Ztc2Nhbi5jLiBJdCBvcHRpbWl6ZXMgdGhlIGdlbmVyYXRpb24gaW5jcmVtZW50IHBhdGggYW5kIGJhdGNoLW1vdmVzIGZvbGlvcyBiZXR3ZWVuIExSVSBnZW5lcmF0aW9uIGxpc3RzIHVzaW5nIGxpc3RfY3V0X3Bvc2l0aW9uL2xpc3Rfc3BsaWNlX3RhaWxfaW5pdCwgcmVmYWN0b3JzIGZvbGlvX2luY19nZW4gLyBfX2ZvbGlvX2luY19nZW4sIGFuZCB1cGRhdGVzIHByZWZldGNoIGhlbHBlcnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgKHN0cnVjdCBmb2xpbywgc3RydWN0IGxpc3RfaGVhZCwgYW5kIGdlbmVyYXRpb24gY291bnRlcnMvZmxhZ3MpLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGdlbl9pbmNyZWFzZWQsIGRlbHRhLCBiYXRjaF9lbmQsIGFuZCB0aGUgbW92YWJsZSBsaXN0IGhlYWQpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3lzY2FsbC9pb2N0bC9zb2NrZXQgYm91bmRhcmllcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsaW5rZWQgbGlzdCBjb3JydXB0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBhY2NvdW50aW5nIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIENPTkZJR19ERUJVR19MSVNULCBhbmQga2VybmVsIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGFnaW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMuIFNwZWNpZmljYWxseSwgaW5jX21pbl9zZXEgYW5kIGZvbGlvX2luY19nZW4gYXJlIHVwZGF0ZWQgdG8gYmF0Y2ggbGlzdCBzcGxpY2luZyAodmlhIGZsdXNoX2xydV9iYXRjaCkgYW5kIGdlbmVyYXRpb24gYWNjb3VudGluZywgY2hhbmdpbmcgaG93IGZvbGlvcyBhcmUgbW92ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIExSVSBhZ2luZyBhbmQgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MDk6MzEuOTk1Njg1Mjg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIwMzQzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZDYyOGExMGI5OGY1Zjg0ZmIyNDExZWYzNmViYjliY2RkZmJjN2RlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTE6MDk6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xODIsMTcgKzE4MiwzNyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gfTtcXG4gXFxuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVxcdFxcdFxcdFxcXFxcXG4tXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0aWYgKChfZm9saW8pLVxcdTAwM2VscnUucHJldiAhPSBfYmFzZSkge1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpwcmV2O1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRwcmV2ID0gbHJ1X3RvX2ZvbGlvKFxcdTAwMjYoX2ZvbGlvLVxcdTAwM2VscnUpKTtcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdHByZWZldGNodyhcXHUwMDI2cHJldi1cXHUwMDNlX2ZpZWxkKTtcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdH0gd2hpbGUgKDApXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcXG4re1xcbitcXHRpZiAoZm9saW8tXFx1MDAzZWxydS5wcmV2ICE9IGJhc2UpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpwcmV2O1xcbitcXG4rXFx0XFx0cHJldiA9IGxydV90b19mb2xpbyhcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuK1xcdFxcdHByZWZldGNodyhcXHUwMDI2cHJldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcXG4re1xcbitcXHRpZiAoZm9saW8tXFx1MDAzZWxydS5uZXh0ICE9IGJhc2UpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpuZXh0O1xcbitcXG4rXFx0XFx0bmV4dCA9IGxpc3RfZW50cnkoZm9saW8tXFx1MDAzZWxydS5uZXh0LCBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdHByZWZldGNodyhcXHUwMDI2bmV4dC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4gI2Vsc2VcXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuK3tcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIC8qXFxuQEAgLTE2OTUsNyArMTcxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcbiBcXHRcXHRmb2xpbyA9IGxydV90b19mb2xpbyhzcmMpO1xcbi1cXHRcXHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpO1xcbitcXHRcXHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYyk7XFxuIFxcbiBcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0XFx0dG90YWxfc2NhbiArPSBucl9wYWdlcztcXG5AQCAtMzI5NSwyMSArMzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxcbiBcXHRyZXR1cm4gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4gfVxcbiBcXG4tLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcXG4ge1xcbi1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4tXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4tXFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbitcXHRpbnQgbmV3X2dlbjtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4rXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcXG4rXFx0XFx0XFx0aWYgKGluY3JlYXNlZClcXG4rXFx0XFx0XFx0XFx0KmluY3JlYXNlZCA9IGZhbHNlO1xcbiBcXHRcXHRcXHRyZXR1cm4gbmV3X2dlbjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4gXFxuQEAgLTMzMTcsOCArMzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0aWYgKGluY3JlYXNlZClcXG4rXFx0XFx0KmluY3JlYXNlZCA9IHRydWU7XFxuK1xcdHJldHVybiBuZXdfZ2VuO1xcbit9XFxuK1xcbisvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbitcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4rXFx0Ym9vbCBnZW5faW5jcmVhc2VkO1xcbiBcXG4rXFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xcbitcXHRpZiAoZ2VuX2luY3JlYXNlZClcXG4rXFx0XFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4gXFx0cmV0dXJuIG5ld19nZW47XFxuIH1cXG4gXFxuQEAgLTM4OTcsNiArMzkzMSwxOSBAQCBzdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXFxuIFxcdFxcdGtmcmVlKHdhbGspO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdClcXG4re1xcbitcXHRMSVNUX0hFQUQobW92YWJsZSk7XFxuK1xcbitcXHRpZiAoISpiYXRjaF9lbmQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZtb3ZhYmxlLCBoZWFkLCAqYmF0Y2hfZW5kKTtcXG4rXFx0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFxcdTAwMjZtb3ZhYmxlLCBkc3QpO1xcbitcXHQqYmF0Y2hfZW5kID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxuIHtcXG4gXFx0aW50IHpvbmU7XFxuQEAgLTM5MDQsNiArMzk1MSw3IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuIFxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbitcXHRpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4gXFxuIFxcdC8qIEZvciBmaWxlIHR5cGUsIHNraXAgdGhlIGNoZWNrIGlmIHN3YXBwaW5lc3MgaXMgYW5vbiBvbmx5ICovXFxuIFxcdGlmICh0eXBlIFxcdTAwMjZcXHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcXG5AQCAtMzkxMywzNSArMzk2MSw2MyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0aWYgKCF0eXBlIFxcdTAwMjZcXHUwMDI2ICFzd2FwcGluZXNzKVxcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRShscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIG9sZF9nZW4pICE9XFxuK1xcdFxcdFxcdGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgdGFyZ2V0X2dlbikpO1xcbiBcXHQvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi9cXG4gXFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xcbitcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBoZWFkLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xcbitcXHRcXHRsb25nIGRlbHRhID0gMDtcXG4gXFxuLVxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xcbitcXHRcXHR3aGlsZSAocG9zICE9IGhlYWQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcdFxcdFxcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xcbiBcXHRcXHRcXHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRcXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuIFxcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdG5ld19nZW4gPSBmb2xpb19pbmNfZ2VuKGxydXZlYywgZm9saW8pO1xcbi1cXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcXG4rXFx0XFx0XFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkKTtcXG4rXFx0XFx0XFx0cG9zID0gcG9zLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRcXHRuZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCBcXHUwMDI2Z2VuX2luY3JlYXNlZCk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIElmIGdlbl9pbmNyZWFzZWQgaXMgZmFsc2UsIHRoaXMgaXMgYSBwcm9tb3Rpb24uIFB1dCBmb2xpb3NcXG4rXFx0XFx0XFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxcbitcXHRcXHRcXHQgKiB0aGUgdGFpbCBvZiB0aGUgc2Vjb25kLW9sZGVzdCBnZW4uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoZ2VuX2luY3JlYXNlZCkge1xcbitcXHRcXHRcXHRcXHRkZWx0YSArPSBucl9wYWdlcztcXG4rXFx0XFx0XFx0XFx0YmF0Y2hfZW5kID0gXFx1MDAyNmZvbGlvLVxcdTAwM2VscnU7XFxuIFxcbi1cXHRcXHRcXHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cXG4tXFx0XFx0XFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XFxuLVxcdFxcdFxcdFxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbi1cXHRcXHRcXHRcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdFxcdFxcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XFxuIFxcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIGRlbHRhKTtcXG4rXFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShscnVnZW4tXFx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gKyBucl9wYWdlcyk7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFxcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcXG4rXFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xcbiBcXHRcXHRcXHR9XFxuLVxcbiBcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sXFxuK1xcdFxcdFxcdCAgIGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0gLSBkZWx0YSk7XFxuK1xcdFxcdFdSSVRFX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSxcXG4rXFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSArIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyZW1haW5pbmcpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBkb25lOlxcbiBcXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMTowOTozMi40MTg0ODk4MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTAxNDgzMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZDYyOGExMGI5OGY1Zjg0ZmIyNDExZWYzNmViYjliY2RkZmJjN2RlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMTowOTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xODIsMTcgKzE4MiwzNyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiB9O1xuIFxuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpXHRcdFx0XFxcbi1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKChfZm9saW8pLVx1MDAzZWxydS5wcmV2ICE9IF9iYXNlKSB7XHRcdFx0XFxcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKnByZXY7XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjYoX2ZvbGlvLVx1MDAzZWxydSkpO1x0XHRcXFxuLVx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbi1cdFx0fVx0XHRcdFx0XHRcdFx0XFxcbi1cdH0gd2hpbGUgKDApXG4rc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuK3tcbitcdGlmIChmb2xpby1cdTAwM2VscnUucHJldiAhPSBiYXNlKSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqcHJldjtcbitcbitcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbit7XG4rXHRpZiAoZm9saW8tXHUwMDNlbHJ1Lm5leHQgIT0gYmFzZSkge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4rXG4rXHRcdG5leHQgPSBsaXN0X2VudHJ5KGZvbGlvLVx1MDAzZWxydS5uZXh0LCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdHByZWZldGNodyhcdTAwMjZuZXh0LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4gI2Vsc2Vcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMClcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTE2OTUsNyArMTcxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XG4tXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XG4rXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjKTtcbiBcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG5AQCAtMzI5NSwyMSArMzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gfVxuIFxuLS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4rXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4rXHRcdFx0aWYgKGluY3JlYXNlZClcbitcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0fVxuIFxuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCArMzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0aWYgKGluY3JlYXNlZClcbitcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4rXHRyZXR1cm4gbmV3X2dlbjtcbit9XG4rXG4rLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuK1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRpZiAoZ2VuX2luY3JlYXNlZClcbitcdFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcdHJldHVybiBuZXdfZ2VuO1xuIH1cbiBcbkBAIC0zODk3LDYgKzM5MzEsMTkgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLFxuK1x0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KVxuK3tcbitcdExJU1RfSEVBRChtb3ZhYmxlKTtcbitcbitcdGlmICghKmJhdGNoX2VuZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4rXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXHUwMDI2bW92YWJsZSwgZHN0KTtcbitcdCpiYXRjaF9lbmQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRpbnQgem9uZTtcbkBAIC0zOTA0LDYgKzM5NTEsNyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTEzLDM1ICszOTYxLDYzIEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFx0aWYgKCF0eXBlIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzcylcbiBcdFx0Z290byBkb25lO1xuIFxuK1x0Vk1fV0FSTl9PTl9PTkNFKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT1cbitcdFx0XHRscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIHRhcmdldF9nZW4pKTtcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspIHtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xuK1x0XHRsb25nIGRlbHRhID0gMDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuK1x0XHRcdHByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCk7XG4rXHRcdFx0cG9zID0gcG9zLVx1MDAzZW5leHQ7XG4rXHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBJZiBnZW5faW5jcmVhc2VkIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHJvbW90aW9uLiBQdXQgZm9saW9zXG4rXHRcdFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxuK1x0XHRcdCAqIHRoZSB0YWlsIG9mIHRoZSBzZWNvbmQtb2xkZXN0IGdlbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoZ2VuX2luY3JlYXNlZCkge1xuK1x0XHRcdFx0ZGVsdGEgKz0gbnJfcGFnZXM7XG4rXHRcdFx0XHRiYXRjaF9lbmQgPSBcdTAwMjZmb2xpby1cdTAwM2VscnU7XG4gXG4tXHRcdFx0LyogZG9uJ3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4tXHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4tXHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbi1cdFx0XHRcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdFx0XHRcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuK1x0XHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4rXHRcdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuIFxuLVx0XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuLVx0XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgZGVsdGEpO1xuK1x0XHRcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4rXHRcdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIG5yX3BhZ2VzKTtcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuK1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXG4rXHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuK1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTtcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICsgZGVsdGEpO1xuK1x0XHRpZiAoIXJlbWFpbmluZylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMTowOTozMi40MTg0OTIwODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI2NDEwMDMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZNU2NhbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHNvbWUgcmVmaW5lbWVudHMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBMUlUgcGFnZSBoYW5kbGluZywgd2hpY2ggaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIE1HTFJVLlxuXG5GaXJzdCwgSSBzZWUgcHJlZmV0Y2hpbmcgbW9kaWZpY2F0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIGBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW9gIGFsb25nc2lkZSBgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvYCBzdWdnZXN0cyB3ZSBhcmUgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBwYWdlIHdhbGtpbmcgdGhyb3VnaCB0aGUgTFJVIGxpc3RzLCBwZXJoYXBzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgZHVyaW5nIHNjYW5uaW5nIG9yIHJlY2xhaW0uIFRoYXQncyBhIGdvb2Qgc2lnbiwgcHJlZmV0Y2hpbmcgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QgaGVyZS5cblxuTmV4dCwgYW5kIHByb2JhYmx5IHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQsIGFyZSB0aGUgTFJVIEdlbiBmdW5jdGlvbiBjaGFuZ2VzLiBJJ20gc2VlaW5nIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBhbmQgYGZsdXNoX2xydV9iYXRjaGAuIFRoZXNlIGFyZSBjb3JlIHRvIHRoZSBNdWx0aS1HZW4gTFJVIGxvZ2ljLCBpbmRpY2F0aW5nIHRoaXMgcGF0Y2ggaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBnZW5lcmF0aW9uYWwgTFJVIG1hbmFnZW1lbnQuIEkgbm90aWNlIG9wdGltaXphdGlvbnMgaW4gYGluY19taW5fc2VxYCByZWdhcmRpbmcgaG93IExSVSBiYXRjaCBtb3ZlcyBhcmUgaGFuZGxlZCAtIG1vdmluZyB0aGVtIHRvIGEgYHRhcmdldF9nZW5gIGxpc3QsIHVwZGF0aW5nIGBucl9wYWdlc2AgaW4gdGhlIGJhdGNoLCBhbmQgbW92aW5nIHByb21vdGVkIGZvbGlvcyB0byB0aGUgaGVhZC4gVGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IHJlZHVjZSBvdmVyaGVhZC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGNvcnJlY3RseSBvcHRpbWl6aW5nIGhvdyBwYWdlcyB0cmFuc2l0aW9uIGJldHdlZW4gZ2VuZXJhdGlvbnMgaXMgY3JpdGljYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBoaWdoIG1lbW9yeSBwcmVzc3VyZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgZXhhY3RseSBhcmUgdGhlc2UgbW9kaWZpY2F0aW9ucyBsb2NhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGB2bXNjYW4uY2AgY29kZT8gQW5kIG1vcmUgaW1wb3J0YW50bHksIHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGBDT05GSUdfLi4uYCkgY29udHJvbCB0aGlzIGNvZGUgcGF0aD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdW5kZXIgdmFyaW91cyBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIGlmIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBjYW4gaGVscCBtZSB3aXRoIHRoZSBpbnZlc3RpZ2F0aW9uIG9mIGBtbS92bXNjYW4uY2AgYW5kIEtjb25maWcuIFRoYXQgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBpbi1kZXB0aCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjUxLjY4MjU5NTc5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQzOTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZzoxNDE1OlxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbm1tL0tjb25maWctMTQxNi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG5tbS9LY29uZmlnOjE0MjE6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDIyLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0MzA6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbm1tL0tjb25maWctMTQzMS0jIH1cXG4tLVxcbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTUtXFxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy0zOTctXFxuLS1cXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA2LVxcbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDA4LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NS1cXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2Ryb3BiZWhpbmQpIHxcXG5tbS9odWdlX21lbW9yeS5jOjM3NDY6XFx0XFx0XFx0XFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3NDctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDYyNz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2NDMtXFxubW0vbWVtY29udHJvbC5jOjQ2NDQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtY29udHJvbC5jLTQ2NDUtc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDY2Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5tbS9tZW1jb250cm9sLmM6NDY2NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1jb250cm9sLmMtNDY2NS1cXG4tLVxcbm1tL21lbW9yeS5jPTY3Mjg9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxubW0vbWVtb3J5LmMtNjc4MC1cXG5tbS9tZW1vcnkuYzo2NzgxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbW9yeS5jLTY3ODItc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jPTY3OTc9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnkuYy02Nzk5LX1cXG5tbS9tZW1vcnkuYzo2ODAwOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbW9yeS5jLTY4MDEtXFxuLS1cXG5tbS9tbV9pbml0LmM9MTEyPXZvaWQgX19pbml0IG1taW5pdF92ZXJpZnlfcGFnZWZsYWdzX2xheW91dCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTEyNS1cXHRcXHRLQVNBTl9UQUdfV0lEVEgsXFxubW0vbW1faW5pdC5jOjEyNjpcXHRcXHRMUlVfR0VOX1dJRFRILFxcbm1tL21tX2luaXQuYy0xMjctXFx0XFx0TFJVX1JFRlNfV0lEVEgsXFxuLS1cXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Mi1cXG5tbS92bXNjYW4uYzo4NTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODU0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04ODI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODg1LX1cXG5tbS92bXNjYW4uYzo4ODY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODg3LVxcbi0tXFxubW0vdm1zY2FuLmM9MjcwMD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjcxMS1cXG5tbS92bXNjYW4uYzoyNzEyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3MTMtXFxubW0vdm1zY2FuLmM9MjcxND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzE1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzE3LSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI3MTgtI2Vsc2VcXG5tbS92bXNjYW4uYzoyNzE5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzIwLSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxuLS1cXG5tbS92bXNjYW4uYz0yNzIzPXN0YXRpYyBib29sIHNob3VsZF93YWxrX21tdSh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTI3MjQte1xcbm1tL3Ztc2Nhbi5jOjI3MjU6XFx0cmV0dXJuIGFyY2hfaGFzX2h3X3B0ZV95b3VuZygpIFxcdTAwMjZcXHUwMDI2IGdldF9jYXAoTFJVX0dFTl9NTV9XQUxLKTtcXG5tbS92bXNjYW4uYy0yNzI2LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3Mjg9c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTI3Mjkte1xcbm1tL3Ztc2Nhbi5jOjI3MzA6XFx0cmV0dXJuIGFyY2hfaGFzX2h3X25vbmxlYWZfcG1kX3lvdW5nKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X2NhcChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xcbm1tL3Ztc2Nhbi5jLTI3MzEtfVxcbi0tXFxubW0vdm1zY2FuLmMtMjc0MS1cXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XFx0XFx0XFx0XFxcXFxcbm1tL3Ztc2Nhbi5jOjI3NDI6XFx0XFx0UkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWluX3NlcVtMUlVfR0VOX0FOT05dKSxcXHRcXFxcXFxubW0vdm1zY2FuLmM6Mjc0MzpcXHRcXHRSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFxcdFxcXFxcXG5tbS92bXNjYW4uYy0yNzQ0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MDA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE5LVxcbm1tL3Ztc2Nhbi5jOjI5MjA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MjEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMDI5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzA1Ny1cXG5tbS92bXNjYW4uYzozMDU4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDU5LVxcbi0tXFxubW0vdm1zY2FuLmM9MzI4OT1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDctXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jOjMzMDg6XFx0XFx0aWYgKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSlcXG5tbS92bXNjYW4uYy0zMzA5LVxcdFxcdFxcdHJldHVybiAtMTtcXG5tbS92bXNjYW4uYy0zMzEwLVxcbm1tL3Ztc2Nhbi5jOjMzMTE6XFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFxcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XFxubW0vdm1zY2FuLmM6MzMxMjpcXHRcXHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xcbm1tL3Ztc2Nhbi5jLTMzMTMtXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxubW0vdm1zY2FuLmMtMzMxNC1cXG5tbS92bXNjYW4uYzozMzE1OlxcdHJldHVybiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbm1tL3Ztc2Nhbi5jLTMzMTYtfVxcbi0tXFxubW0vdm1zY2FuLmM9MzMxOD1zdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxcbi0tXFxubW0vdm1zY2FuLmMtMzMyMi1cXG5tbS92bXNjYW4uYzozMzIzOlxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG5tbS92bXNjYW4uYy0zMzI0LVxcbm1tL3Ztc2Nhbi5jLTMzMjUtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjMzMjY6XFx0XFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxubW0vdm1zY2FuLmMtMzMyNy1cXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMzUtXFxubW0vdm1zY2FuLmM6MzMzNjpcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG5tbS92bXNjYW4uYzozMzM3OlxcdFxcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG5tbS92bXNjYW4uYy0zMzM4LVxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbi0tXFxubW0vdm1zY2FuLmM9NDAyOT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNjUtXFxubW0vdm1zY2FuLmM6NDA2NjpcXHRcXHRpZiAobWluX3NlcVtMUlVfR0VOX0FOT05dIFxcdTAwM2Ugc2VxIFxcdTAwMjZcXHUwMDI2IG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcXHUwMDNjIHNlcSlcXG5tbS92bXNjYW4uYzo0MDY3OlxcdFxcdFxcdG1pbl9zZXFbTFJVX0dFTl9BTk9OXSA9IHNlcTtcXG5tbS92bXNjYW4uYzo0MDY4OlxcdFxcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcXHUwMDNlIHNlcSBcXHUwMDI2XFx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzYyBzZXEpXFxubW0vdm1zY2FuLmM6NDA2OTpcXHRcXHRcXHRtaW5fc2VxW0xSVV9HRU5fRklMRV0gPSBzZXE7XFxubW0vdm1zY2FuLmMtNDA3MC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDExMy1cXHQgKiB0aGUgY3VycmVudCBtYXhfc2VxIG5lZWQgdG8gYmUgY292ZXJlZCwgc2luY2UgbWF4X3NlcSsxIGNhbiBvdmVybGFwXFxubW0vdm1zY2FuLmM6NDExNDpcXHQgKiB3aXRoIG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBpZiBzd2FwcGluZyBpcyBjb25zdHJhaW5lZC4gQW5kIGlmIHRoZXkgZG9cXG5tbS92bXNjYW4uYy00MTE1LVxcdCAqIG92ZXJsYXAsIGNvbGQvaG90IGludmVyc2lvbiBoYXBwZW5zLlxcbi0tXFxubW0vdm1zY2FuLmM9NDg5OD1zdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MDItXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgKyAxKVxcbm1tL3Ztc2Nhbi5jOjQ5MDM6XFx0XFx0cmV0dXJuIExSVV9HRU5fRklMRTtcXG5tbS92bXNjYW4uYy00OTA0LVxcbm1tL3Ztc2Nhbi5jLTQ5MDUtXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXFxubW0vdm1zY2FuLmM6NDkwNjpcXHRcXHRyZXR1cm4gTFJVX0dFTl9BTk9OO1xcbm1tL3Ztc2Nhbi5jLTQ5MDctXFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MTAtXFx0ICovXFxubW0vdm1zY2FuLmM6NDkxMTpcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxubW0vdm1zY2FuLmM6NDkxMjpcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG5tbS92bXNjYW4uYy00OTEzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTQzND1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01NDUwLVxcdGlmIChlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jOjU0NTE6XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xcbm1tL3Ztc2Nhbi5jLTU0NTItXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjU0NTM6XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG5tbS92bXNjYW4uYy01NDU0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTUxNT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTUxOC1cXG5tbS92bXNjYW4uYzo1NTE5OlxcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXFxubW0vdm1zY2FuLmM6NTUyMDpcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xcbm1tL3Ztc2Nhbi5jLTU1MjEtXFxubW0vdm1zY2FuLmMtNTUyMi1cXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXFxubW0vdm1zY2FuLmM6NTUyMzpcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xcbm1tL3Ztc2Nhbi5jLTU1MjQtXFxubW0vdm1zY2FuLmMtNTUyNS1cXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxcbm1tL3Ztc2Nhbi5jOjU1MjY6XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcXG5tbS92bXNjYW4uYy01NTI3LVxcbi0tXFxubW0vdm1zY2FuLmM9NTUzMj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NTQ0LVxcbm1tL3Ztc2Nhbi5jOjU1NDU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSsrKSB7XFxubW0vdm1zY2FuLmMtNTU0Ni1cXHRcXHRib29sIGVuYWJsZWQgPSBjYXBzIFxcdTAwMjYgQklUKGkpO1xcbm1tL3Ztc2Nhbi5jLTU1NDctXFxubW0vdm1zY2FuLmM6NTU0ODpcXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmMtNTU0OS1cXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMDk9c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuLS1cXG5tbS92bXNjYW4uYy02MDExLVxcdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyArIDEgXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbm1tL3Ztc2Nhbi5jOjYwMTI6XFx0QlVJTERfQlVHX09OKEJJVChMUlVfR0VOX1dJRFRIKSBcXHUwMDNjPSBNQVhfTlJfR0VOUyk7XFxubW0vdm1zY2FuLmMtNjAxMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMjQ9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTYwMjUtXFxubW0vdm1zY2FuLmM6NjAyNjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy02MDI3LVxcbi0tXFxubW0vdm1zY2FuLmM9NjAzOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA0Mi1cXG5tbS92bXNjYW4uYzo2MDQzOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwNDQtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yNTAtXFxubW0vd29ya2luZ3NldC5jOjI1MTpcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9XSURUSCArIExSVV9SRUZTX1dJRFRIIFxcdTAwM2VcXG5tbS93b3JraW5nc2V0LmMtMjUyLVxcdFxcdCAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MDk6NTEuNzM0MDQyMjEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA1OTM4MjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBMUlVfR0VOIGFuZCB2bXNjYW4uYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IG9mIGBMUlVfR0VOYCB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gbW9yZSBkZWVwbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtbS9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgTFJVX0dFTmAgZGVmaW5pdGlvbi4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVudGFuZ2xlZCB3aXRoIGl0IOKAkyB3aGF0IHByZXJlcXVpc2l0ZXMgZXhpc3QsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgaXRzIHBsYWNlIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiB0aGluZ3MuXG5cbkZyb20gdGhlcmUsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLiBJIGhhdmUgYSByb3VnaCBhcmVhIGluIG1pbmQsIHJvdWdobHkgbGluZXMgMjcwMC00MDAwLiBJdCdzIGEgYnJvYWQgcmFuZ2UsIEkga25vdywgYnV0IGl0IHNob3VsZCBjb250YWluIHNvbWUgb2YgdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSeKAmW0gbG9va2luZyBmb3IgdGhlIHBsYWNlcyB3aGVyZSBgaW5jX21pbl9zZXFgIG9yIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzIGFyZSBiZWluZyBtYWRlLiBUcmFjaW5nIHRoZXNlIGNhbGxzIHNob3VsZCBleHBvc2UgaG93IHRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgYmVpbmcgaW5jcmVtZW50ZWQgYW5kIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCB0byBhZmZlY3QgcGFnZSByZWNsYWltLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGdlbmVyYXRpb25hbCBMUlUgaW1wbGVtZW50YXRpb24gYW5kIHdoZXJlIGl0J3MgdHJ1bHkgbWFraW5nIGFuIGltcGFjdCBvbiBwYWdlIHNjYW5uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjU2Ljc5MzQyNzA0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cXG4xNDAxOlxcdFxcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cXG4xNDAyOlxcdFxcbjE0MDM6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDA0OlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwNTpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDA3OlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDA4OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDk6XFx0XFx0aGVscFxcbjE0MTA6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDExOlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MTI6XFx0XFxuMTQxMzpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQxNDpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDE1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTY6XFx0XFx0aGVscFxcbjE0MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxODpcXHRcXG4xNDE5OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQyMDpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQyMTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDIyOlxcdFxcdGhlbHBcXG4xNDIzOlxcdFxcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXFxuMTQyNDpcXHRcXHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXFxuMTQyNTpcXHRcXG4xNDI2OlxcdFxcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXFxuMTQyNzpcXHRcXG4xNDI4OlxcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbjE0Mjk6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0MzA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbjE0MzE6XFx0IyB9XFxuMTQzMjpcXHRcXG4xNDMzOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbjE0MzQ6XFx0ICAgICAgIGRlZl9ib29sIG5cXG4xNDM1OlxcdFxcbjE0MzY6XFx0Y29uZmlnIFBFUl9WTUFfTE9DS1xcbjE0Mzc6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0Mzg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxuMTQzOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjU2Ljc5MzUyNTcwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTQxNDc3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE11bHRpLUdlbiBMUlUgQ29uZmlndXJhdGlvbiBhbmQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtdWx0aS1nZW4gTFJVIGNvZGUuIEZpcnN0IHRoaW5ncyBmaXJzdDogYENPTkZJR19MUlVfR0VOYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc3dpdGNoLiBJZiB0aGF0J3MgZW5hYmxlZCwgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNlZW1zIHRvIGJlIHNldHRpbmcgdXAgdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eSByaWdodCBvdXQgb2YgdGhlIGdhdGUsIG5vIG1hbnVhbCBzeXNmcyBmaWRkbGluZyBuZWVkZWQuIFRoYXQncyBnb29kIHRvIGtub3csIHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBgaW5jX21pbl9zZXFgIGFuZCBvdGhlciBNR0xSVS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gV2hlcmUgYXJlIHRoZXkgZGVmaW5lZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoZXJlIGFyZSB0aGV5IGJlaW5nICpjYWxsZWQqPyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGhpZXJhcmNoeSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LiBTbywgSSdsbCBzdGFydCB3aXRoIGBtbS92bXNjYW4uY2AgYmVjYXVzZSBpdCdzIGEgZ29vZCBiZXQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFscy4gSeKAmWxsIGxvY2F0ZSBgaW5jX21pbl9zZXFgIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHRoZW4gbWV0aWN1bG91c2x5IHdvcmsgbXkgd2F5IHVwIHRoZSBjYWxsIHN0YWNrLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZ2VuLUxSVSBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgYW5kIHdoYXQgdGhlIHN5c3RlbSBpcyByZWx5aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEwOjA3LjMzNTAwNTM0OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc4Mjg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmNfbWluX3NlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zOTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NDYtXFxubW0vdm1zY2FuLmM6Mzk0NzpzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy0zOTQ4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMjgtXFxubW0vdm1zY2FuLmM6NDAyOTpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00MDMwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwODE9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTAyLVxcbm1tL3Ztc2Nhbi5jOjQxMDM6XFx0XFx0aWYgKGluY19taW5fc2VxKGxydXZlYywgdHlwZSwgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNDEwNC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NTE9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00OTcwLVxcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NzE6XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNDk3Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NzgtXFx0aWYgKHNjYW5uZWQpXFxubW0vdm1zY2FuLmM6NDk3OTpcXHRcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy00OTgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDowNy4zODY3OTUwNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjczMDU2NTc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB3aXRoaW4gdGhlIFZNIHNjYW5uaW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc2VxdWVuY2UgbnVtYmVycyBhcmUgaW5jcmVtZW50ZWQuIEkgc2VlIHRoYXQgYGluY19taW5fc2VxYCBpcyBjYWxsZWQgZnJvbSBgaW5jX21heF9zZXFgIGFuZCBgdHJ5X3RvX2luY19taW5fc2VxYCwgYm90aCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgKmVsc2UqIGlzIHRyaWdnZXJpbmcgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUgYnJvYWRlciBlbnRyeSBwb2ludHMgaW50byB0aGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIGFyZSBpbml0aWF0ZWQuXG5cbkkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZS4gSSdsbCBicm9hZGVuIG15IHNlYXJjaC4gSSB3aWxsIGludmVzdGlnYXRlIGNhbGxlcnMgb2YgYGxydV9nZW5fc2hyaW5rX25vZGVgIOKAkyBvciBhbnkgb3RoZXIgb2J2aW91cyBlbnRyeSBwb2ludHMgaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZSDigJMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRob3NlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBCeSB0cmFjaW5nIHRob3NlIGNhbGxzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDoyMC4xMTczNjMxMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDUyMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTI4ND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMDQtXFxubW0vdm1zY2FuLmM6NTMwNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUzMDYte1xcbi0tXFxubW0vdm1zY2FuLmM9NjAzMz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzctXFxubW0vdm1zY2FuLmM6NjAzODpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwMzkte1xcbi0tXFxubW0vdm1zY2FuLmM9NjMxNT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMjItXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG5tbS92bXNjYW4uYzo2MzIzOlxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MzI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDoyMC4xNjI4MjIzNDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1NTg4MTkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTUdMUlUgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBgc2hyaW5rX25vZGVgIOKAkyB0aGF0J3MgdGhlIGtleSBmdW5jdGlvbiBjYWxsZWQgZHVyaW5nIHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IHdoZW4ga3N3YXBkIG9yIGRpcmVjdCByZWNsYWltIGFyZSBydW5uaW5nLiBSaWdodCwgZ290IGl0LiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGFyZWFzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGF0dGFjayB2ZWN0b3JzIHRvIGxvb2sgYXQuIEFyZSB0aGVyZSBhbnkgZXhwb3J0ZWQgc3ltYm9scywgc3lzZnMgZW50cnlwb2ludHMsIG9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCB0aGF0IGFyZW4ndCBjb25zaWRlcmVkIFwiaG90IHBhdGhzXCIgdGhhdCBtaWdodCBiZSByaXBlIGZvciBmdXp6aW5nPyBUaG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5OZXh0LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IGRlYnVnZnMsIHN5c2ZzLCBvciBwcm9jZnMgaW50ZXJmYWNlcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBNR0xSVSBvciBMUlUgZ2VuZXJhdGlvbiBpbiBnZW5lcmFsLiBUaG9zZSB0eXBlcyBvZiBpbnRlcmZhY2VzIGFyZSBvZnRlbiBvdmVybG9va2VkIGFuZCBjYW4gZXhwb3NlIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIHRlcm0gYGxydV9nZW5gIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB0aGUgTFJVIGdlbmVyYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTA6MzEuNzIxNjQ2MzI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY5MDcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcyNyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04NTktICovXFxubW0vdm1zY2FuLmM6ODYwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjEte1xcbi0tXFxubW0vdm1zY2FuLmMtODgxLSNlbHNlXFxubW0vdm1zY2FuLmM6ODgyOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04ODMte1xcbi0tXFxubW0vdm1zY2FuLmM9ODg4PXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtOTEyLVxcbm1tL3Ztc2Nhbi5jOjkxMzpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy05MTQtXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYy05MTYtXFxubW0vdm1zY2FuLmM6OTE3OlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MTgtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MjMwMD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzMDYtXFxubW0vdm1zY2FuLmM6MjMwNzpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjMwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0yNzE0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jLTI3MTUtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNzE2OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MTc6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjcxOC0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MjA6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNzIxLSNlbmRpZlxcbi0tXFxubW0vdm1zY2FuLmM9MjgwOD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgzNy0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODM4OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODM5LSAqXFxuLS1cXG5tbS92bXNjYW4uYz0yODU1PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NjQtXFxubW0vdm1zY2FuLmM6Mjg2NTpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4NjYtXFx0XFx0XFx0ICAgICAgdm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4ODAtXFxubW0vdm1zY2FuLmM6Mjg4MTpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg4Mi1cXHRcXHRcXHRcXHR2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OS1cXG5tbS92bXNjYW4uYzoyOTAwOnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTI5MDEte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMS1cXG5tbS92bXNjYW4uYzoyOTIyOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjkyMy17XFxubW0vdm1zY2FuLmM6MjkyNDpcXHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xcbm1tL3Ztc2Nhbi5jLTI5MjUtXFx0XFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxcbi0tXFxubW0vdm1zY2FuLmMtMjkzNy1cXG5tbS92bXNjYW4uYzoyOTM4OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTM5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDItXFxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDctXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI5NDg6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk0OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjEtXFxubW0vdm1zY2FuLmM6Mjk2Mjp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjMte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk2NS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYzoyOTY2OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjk2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTc3OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5NzgtXFxuLS1cXG5tbS92bXNjYW4uYy0yOTg4LVxcbm1tL3Ztc2Nhbi5jOjI5ODk6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTkwLXtcXG5tbS92bXNjYW4uYy0yOTkxLVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk5MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xcbm1tL3Ztc2Nhbi5jLTI5OTMtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzozMDA3OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwMDgtXFxuLS1cXG5tbS92bXNjYW4uYy0zMDI4LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMzAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1Mi1cXG5tbS92bXNjYW4uYzozMDUzOlxcdGxydV9nZW5fZGVsX21tKG1tKTtcXG5tbS92bXNjYW4uYzozMDU0OlxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG5tbS92bXNjYW4uYy0zMDU1LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTktXFxubW0vdm1zY2FuLmM6MzA2MDpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTMwNjEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA2NC1cXG5tbS92bXNjYW4uYzozMDY1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0zMDY2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjktXFxubW0vdm1zY2FuLmM6MzA3MDpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMDcxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNzYtXFxubW0vdm1zY2FuLmM6MzA3NzpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXFxubW0vdm1zY2FuLmMtMzA3OC17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDgxLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXFx1MDAzZWxydXZlYztcXG5tbS92bXNjYW4uYzozMDgyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwODMtXFxuLS1cXG5tbS92bXNjYW4uYy0zMTAxLVxcbm1tL3Ztc2Nhbi5jOjMxMDI6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxcbm1tL3Ztc2Nhbi5jLTMxMDMte1xcbi0tXFxubW0vdm1zY2FuLmMtMzEwOC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMTA5OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6MzExMDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zMTExLVxcbi0tXFxubW0vdm1zY2FuLmM9MzE2Nj1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMTY5LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMxNzA6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMTcxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMxNzItXFxuLS1cXG5tbS92bXNjYW4uYz0zMjE4PXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi0tXFxubW0vdm1zY2FuLmMtMzIyMS1cXHRpbnQgaTtcXG5tbS92bXNjYW4uYzozMjIyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIyMy1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjM3PXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxcbi0tXFxubW0vdm1zY2FuLmMtMzIzOS1cXHRpbnQgaGlzdCwgdGllcjtcXG5tbS92bXNjYW4uYzozMjQwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzI0MS1cXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXFx1MDAzZSAxO1xcbi0tXFxubW0vdm1zY2FuLmM9MzI4OT1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDYtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjMzMDc6XFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jLTMzMDgtXFx0XFx0aWYgKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzNDY9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNDgtXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxubW0vdm1zY2FuLmM6MzM0OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jOjMzNTA6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzM1MS1cXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy0zMzU0LVxcdGlmIChnZW5faW5jcmVhc2VkKVxcbm1tL3Ztc2Nhbi5jOjMzNTU6XFx0XFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG5tbS92bXNjYW4uYy0zMzU2LVxcdHJldHVybiBuZXdfZ2VuO1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1OC1cXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMzM2MC1cXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzc0LVxcbm1tL3Ztc2Nhbi5jOjMzNzU6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNzYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM3OC1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMzNzk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzgwLVxcbi0tXFxubW0vdm1zY2FuLmMtMzM5My1cXG5tbS92bXNjYW4uYzozMzk0OlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikpXFxubW0vdm1zY2FuLmMtMzM5NS1cXHRcXHRcXHRscnUgKz0gTFJVX0FDVElWRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM0MDI9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzQwNS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXFx1MDAzZXZtYTtcXG5tbS92bXNjYW4uYzozNDA2OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM0MDctXFxuLS1cXG5tbS92bXNjYW4uYz0zNTQwPXN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTQ3LVxcbm1tL3Ztc2Nhbi5jOjM1NDg6c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vdm1zY2FuLmMtMzU0OS1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NjQtXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM1NjU6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNTY2LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM1NzI9c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zNTgyLVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxubW0vdm1zY2FuLmM6MzU4MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zNTg0LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzU4Ni1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjM1ODc6XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XFxubW0vdm1zY2FuLmMtMzU4OC1cXHR1bnNpZ25lZCBpbnQgbnI7XFxuLS1cXG5tbS92bXNjYW4uYz0zNjYzPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY3MC1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM2NzE6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzY3Mi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NzQtXFx0REVGSU5FX01BWF9TRVEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozNjc1OlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTM2NzYtXFxuLS1cXG5tbS92bXNjYW4uYz0zNzUxPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzc2MC1cXHR1bnNpZ25lZCBsb25nIGZpcnN0ID0gLTE7XFxubW0vdm1zY2FuLmM6Mzc2MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYzozNzYyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTM3NjMtXFxuLS1cXG5tbS92bXNjYW4uYz0zODI0PXN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zODMwLVxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG5tbS92bXNjYW4uYzozODMxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM4MzItXFxuLS1cXG5tbS92bXNjYW4uYy0zODY1LVxcbm1tL3Ztc2Nhbi5jOjM4NjY6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zODY3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MDAtXFxubW0vdm1zY2FuLmM6MzkwMTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG5tbS92bXNjYW4uYy0zOTAyLXtcXG5tbS92bXNjYW4uYzozOTAzOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MDQtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTIxPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG5tbS92bXNjYW4uYy0zOTIyLXtcXG5tbS92bXNjYW4uYzozOTIzOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MjQtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTQ3PXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk1MC1cXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcXG5tbS92bXNjYW4uYzozOTUxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzk1Mi1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmM6Mzk1MzpcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYy0zOTU0LVxcdGludCB0YXJnZXRfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xcbi0tXFxubW0vdm1zY2FuLmMtMzk2NC1cXHRWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7XFxubW0vdm1zY2FuLmM6Mzk2NTpcXHRWTV9XQVJOX09OX09OQ0UobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBvbGRfZ2VuKSAhPVxcbm1tL3Ztc2Nhbi5jOjM5NjY6XFx0XFx0XFx0bHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCB0YXJnZXRfZ2VuKSk7XFxubW0vdm1zY2FuLmMtMzk2Ny1cXHQvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMjk9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDMyLVxcdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XFxubW0vdm1zY2FuLmM6NDAzMzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwMzQtXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNDAtXFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG5tbS92bXNjYW4uYzo0MDQxOlxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDA0Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNjEtXFxubW0vdm1zY2FuLmM6NDA2MjpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xcbm1tL3Ztc2Nhbi5jLTQwNjMtXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAyNlxcdTAwMjYgc3dhcHBpbmVzcyBcXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xcbi0tXFxubW0vdm1zY2FuLmM9NDA4MT1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwODUtXFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NDA4NjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwODctcmVzdGFydDpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxMTYtXFx0ICovXFxubW0vdm1zY2FuLmM6NDExNzpcXHRwcmV2ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgLSAxKTtcXG5tbS92bXNjYW4uYzo0MTE4OlxcdG5leHQgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWF4X3NlcSArIDEpO1xcbm1tL3Ztc2Nhbi5jLTQxMTktXFxuLS1cXG5tbS92bXNjYW4uYz00MTQ2PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDE0OS1cXHRib29sIHN1Y2Nlc3M7XFxubW0vdm1zY2FuLmM6NDE1MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQxNTEtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjQxNTI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MTUzOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQxNTQtXFxuLS1cXG5tbS92bXNjYW4uYy00MTY1LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDE2NjpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQxNjctXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MjMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDIzMy1cXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xcbm1tL3Ztc2Nhbi5jOjQyMzQ6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00MjM1LVxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy00MjM5LVxcdFxcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFxcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XFxubW0vdm1zY2FuLmM6NDI0MDpcXHRcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxubW0vdm1zY2FuLmMtNDI0MS1cXHRcXHRcXHRmb3IgKHpvbmUgPSAwOyB6b25lIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXFxuLS1cXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDI3NS1cXG5tbS92bXNjYW4uYzo0Mjc2OlxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykpO1xcbm1tL3Ztc2Nhbi5jLTQyNzctXFx0YmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4udGltZXN0YW1wc1tnZW5dKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyODItLyogdG8gcHJvdGVjdCB0aGUgd29ya2luZyBzZXQgb2YgdGhlIGxhc3QgTiBqaWZmaWVzICovXFxubW0vdm1zY2FuLmM6NDI4MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBscnVfZ2VuX21pbl90dGwgX19yZWFkX21vc3RseTtcXG5tbS92bXNjYW4uYy00Mjg0LVxcbm1tL3Ztc2Nhbi5jOjQyODU6c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00Mjg2LXtcXG5tbS92bXNjYW4uYy00Mjg3LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5tbS92bXNjYW4uYzo0Mjg4OlxcdHVuc2lnbmVkIGxvbmcgbWluX3R0bCA9IFJFQURfT05DRShscnVfZ2VuX21pbl90dGwpO1xcbm1tL3Ztc2Nhbi5jLTQyODktXFx0Ym9vbCByZWNsYWltYWJsZSA9ICFtaW5fdHRsO1xcbi0tXFxubW0vdm1zY2FuLmMtNDMzMS0gKi9cXG5tbS92bXNjYW4uYzo0MzMyOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MzMzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzctXFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxubW0vdm1zY2FuLmM6NDMzODpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQzMzktXFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzNDctXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjQzNDg6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbm1tL3Ztc2Nhbi5jLTQzNDktXFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xcbi0tXFxubW0vdm1zY2FuLmMtNDM4Ny1cXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWF4X3NlcSk7XFxubW0vdm1zY2FuLmM6NDM4ODpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTQzODktXFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0NTA9ZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy00NDU3LVxcbm1tL3Ztc2Nhbi5jOjQ0NTg6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxubW0vdm1zY2FuLmMtNDQ1OS17XFxuLS1cXG5tbS92bXNjYW4uYy00NTA1LVxcbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUwNy17XFxuLS1cXG5tbS92bXNjYW4uYy00NTMwLVxcbm1tL3Ztc2Nhbi5jOjQ1MzE6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUzNy1cXG5tbS92bXNjYW4uYzo0NTM4OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX09MRCk7XFxubW0vdm1zY2FuLmMtNDUzOS1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy00NTQxLVxcbm1tL3Ztc2Nhbi5jOjQ1NDI6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1NDMte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU2Ny1cXG5tbS92bXNjYW4uYzo0NTY4OnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1Njkte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU3My1cXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXFxubW0vdm1zY2FuLmM6NDU3NDpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9IRUFEKTtcXG5tbS92bXNjYW4uYy00NTc1LX1cXG5tbS92bXNjYW4uYy00NTc2LVxcbm1tL3Ztc2Nhbi5jOjQ1Nzc6Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTc4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1OTA9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00NTkyLXtcXG5tbS92bXNjYW4uYzo0NTkzOlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6NDU5NDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy00NTk1LVxcdGludCBzd2FwcGluZXNzID0gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjMtICovXFxubW0vdm1zY2FuLmM6NDYyNDp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NjI1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NTAtICogICAgZ2VuZXJhdGlvbnMgb24gYW4gTFJVIGxpc3QuXFxubW0vdm1zY2FuLmM6NDY1MTogKiA0LiBJbiBscnVfZ2VuX2RlbF9mb2xpbygpLCB0aGUgZ2VuZXJhdGlvbiB0byB3aGljaCB0aGUgZm9saW8gYmVsb25ncyBpc1xcbm1tL3Ztc2Nhbi5jLTQ2NTItICogICAgZm91bmQgYmFzZWQgb24gdGhlIGdlbmVyYXRpb24gaW5mb3JtYXRpb24gaW4gZm9saW8tXFx1MDAzZWZsYWdzLCBhbmQgdGhlXFxuLS1cXG5tbS92bXNjYW4uYy00NjU0LSAqICAgIHRoZSBscnUgc2l6ZSBjb3JyZWN0bHkgZHVyaW5nIHJlcGFyZW50aW5nLCBvdGhlcndpc2UgdGhlIGxydSBzaXplIG1heVxcbm1tL3Ztc2Nhbi5jOjQ2NTU6ICogICAgYmUgdXBkYXRlZCBpbmNvcnJlY3RseSBpbiBscnVfZ2VuX2RlbF9mb2xpbygpLlxcbm1tL3Ztc2Nhbi5jLTQ2NTYtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NjQtICovXFxubW0vdm1zY2FuLmM6NDY2NTpzdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ2NjYtXFx0XFx0XFx0XFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXFxubW0vdm1zY2FuLmMtNDY2Ny17XFxubW0vdm1zY2FuLmM6NDY2ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqY2hpbGRfbHJ1Z2VuLCAqcGFyZW50X2xydWdlbjtcXG5tbS92bXNjYW4uYy00NjY5LVxcdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xcbi0tXFxubW0vdm1zY2FuLmMtNDY3NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ2V0X25yX2dlbnMoY2hpbGRfbHJ1dmVjLCB0eXBlKTsgaSsrKSB7XFxubW0vdm1zY2FuLmM6NDY3NjpcXHRcXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShjaGlsZF9scnVnZW4tXFx1MDAzZW1heF9zZXEgLSBpKTtcXG5tbS92bXNjYW4uYy00Njc3LVxcdFxcdGxvbmcgbnJfcGFnZXMgPSBjaGlsZF9scnVnZW4tXFx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV07XFxubW0vdm1zY2FuLmM6NDY3ODpcXHRcXHRpbnQgY2hpbGRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xcbm1tL3Ztc2Nhbi5jOjQ2Nzk6XFx0XFx0aW50IHBhcmVudF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xcbm1tL3Ztc2Nhbi5jLTQ2ODAtXFxuLS1cXG5tbS92bXNjYW4uYy00Njg4LVxcbm1tL3Ztc2Nhbi5jOjQ2ODk6XFx0XFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSAhPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pKSB7XFxubW0vdm1zY2FuLmMtNDY5MC1cXHRcXHRcXHRfX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSArIGNoaWxkX2xydV9hY3RpdmUsIHpvbmUsIC1ucl9wYWdlcyk7XFxuLS1cXG5tbS92bXNjYW4uYy00Njk1LVxcbm1tL3Ztc2Nhbi5jOjQ2OTY6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS92bXNjYW4uYy00Njk3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3MDctXFx0XFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKylcXG5tbS92bXNjYW4uYzo0NzA4OlxcdFxcdFxcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XFxubW0vdm1zY2FuLmMtNDcwOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3MzA9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDczOS1cXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcXG5tbS92bXNjYW4uYzo0NzQwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDc0MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NDgtXFx0LyogcHJvbW90ZWQgKi9cXG5tbS92bXNjYW4uYzo0NzQ5OlxcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XFxubW0vdm1zY2FuLmMtNDc1MC1cXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZscnVnZW4tXFx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3Nzk9c3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDc5Ni1cXG5tbS92bXNjYW4uYzo0Nzk3OlxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcXG5tbS92bXNjYW4uYy00Nzk4LVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9NDgwMz1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDgxNC1cXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XFxubW0vdm1zY2FuLmM6NDgxNTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ4MTYtXFxuLS1cXG5tbS92bXNjYW4uYy00ODIyLVxcbm1tL3Ztc2Nhbi5jOjQ4MjM6XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTQ4MjQtXFxuLS1cXG5tbS92bXNjYW4uYz00OTUxPXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDk1OS1cXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxubW0vdm1zY2FuLmM6NDk2MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQ5NjEtXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTAtXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG5tbS92bXNjYW4uYzo1MDExOlxcdFxcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcXG5tbS92bXNjYW4uYy01MDEyLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE3Mz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxODAtXFxubW0vdm1zY2FuLmM6NTE4MTpcXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbm1tL3Ztc2Nhbi5jLTUxODItXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMTQ9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MjIwLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo1MjIxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XFxubW0vdm1zY2FuLmMtNTIyMi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy01MjM0LVxcdFxcdGlmIChvcCkge1xcbm1tL3Ztc2Nhbi5jOjUyMzU6XFx0XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XFxubW0vdm1zY2FuLmMtNTIzNi1cXHRcXHRcXHRvcCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MjQ4LVxcdFxcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxubW0vdm1zY2FuLmM6NTI0OTpcXHRcXHRcXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTUyNTAtXFx0XFx0XFx0bWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtNTI2Ni1cXHRpZiAob3ApXFxubW0vdm1zY2FuLmM6NTI2NzpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MjY4LVxcbi0tXFxubW0vdm1zY2FuLmMtNTI3My1cXG5tbS92bXNjYW4uYzo1Mjc0OlxcdC8qIHJlc3RhcnQgaWYgcmFjZWQgd2l0aCBscnVfZ2VuX3JvdGF0ZV9tZW1jZygpICovXFxubW0vdm1zY2FuLmMtNTI3NS1cXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI4My1cXG5tbS92bXNjYW4uYzo1Mjg0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyODUte1xcbi0tXFxubW0vdm1zY2FuLmMtNTI5Ny1cXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmM6NTI5ODpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxubW0vdm1zY2FuLmMtNTI5OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMDQtXFxubW0vdm1zY2FuLmM6NTMwNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUzMDYte1xcbi0tXFxubW0vdm1zY2FuLmM9NTM1MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNTM1Mi17XFxubW0vdm1zY2FuLmM6NTM1MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTUzNTQtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEwOjMxLjc2OTM0MzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NDE3Njc1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtbS92bXNjYW4uY2AgY29kZSByZWxhdGVkIHRvIGRlYnVnZnMgYW5kIHN5c2ZzIGludGVyYWN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSB0aG9zZSBjb25uZWN0ZWQgdG8gdGhlIGRlYnVnIGFuZCBzeXN0ZW0gZmlsZSBzeXN0ZW1zLlxuXG5UbyBtYWtlIHRoaXMgZWZmaWNpZW50LCBJJ2xsIGZvY3VzIG15IHNlYXJjaCB3aXRoaW4gdGhlIGxpa2VseSBhcmVhIHdoZXJlIHN1Y2ggY29kZSB3b3VsZCByZXNpZGUuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBhcm91bmQgbGluZXMgNTUwMCB0byA2MDAwLiBUaGF0IHJhbmdlIG9mdGVuIGhvbGRzIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgc3lzdGVtIGlzIGV4cG9zZWQgZm9yIGRlYnVnZ2luZyBvciBtYW5hZ2VtZW50LiBJdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBgdm1zY2FuYCBleHBvc2VzIGFueSBpbnRlcm5hbCBzdGF0ZSBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTA6MzYuMjExMTE0OTQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NTAwOlxcdHN0YXRpYyBzc2l6ZV90IG1pbl90dGxfbXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG41NTAxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG41NTAyOlxcdHtcXG41NTAzOlxcdFxcdHVuc2lnbmVkIGludCBtc2VjcztcXG41NTA0OlxcdFxcbjU1MDU6XFx0XFx0aWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2bXNlY3MpKVxcbjU1MDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTUwNzpcXHRcXG41NTA4OlxcdFxcdFdSSVRFX09OQ0UobHJ1X2dlbl9taW5fdHRsLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7XFxuNTUwOTpcXHRcXG41NTEwOlxcdFxcdHJldHVybiBsZW47XFxuNTUxMTpcXHR9XFxuNTUxMjpcXHRcXG41NTEzOlxcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9taW5fdHRsX2F0dHIgPSBfX0FUVFJfUlcobWluX3R0bF9tcyk7XFxuNTUxNDpcXHRcXG41NTE1OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuNTUxNjpcXHR7XFxuNTUxNzpcXHRcXHR1bnNpZ25lZCBpbnQgY2FwcyA9IDA7XFxuNTUxODpcXHRcXG41NTE5OlxcdFxcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXFxuNTUyMDpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xcbjU1MjE6XFx0XFxuNTUyMjpcXHRcXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXFxuNTUyMzpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xcbjU1MjQ6XFx0XFxuNTUyNTpcXHRcXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxcbjU1MjY6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcXG41NTI3OlxcdFxcbjU1Mjg6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMHglMDR4XFxcXG5cXFwiLCBjYXBzKTtcXG41NTI5OlxcdH1cXG41NTMwOlxcdFxcbjU1MzE6XFx0Lyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xcbjU1MzI6XFx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjU1MzM6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuNTUzNDpcXHR7XFxuNTUzNTpcXHRcXHRpbnQgaTtcXG41NTM2OlxcdFxcdHVuc2lnbmVkIGludCBjYXBzO1xcbjU1Mzc6XFx0XFxuNTUzODpcXHRcXHRpZiAodG9sb3dlcigqYnVmKSA9PSAnbicpXFxuNTUzOTpcXHRcXHRcXHRjYXBzID0gMDtcXG41NTQwOlxcdFxcdGVsc2UgaWYgKHRvbG93ZXIoKmJ1ZikgPT0gJ3knKVxcbjU1NDE6XFx0XFx0XFx0Y2FwcyA9IC0xO1xcbjU1NDI6XFx0XFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZjYXBzKSlcXG41NTQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU1NDQ6XFx0XFxuNTU0NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpKyspIHtcXG41NTQ2OlxcdFxcdFxcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXFx1MDAyNiBCSVQoaSk7XFxuNTU0NzpcXHRcXG41NTQ4OlxcdFxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG41NTQ5OlxcdFxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbjU1NTA6XFx0XFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG41NTUxOlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU1NTI6XFx0XFx0XFx0ZWxzZVxcbjU1NTM6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU1NTQ6XFx0XFx0fVxcbjU1NTU6XFx0XFxuNTU1NjpcXHRcXHRyZXR1cm4gbGVuO1xcbjU1NTc6XFx0fVxcbjU1NTg6XFx0XFxuNTU1OTpcXHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xcbjU1NjA6XFx0XFxuNTU2MTpcXHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbjU1NjI6XFx0XFx0XFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXFxuNTU2MzpcXHRcXHRcXHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcXG41NTY0OlxcdFxcdE5VTExcXG41NTY1OlxcdH07XFxuNTU2NjpcXHRcXG41NTY3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcXG41NTY4OlxcdFxcdC5uYW1lID0gXFxcImxydV9nZW5cXFwiLFxcbjU1Njk6XFx0XFx0LmF0dHJzID0gbHJ1X2dlbl9hdHRycyxcXG41NTcwOlxcdH07XFxuNTU3MTpcXHRcXG41NTcyOlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG41NTczOlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxcbjU1NzQ6XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG41NTc1OlxcdFxcbjU1NzY6XFx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXFxuNTU3NzpcXHR7XFxuNTU3ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTU3OTpcXHRcXHRsb2ZmX3QgbnJfdG9fc2tpcCA9ICpwb3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEwOjM2LjIxMTU2MDQxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTYzMTAyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGRlYnVnZnMgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGluZm9ybWF0aW9uIHdpbGwgbGlrZWx5IHJlc2lkZSB3aXRoaW4gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMsIHNvIEknbGwgc3RhcnQgd2l0aCB0aGUgYG1tYCBkaXJlY3RvcnkuIE5vdywgd2hlcmUgd291bGQgdGhlIHZtIHNjYW5uaW5nIGRldGFpbHMgYmU/ICpBaCwgeWVzLCBgdm1zY2FuLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGUuKiBMZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmVzIDU1NzUgdGhyb3VnaCA2MDEwIHdpdGhpbiB0aGF0IGZpbGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgcmVnaXN0cmF0aW9ucyBvciBzb21lIGluZGljYXRpb24gb2YgaG93IHRoZXNlIGludGVyZmFjZXMgYXJlIGV4cG9zZWQuIEZyb20gdGhvc2UgbGluZXMgSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHZtc2FuIGNvZGUuIEl0J3MgYSB0YXJnZXRlZCBzZWFyY2gsIEkgaG9wZSB0byBmaW5kIHNvbWUgaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbnMgdGhlcmUsIG90aGVyd2lzZSBJJ2xsIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzU1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDo0MC4zNzQ2Njc1OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU1ODA6XFx0XFxuNTU4MTpcXHRcXHRtLVxcdTAwM2Vwcml2YXRlID0ga3ZtYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbjU1ODI6XFx0XFx0aWYgKCFtLVxcdTAwM2Vwcml2YXRlKVxcbjU1ODM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNTU4NDpcXHRcXG41NTg1OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjU1ODY6XFx0XFx0ZG8ge1xcbjU1ODc6XFx0XFx0XFx0aW50IG5pZDtcXG41NTg4OlxcdFxcbjU1ODk6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuNTU5MDpcXHRcXHRcXHRcXHRpZiAoIW5yX3RvX3NraXAtLSlcXG41NTkxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbjU1OTI6XFx0XFx0XFx0fVxcbjU1OTM6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU1OTQ6XFx0XFxuNTU5NTpcXHRcXHRyZXR1cm4gTlVMTDtcXG41NTk2OlxcdH1cXG41NTk3OlxcdFxcbjU1OTg6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTU5OTpcXHR7XFxuNTYwMDpcXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHYpKVxcbjU2MDE6XFx0XFx0XFx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKE5VTEwsIGxydXZlY19tZW1jZyh2KSk7XFxuNTYwMjpcXHRcXG41NjAzOlxcdFxcdGt2ZnJlZShtLVxcdTAwM2Vwcml2YXRlKTtcXG41NjA0OlxcdFxcdG0tXFx1MDAzZXByaXZhdGUgPSBOVUxMO1xcbjU2MDU6XFx0fVxcbjU2MDY6XFx0XFxuNTYwNzpcXHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjU2MDg6XFx0e1xcbjU2MDk6XFx0XFx0aW50IG5pZCA9IGxydXZlY19wZ2RhdCh2KS1cXHUwMDNlbm9kZV9pZDtcXG41NjEwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh2KTtcXG41NjExOlxcdFxcbjU2MTI6XFx0XFx0KysqcG9zO1xcbjU2MTM6XFx0XFxuNTYxNDpcXHRcXHRuaWQgPSBuZXh0X21lbW9yeV9ub2RlKG5pZCk7XFxuNTYxNTpcXHRcXHRpZiAobmlkID09IE1BWF9OVU1OT0RFUykge1xcbjU2MTY6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpO1xcbjU2MTc6XFx0XFx0XFx0aWYgKCFtZW1jZylcXG41NjE4OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjU2MTk6XFx0XFxuNTYyMDpcXHRcXHRcXHRuaWQgPSBmaXJzdF9tZW1vcnlfbm9kZTtcXG41NjIxOlxcdFxcdH1cXG41NjIyOlxcdFxcbjU2MjM6XFx0XFx0cmV0dXJuIGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTYyNDpcXHR9XFxuNTYyNTpcXHRcXG41NjI2OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3Nob3dfZnVsbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG41NjI3OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBtYXhfc2VxLCB1bnNpZ25lZCBsb25nICptaW5fc2VxLFxcbjU2Mjg6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNlcSlcXG41NjI5OlxcdHtcXG41NjMwOlxcdFxcdGludCBpO1xcbjU2MzE6XFx0XFx0aW50IHR5cGUsIHRpZXI7XFxuNTYzMjpcXHRcXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKHNlcSk7XFxuNTYzMzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjU2MzQ6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuNTYzNTpcXHRcXG41NjM2OlxcdFxcdGZvciAodGllciA9IDA7IHRpZXIgXFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXIrKykge1xcbjU2Mzc6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICAgICAgICAgICAgJTEwZFxcXCIsIHRpZXIpO1xcbjU2Mzg6XFx0XFx0XFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xcbjU2Mzk6XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcyA9IFxcXCJ4eHhcXFwiO1xcbjU2NDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuWzNdID0ge307XFxuNTY0MTpcXHRcXG41NjQyOlxcdFxcdFxcdFxcdGlmIChzZXEgPT0gbWF4X3NlcSkge1xcbjU2NDM6XFx0XFx0XFx0XFx0XFx0cyA9IFxcXCJSVHhcXFwiO1xcbjU2NDQ6XFx0XFx0XFx0XFx0XFx0blswXSA9IFJFQURfT05DRShscnVnZW4tXFx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1bdGllcl0pO1xcbjU2NDU6XFx0XFx0XFx0XFx0XFx0blsxXSA9IFJFQURfT05DRShscnVnZW4tXFx1MDAzZWF2Z190b3RhbFt0eXBlXVt0aWVyXSk7XFxuNTY0NjpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHNlcSA9PSBtaW5fc2VxW3R5cGVdIHx8IE5SX0hJU1RfR0VOUyBcXHUwMDNlIDEpIHtcXG41NjQ3OlxcdFxcdFxcdFxcdFxcdHMgPSBcXFwicmVwXFxcIjtcXG41NjQ4OlxcdFxcdFxcdFxcdFxcdG5bMF0gPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZscnVnZW4tXFx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XFxuNTY0OTpcXHRcXHRcXHRcXHRcXHRuWzFdID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcXG41NjUwOlxcdFxcdFxcdFxcdFxcdG5bMl0gPSBSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0pO1xcbjU2NTE6XFx0XFx0XFx0XFx0fVxcbjU2NTI6XFx0XFxuNTY1MzpcXHRcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMzsgaSsrKVxcbjU2NTQ6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICUxMGx1JWNcXFwiLCBuW2ldLCBzW2ldKTtcXG41NjU1OlxcdFxcdFxcdH1cXG41NjU2OlxcdFxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbjU2NTc6XFx0XFx0fVxcbjU2NTg6XFx0XFxuNTY1OTpcXHRcXHRpZiAoIW1tX3N0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDo0MC4zNzUwNTAzNjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1ODIyNzE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEZWJ1Z2ZzIFdyaXRlIEhhbmRsZXJzIGZvciBgbHJ1X2dlbmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBkZWJ1Z2ZzYCBpbnRlcmZhY2UgYW5kIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGUgaGFuZGxlcnMgYXZhaWxhYmxlIGZvciB0aGUgYGxydV9nZW5gIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBtb2RpZmlhYmxlIG9yIGNvbmZpZ3VyYWJsZSB0aHJvdWdoIHRoYXQgZGVidWcgaW50ZXJmYWNlLiBNeSB0aGlua2luZyBpcyB0byBkaXJlY3RseSBleGFtaW5lIHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB3cml0ZSBvcGVyYXRpb25zIHRvIGBscnVfZ2VuYC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEknbGwgcmVhZCBmcm9tIGxpbmUgNTc1MCB0byA2MDIwLCB0byBwaW5wb2ludCB0aG9zZSBjcml0aWNhbCB3cml0ZSBoYW5kbGVyIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodCBuZWVkZWQgb24gd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGV4cG9zZWQgdG8gbWUgdmlhIGRlYnVnZnMsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGVmZmVjdHMgYXJlIG9uIHRoZSBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTE6MDguOTU3MzI0NjMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU3NTE6XFx0XFxuNTc1MjpcXHRcXHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcXG41NzUzOlxcdH1cXG41NzU0OlxcdFxcbjU3NTU6XFx0c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNTc1NjpcXHRcXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbjU3NTc6XFx0e1xcbjU3NTg6XFx0XFx0aW50IG5yX2JhdGNoO1xcbjU3NTk6XFx0XFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG41NzYwOlxcdFxcbjU3NjE6XFx0XFx0aWYgKHNlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2UgbWF4X3NlcSlcXG41NzYyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU3NjM6XFx0XFxuNTc2NDpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcXG41NzY1OlxcdFxcbjU3NjY6XFx0XFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjU3Njc6XFx0XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG41NzY4OlxcdFxcbjU3Njk6XFx0XFx0XFx0aWYgKHNlcSBcXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKVxcbjU3NzA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTc3MTpcXHRcXG41NzcyOlxcdFxcdFxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2U9IG5yX3RvX3JlY2xhaW0pXFxuNTc3MzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG41Nzc0OlxcdFxcbjU3NzU6XFx0XFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbjU3NzY6XFx0XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbjU3Nzc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTc3ODpcXHRcXG41Nzc5OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU3ODA6XFx0XFx0fVxcbjU3ODE6XFx0XFxuNTc4MjpcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbjU3ODM6XFx0fVxcbjU3ODQ6XFx0XFxuNTc4NTpcXHRzdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuNTc4NjpcXHRcXHRcXHQgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgb3B0KVxcbjU3ODc6XFx0e1xcbjU3ODg6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjU3ODk6XFx0XFx0aW50IGVyciA9IC1FSU5WQUw7XFxuNTc5MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbjU3OTE6XFx0XFxuNTc5MjpcXHRcXHRpZiAobmlkIFxcdTAwM2MgMCB8fCBuaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpKVxcbjU3OTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTc5NDpcXHRcXG41Nzk1OlxcdFxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuNTc5NjpcXHRcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQobWVtY2dfaWQpO1xcbjU3OTc6XFx0XFx0XFx0aWYgKCFtZW1jZylcXG41Nzk4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU3OTk6XFx0XFx0fVxcbjU4MDA6XFx0XFxuNTgwMTpcXHRcXHRpZiAobWVtY2dfaWQgIT0gbWVtX2Nncm91cF9pZChtZW1jZykpXFxuNTgwMjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTgwMzpcXHRcXG41ODA0OlxcdFxcdHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnO1xcbjU4MDU6XFx0XFx0bHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG41ODA2OlxcdFxcbjU4MDc6XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUylcXG41ODA4OlxcdFxcdFxcdHN3YXBwaW5lc3MgPSBnZXRfc3dhcHBpbmVzcyhscnV2ZWMsIHNjKTtcXG41ODA5OlxcdFxcdGVsc2UgaWYgKHN3YXBwaW5lc3MgXFx1MDAzZSBTV0FQUElORVNTX0FOT05fT05MWSlcXG41ODEwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG41ODExOlxcdFxcbjU4MTI6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG41ODEzOlxcdFxcdGNhc2UgJysnOlxcbjU4MTQ6XFx0XFx0XFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU4MTU6XFx0XFx0XFx0YnJlYWs7XFxuNTgxNjpcXHRcXHRjYXNlICctJzpcXG41ODE3OlxcdFxcdFxcdGVyciA9IHJ1bl9ldmljdGlvbihscnV2ZWMsIHNlcSwgc2MsIHN3YXBwaW5lc3MsIG9wdCk7XFxuNTgxODpcXHRcXHRcXHRicmVhaztcXG41ODE5OlxcdFxcdH1cXG41ODIwOlxcdGRvbmU6XFxuNTgyMTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuNTgyMjpcXHRcXG41ODIzOlxcdFxcdHJldHVybiBlcnI7XFxuNTgyNDpcXHR9XFxuNTgyNTpcXHRcXG41ODI2OlxcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG41ODI3OlxcdHN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxcbjU4Mjg6XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbjU4Mjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMTowOC45NTc2MTMwODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIyOTU5MTE1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IE1HTFJVIExpc3QgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWJ1Z2ZzIGNvbW1hbmRzIHRoYXQgdHJpZ2dlciBhZ2luZyBvciBldmljdGlvbiwgYW5kIHRoYXQsIGluIHR1cm4sIGZ1bm5lbHMgaW50byB0aGUgY29yZSBzZXF1ZW5jZSBpbmNyZW1lbnQgYW5kIGZvbGlvIGV2aWN0aW9uIGxvZ2ljLiBUaGUgZmxvdyBpcyBjbGVhcjogY29tbWFuZHMgZnJvbSBkZWJ1Z2ZzLCB3aGljaCwgaW4gdHVybiwgdHJpZ2dlcnMgYWdpbmcvZXZpY3Rpb24sIHRyaWdnZXJzIHRoZSBzZXF1ZW5jZSBpbmNyZW1lbnQgYW5kL29yIGZvbGlvIGV2aWN0aW9uLiBCb3RoIG5vcm1hbCBwYWdlIHJlY2xhbWF0aW9uIGFuZCB0aGUgZGVidWdmcyBwYXRocyBzZWVtIHRvIGhpdCBzaW1pbGFyIGNvZGUgcGF0aHM6IGBzaHJpbmtfbm9kZWAgLVx1MDAzZSBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgLVx1MDAzZSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgLVx1MDAzZSBgZXZpY3RfZm9saW9zYCBvciBgdHJ5X3RvX2luY19tYXhfc2VxYC5cblxuTm93LCB0aGlzIHNwZWNpZmljIHBhdGNoOiBUaGUgaW5pdGlhbCBjaGFuZ2UgaXMgdGhlIGBwcmVmZXRjaHdfcHJldl9scnVfZm9saW9gIG1hY3JvIHR1cm5lZCBpbnRvIGFuIGlubGluZSBmdW5jdGlvbiwgYW5kIGEgbmV3IGBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW9gLiBUaGF0J3MgYSByZWZhY3RvciwgbWFraW5nIHRoZSBjb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuIEFsc28sIHRoZXJlJ3MgYSBuZXcgaGVscGVyLCBgX19mb2xpb19pbmNfZ2VuYCwgdGhhdCBhYnN0cmFjdHMgdGhlIGNvcmUgZ2VuZXJhdGlvbiBpbmNyZW1lbnQgbG9naWMuIFRoZSBuZXcgYGZsdXNoX2xydV9iYXRjaGAgaGVscGVyIGlzIGEgbmljZSB0b3VjaDsgdGhpcyBjbGVhcmx5IGFpbXMgdG8gb3B0aW1pemUgbGlzdCBtYW5pcHVsYXRpb25zIGZvciBwZXJmb3JtYW5jZS5cblxuVGhlIGJpZyBjaGFuZ2UgaXMgd2l0aGluIGBpbmNfbWluX3NlcWAuIEluc3RlYWQgb2YgaW5kaXZpZHVhbGx5IG1vdmluZyBlYWNoIGZvbGlvLCBpdCdzIG5vdyBiYXRjaGluZyB0aGUgbW92ZXMhIEl0IGl0ZXJhdGVzIHRoZSBsaXN0LCBwcmVmZXRjaGVzIHRoZSBuZXh0IGVudHJ5LCBpbmNyZW1lbnRzIHRoZSBnZW5lcmF0aW9uLCBhbmQgKnRoZW4qIGRvZXMgdGhlIGZvbGlvIG1vdmUuIEl0IGtlZXBzIHRyYWNrIG9mIGEgYGJhdGNoX2VuZGAsIGFjY3VtdWxhdGluZyBmb2xpb3MgdG8gYmUgbW92ZWQuIElmIHRoZSBnZW5lcmF0aW9uIGluY3JlYXNlcyAoYGdlbl9pbmNyZWFzZWRgIGlzIHRydWUpLCBpdCB1cGRhdGVzIGEgZGVsdGEsIGFjY3VtdWxhdGVzIHRoZSBiYXRjaCwgYW5kIHVwZGF0ZXMgcHJvdGVjdGVkIHRpZXIgc3RhdHMuIElmIHRoZSBnZW5lcmF0aW9uIGRvZXNuJ3QgaW5jcmVhc2UgKHByb21vdGlvbiksIGl0IGZsdXNoZXMgdGhlIGJhdGNoIGFuZCB0aGVuIG1vdmVzIHRoZSBjdXJyZW50IGZvbGlvLiBBZnRlciB0aGUgbG9vcCwgdGhlIHJlbWFpbmluZyBiYXRjaCBpcyBmbHVzaGVkLiBUaGVyZSBhcmUgYWxzbyBuZXcgYFZNX1dBUk5fT05fT05DRWAgY2hlY2tzIGFkZGVkIHRvIGVuc3VyZSBzYW5pdHkgYXJvdW5kIHRoZSBudW1iZXIgb2YgZ2VuZXJhdGlvbnMgYW5kIGFjdGl2ZSBMUlUgc3RhdGUuIFRoZSBiYXRjaGluZyBpcyBzbWFydC5cblxuT2theSwgaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHRoZSB2ZXJ5IGNvcmUgb2YgTUdMUlUncyBhZ2luZyBhbmQgZXZpY3Rpb24gYWxnb3JpdGhtcywgaW4gdGhlIGNyaXRpY2FsIGBtbS92bXNjYW4uY2AuIEl0J3MgbWFuaXB1bGF0aW5nIGxpc3RzIHVzaW5nIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBsaXN0X3NwbGljZV90YWlsX2luaXRgIGFuZCB0cmFja2luZyBhIGdlbmVyYXRpb24sIGFuZCBiYXRjaGluZyBhY2NvdW50aW5nLiBUaGlzIGtpbmQgb2YgbG9naWMgaXMgcHJpbWUgZm9yIGZpbmRpbmcgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCBkdXJpbmcgbWVtb3J5IHByZXNzdXJlLCBMUlUgYWdpbmcsIHBhZ2UgcmVjbGFpbSwgb3IgZGVidWdnaW5nLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZz10cnVlLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgaW4gYG1tL3Ztc2Nhbi5jYCBvciByZWxhdGVkIGFyZSBnb29kIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBJIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyAoYmVjYXVzZSB0aG9zZSBoZWxwZXJzIGFyZSB1c3VhbGx5IGlubGluZWQsIHNvIHRoZSBmdXp6ZXIgd291bGRuJ3QgdGFyZ2V0IHRoZSBzeW1ib2xzIGRpcmVjdGx5KS4gTGV0J3MgbG9vayBmb3IgZnVuY3Rpb25zIGluIHRoYXQgYXJlYSByZWxhdGVkIHRvIE1HTFJVIG9yIHZtc2NhbiB0aGF0IGFyZW4ndCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjExOjQxLjI1MzUyNzU1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MDIzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4OTEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL3Ztc2Nhbi5jPTc2PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTg0LSNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG5tbS92bXNjYW4uYzoxODU6c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTE4Ni1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxcbi0tXFxubW0vdm1zY2FuLmMtMTk1LVxcbm1tL3Ztc2Nhbi5jOjE5NjpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMTk3LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDYtI2Vsc2VcXG5tbS92bXNjYW4uYzoyMDc6c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTIwOC1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxcbi0tXFxubW0vdm1zY2FuLmMtMjExLVxcbm1tL3Ztc2Nhbi5jOjIxMjpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMjEzLVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuLS1cXG5tbS92bXNjYW4uYz0yMjE9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMjItXFxubW0vdm1zY2FuLmM6MjIzOnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTIyNC17XFxuLS1cXG5tbS92bXNjYW4uYy0yMzItLyogUmV0dXJucyB0cnVlIGZvciByZWNsYWltIHRocm91Z2ggY2dyb3VwIGxpbWl0cyBvciBjZ3JvdXAgaW50ZXJmYWNlcy4gKi9cXG5tbS92bXNjYW4uYzoyMzM6c3RhdGljIGJvb2wgY2dyb3VwX3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjM0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI0MS0gKi9cXG5tbS92bXNjYW4uYzoyNDI6c3RhdGljIGJvb2wgcm9vdF9yZWNsYWltKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTI0My17XFxuLS1cXG5tbS92bXNjYW4uYy0yNTktICovXFxubW0vdm1zY2FuLmM6MjYwOnN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjYxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MC0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MTpzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy0yNzIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjc1LVxcbm1tL3Ztc2Nhbi5jOjI3NjpzdGF0aWMgYm9vbCByb290X3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjc3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MC1cXG5tbS92bXNjYW4uYzoyODE6c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy0yODIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjg2LVxcbm1tL3Ztc2Nhbi5jOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMjg4LVxcdFxcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTItXFxubW0vdm1zY2FuLmM6MjkzOnN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbm1tL3Ztc2Nhbi5jLTI5NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcnMpXFxuLS1cXG5tbS92bXNjYW4uYy0zMDgtICovXFxubW0vdm1zY2FuLmM6MzA5OnN0YXRpYyB2b2lkIGZsdXNoX3JlY2xhaW1fc3RhdGUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMzEwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NC1cXG5tbS92bXNjYW4uYzozNDU6c3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG5tbS92bXNjYW4uYy0zNDYtXFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NC1cXG5tbS92bXNjYW4uYzozNjU6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTM2Ni1cXHRcXHRcXHRcXHRcXHQgIGludCBuaWQsXFxuLS1cXG5tbS92bXNjYW4uYy0zOTQtICovXFxubW0vdm1zY2FuLmM6Mzk1OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5tbS92bXNjYW4uYy0zOTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDEzLSAqL1xcbm1tL3Ztc2Nhbi5jOjQxNDp1bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXFxubW0vdm1zY2FuLmMtNDE1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyOC1cXG5tbS92bXNjYW4uYzo0Mjk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZHJvcF9zbGFiX25vZGUoaW50IG5pZClcXG5tbS92bXNjYW4uYy00MzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDQxLVxcbm1tL3Ztc2Nhbi5jOjQ0Mjp2b2lkIGRyb3Bfc2xhYih2b2lkKVxcbm1tL3Ztc2Nhbi5jLTQ0My17XFxuLS1cXG5tbS92bXNjYW4uYy00NjYtXFxubW0vdm1zY2FuLmM6NDY3OnN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00Njgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDkzLSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NDpzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfZXJyb3Ioc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vdm1zY2FuLmMtNDk1LVxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBlcnJvcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMi1cXG5tbS92bXNjYW4uYzo1MDM6c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vdm1zY2FuLmMtNTA0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMC1cXG5tbS92bXNjYW4uYzo1MzE6dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcXG5tbS92bXNjYW4uYy01MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA0LSAqL1xcbm1tL3Ztc2Nhbi5jOjYwNTp2b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTYwNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgbnJfdGhyb3R0bGVkKVxcbi0tXFxubW0vdm1zY2FuLmM9NjI3PXR5cGVkZWYgZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy02NDAtICovXFxubW0vdm1zY2FuLmM6NjQxOnN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vdm1zY2FuLmMtNjQyLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy03MDEtICovXFxubW0vdm1zY2FuLmM6NzAyOnN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy03MDMtXFx0XFx0XFx0ICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtODE3LSAqL1xcbm1tL3Ztc2Nhbi5jOjgxODpsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3Ztc2Nhbi5jLTgxOS17XFxuLS1cXG5tbS92bXNjYW4uYy04NDAtICovXFxubW0vdm1zY2FuLmM6ODQxOnZvaWQgZm9saW9fcHV0YmFja19scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy04NDIte1xcbi0tXFxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04NTktICovXFxubW0vdm1zY2FuLmM6ODYwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjEte1xcbi0tXFxubW0vdm1zY2FuLmMtODgxLSNlbHNlXFxubW0vdm1zY2FuLmM6ODgyOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04ODMte1xcbi0tXFxubW0vdm1zY2FuLmMtODg3LVxcbm1tL3Ztc2Nhbi5jOjg4ODpzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy04ODktXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk1NC0vKiBDaGVjayBpZiBhIGZvbGlvIGlzIGRpcnR5IG9yIHVuZGVyIHdyaXRlYmFjayAqL1xcbm1tL3Ztc2Nhbi5jOjk1NTpzdGF0aWMgdm9pZCBmb2xpb19jaGVja19kaXJ0eV93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy05NTYtXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgKmRpcnR5LCBib29sICp3cml0ZWJhY2spXFxuLS1cXG5tbS92bXNjYW4uYy05ODUtXFxubW0vdm1zY2FuLmM6OTg2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG5tbS92bXNjYW4uYy05ODctXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vdm1zY2FuLmMtMTAxNi0gKi9cXG5tbS92bXNjYW4uYzoxMDE3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGVtb3RlX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZGVtb3RlX2ZvbGlvcyxcXG5tbS92bXNjYW4uYy0xMDE4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy0xMDU5LVxcbm1tL3Ztc2Nhbi5jOjEwNjA6c3RhdGljIGJvb2wgbWF5X2VudGVyX2ZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKVxcbm1tL3Ztc2Nhbi5jLTEwNjEte1xcbi0tXFxubW0vdm1zY2FuLmMtMTA3Ny0gKi9cXG5tbS92bXNjYW4uYzoxMDc4OnN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS92bXNjYW4uYy0xMDc5LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMTYwOC1cXG5tbS92bXNjYW4uYzoxNjA5OnVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS92bXNjYW4uYy0xNjEwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0xNjYzLSAqL1xcbm1tL3Ztc2Nhbi5jOjE2NjQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTE2NjUtXFx0XFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgKm5yX3pvbmVfdGFrZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0xNjk4LSAqL1xcbm1tL3Ztc2Nhbi5jOjE2OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0xNzAwLVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTgxNS0gKi9cXG5tbS92bXNjYW4uYzoxODE2OmJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy0xODE3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4NDEtICovXFxubW0vdm1zY2FuLmM6MTg0MjpzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG5tbS92bXNjYW4uYy0xODQzLVxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMTg4NS0gKi9cXG5tbS92bXNjYW4uYzoxODg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9mb2xpb3NfdG9fbHJ1KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vdm1zY2FuLmMtMTg4Ny17XFxuLS1cXG5tbS92bXNjYW4uYy0xOTU1LSAqL1xcbm1tL3Ztc2Nhbi5jOjE5NTY6c3RhdGljIGludCBjdXJyZW50X21heV90aHJvdHRsZSh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTE5NTcte1xcbi0tXFxubW0vdm1zY2FuLmMtMTk2MC1cXG5tbS92bXNjYW4uYzoxOTYxOnN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbm1tL3Ztc2Nhbi5jLTE5NjItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtMjAwMi0gKi9cXG5tbS92bXNjYW4uYzoyMDAzOnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMDA0LVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yMDg0LSAqL1xcbm1tL3Ztc2Nhbi5jOjIwODU6c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMDg2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yMTczLVxcbm1tL3Ztc2Nhbi5jOjIxNzQ6c3RhdGljIHVuc2lnbmVkIGludCByZWNsYWltX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS92bXNjYW4uYy0yMTc1LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy0yMTk4LVxcbm1tL3Ztc2Nhbi5jOjIxOTk6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxubW0vdm1zY2FuLmMtMjIwMC17XFxuLS1cXG5tbS92bXNjYW4uYy0yMjMxLVxcbm1tL3Ztc2Nhbi5jOjIyMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMjMzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjI3My0gKi9cXG5tbS92bXNjYW4uYzoyMjc0OnN0YXRpYyBib29sIGluYWN0aXZlX2lzX2xvdyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgaW5hY3RpdmVfbHJ1KVxcbm1tL3Ztc2Nhbi5jLTIyNzUte1xcbi0tXFxubW0vdm1zY2FuLmM9MjI5Mz1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjk5LVxcbm1tL3Ztc2Nhbi5jOjIzMDA6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjMwMS17XFxuLS1cXG5tbS92bXNjYW4uYy0yNDYzLVxcbm1tL3Ztc2Nhbi5jOjI0NjQ6c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9wcmVzc3VyZV9iYWxhbmNlKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI0NjUtXFx0XFx0XFx0aW50IHN3YXBwaW5lc3MsIHU2NCAqZnJhY3Rpb24sIHU2NCAqZGVub21pbmF0b3IpXFxuLS1cXG5tbS92bXNjYW4uYy0yNTAwLVxcbm1tL3Ztc2Nhbi5jOjI1MDE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYXBwbHlfcHJvcG9ydGlvbmFsX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTI1MDItXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgc2NhbilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI1NjktICovXFxubW0vdm1zY2FuLmM6MjU3MDpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI1NzEtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjk5LSAqL1xcbm1tL3Ztc2Nhbi5jOjI3MDA6c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy0yNzAxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MTMtXFxubW0vdm1zY2FuLmM6MjcxNDpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYy0yNzE1LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzE3LSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI3MTgtI2Vsc2VcXG5tbS92bXNjYW4uYzoyNzE5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzIwLSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxuLS1cXG5tbS92bXNjYW4uYy0yNzIyLVxcbm1tL3Ztc2Nhbi5jOjI3MjM6c3RhdGljIGJvb2wgc2hvdWxkX3dhbGtfbW11KHZvaWQpXFxubW0vdm1zY2FuLmMtMjcyNC17XFxuLS1cXG5tbS92bXNjYW4uYy0yNzI3LVxcbm1tL3Ztc2Nhbi5jOjI3Mjg6c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTI3Mjkte1xcbi0tXFxubW0vdm1zY2FuLmMtMjc2My1cXG5tbS92bXNjYW4uYzoyNzY0OnN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy0yNzY1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3ODMtXFxubW0vdm1zY2FuLmM6Mjc4NDpzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjc4NS17XFxuLS1cXG5tbS92bXNjYW4uYy0yODAyLVxcbm1tL3Ztc2Nhbi5jOjI4MDM6c3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTI4MDQte1xcbi0tXFxubW0vdm1zY2FuLmMtMjgwNy1cXG5tbS92bXNjYW4uYzoyODA4OnN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtMjgwOS17XFxuLS1cXG5tbS92bXNjYW4uYy0yODQ5LVxcbm1tL3Ztc2Nhbi5jOjI4NTA6c3RhdGljIGlubGluZSBpbnQgZmlsdGVyX2dlbl9mcm9tX3NlcSh1bnNpZ25lZCBsb25nIHNlcSlcXG5tbS92bXNjYW4uYy0yODUxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NTQtXFxubW0vdm1zY2FuLmM6Mjg1NTpzdGF0aWMgdm9pZCBnZXRfaXRlbV9rZXkodm9pZCAqaXRlbSwgaW50ICprZXkpXFxubW0vdm1zY2FuLmMtMjg1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy0yODY0LVxcbm1tL3Ztc2Nhbi5jOjI4NjU6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcXG5tbS92bXNjYW4uYy0yODY2LVxcdFxcdFxcdCAgICAgIHZvaWQgKml0ZW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODgwLVxcbm1tL3Ztc2Nhbi5jOjI4ODE6c3RhdGljIHZvaWQgdXBkYXRlX2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4ODItXFx0XFx0XFx0XFx0dm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTktXFxubW0vdm1zY2FuLmM6MjkwMDpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5tbS92bXNjYW4uYy0yOTAxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjEtXFxubW0vdm1zY2FuLmM6MjkyMjpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTI5MjMte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkzNy1cXG5tbS92bXNjYW4uYzoyOTM4OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTM5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDItXFxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjEtXFxubW0vdm1zY2FuLmM6Mjk2Mjp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjMte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk4OC1cXG5tbS92bXNjYW4uYzoyOTg5OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk5MC17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDI4LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMzAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1OS1cXG5tbS92bXNjYW4uYzozMDYwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMzA2MS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDY0LVxcbm1tL3Ztc2Nhbi5jOjMwNjU6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTMwNjYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA2OS1cXG5tbS92bXNjYW4uYzozMDcwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMwNzEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA3Ni1cXG5tbS92bXNjYW4uYzozMDc3OnN0YXRpYyB2b2lkIHJlc2V0X21tX3N0YXRzKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdClcXG5tbS92bXNjYW4uYy0zMDc4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMxMDEtXFxubW0vdm1zY2FuLmM6MzEwMjpzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Qoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IG1tX3N0cnVjdCAqKml0ZXIpXFxubW0vdm1zY2FuLmMtMzEwMy17XFxuLS1cXG5tbS92bXNjYW4uYy0zMTY1LVxcbm1tL3Ztc2Nhbi5jOjMxNjY6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0X25vd2FsayhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTMxNjcte1xcbi0tXFxubW0vdm1zY2FuLmM9MzIxMj1zdHJ1Y3QgY3RybF9wb3Mge1xcbi0tXFxubW0vdm1zY2FuLmMtMzIxNy1cXG5tbS92bXNjYW4uYzozMjE4OnN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbm1tL3Ztc2Nhbi5jLTMyMTktXFx0XFx0XFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyMzYtXFxubW0vdm1zY2FuLmM6MzIzNzpzdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3ZlcilcXG5tbS92bXNjYW4uYy0zMjM4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyNzItXFxubW0vdm1zY2FuLmM6MzI3MzpzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbm1tL3Ztc2Nhbi5jLTMyNzQte1xcbi0tXFxubW0vdm1zY2FuLmMtMzI4OC0vKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG5tbS92bXNjYW4uYzozMjg5OnN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTMyOTAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzMxNy1cXG5tbS92bXNjYW4uYzozMzE4OnN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxubW0vdm1zY2FuLmMtMzMxOS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMzQ1LS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXFxubW0vdm1zY2FuLmM6MzM0NjpzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3Ztc2Nhbi5jLTMzNDcte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1OC1cXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMzM2MC1cXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzc0LVxcbm1tL3Ztc2Nhbi5jOjMzNzU6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNzYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzQwMS1cXG5tbS92bXNjYW4uYzozNDAyOnN0YXRpYyBpbnQgc2hvdWxkX3NraXBfdm1hKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG5tbS92bXNjYW4uYy0zNDAzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NDctICovXFxubW0vdm1zY2FuLmM6MzQ0ODpzdGF0aWMgYm9vbCBnZXRfbmV4dF92bWEodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtbV93YWxrICphcmdzLFxcbm1tL3Ztc2Nhbi5jLTM0NDktXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnZtX3N0YXJ0LCB1bnNpZ25lZCBsb25nICp2bV9lbmQpXFxuLS1cXG5tbS92bXNjYW4uYy0zNDczLVxcbm1tL3Ztc2Nhbi5jOjM0NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3B0ZV9wZm4ocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL3Ztc2Nhbi5jLTM0NzUtXFx0XFx0XFx0XFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy0zNDk4LVxcbm1tL3Ztc2Nhbi5jOjM0OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3BtZF9wZm4ocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL3Ztc2Nhbi5jLTM1MDAtXFx0XFx0XFx0XFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTIwLVxcbm1tL3Ztc2Nhbi5jOjM1MjE6c3RhdGljIHN0cnVjdCBmb2xpbyAqZ2V0X3Bmbl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTM1MjItXFx0XFx0XFx0XFx0ICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1MzktXFxubW0vdm1zY2FuLmM6MzU0MDpzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbm1tL3Ztc2Nhbi5jLTM1NDEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzU0Ny1cXG5tbS92bXNjYW4uYzozNTQ4OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3Ztc2Nhbi5jLTM1NDktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTcxLVxcbm1tL3Ztc2Nhbi5jOjM1NzI6c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzU3My1cXHRcXHRcXHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NjItXFxubW0vdm1zY2FuLmM6MzY2MzpzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS92bXNjYW4uYy0zNjY0LVxcdFxcdFxcdFxcdCAgc3RydWN0IG1tX3dhbGsgKmFyZ3MsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyAqZmlyc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0zNzUwLVxcbm1tL3Ztc2Nhbi5jOjM3NTE6c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzc1Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MjMtXFxubW0vdm1zY2FuLmM6MzgyNDpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3Ztc2Nhbi5jLTM4MjUtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4NjUtXFxubW0vdm1zY2FuLmM6Mzg2NjpzdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTM4Njcte1xcbi0tXFxubW0vdm1zY2FuLmMtMzkwMC1cXG5tbS92bXNjYW4uYzozOTAxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxcbm1tL3Ztc2Nhbi5jLTM5MDIte1xcbi0tXFxubW0vdm1zY2FuLmMtMzkyMC1cXG5tbS92bXNjYW4uYzozOTIxOnN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG5tbS92bXNjYW4uYy0zOTIyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MzMtXFxubW0vdm1zY2FuLmM6MzkzNDpzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXFxubW0vdm1zY2FuLmMtMzkzNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTQ2LVxcbm1tL3Ztc2Nhbi5jOjM5NDc6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtMzk0OC17XFxuLS1cXG5tbS92bXNjYW4uYy00MDI4LVxcbm1tL3Ztc2Nhbi5jOjQwMjk6c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtNDAzMC17XFxuLS1cXG5tbS92bXNjYW4uYy00MDgwLVxcbm1tL3Ztc2Nhbi5jOjQwODE6c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtNDA4Mi17XFxuLS1cXG5tbS92bXNjYW4uYy00MTQ1LVxcbm1tL3Ztc2Nhbi5jOjQxNDY6c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtNDE0Ny1cXHRcXHRcXHQgICAgICAgaW50IHN3YXBwaW5lc3MsIGJvb2wgZm9yY2Vfc2NhbilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMDMtXFxubW0vdm1zY2FuLmM6NDIwNDpzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00MjA1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMjktXFxubW0vdm1zY2FuLmM6NDIzMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00MjMxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyNDgtXFxubW0vdm1zY2FuLmM6NDI0OTpzdGF0aWMgYm9vbCBscnV2ZWNfaXNfc2l6YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQyNTAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDI2MC1cXG5tbS92bXNjYW4uYzo0MjYxOnN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTQyNjItXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG1pbl90dGwpXFxuLS1cXG5tbS92bXNjYW4uYz00MjgzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTQyODQtXFxubW0vdm1zY2FuLmM6NDI4NTpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQyODYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDMzMS0gKi9cXG5tbS92bXNjYW4uYzo0MzMyOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MzMzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0NTA9ZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy00NDU3LVxcbm1tL3Ztc2Nhbi5jOjQ0NTg6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxubW0vdm1zY2FuLmMtNDQ1OS17XFxuLS1cXG5tbS92bXNjYW4uYy00NTA1LVxcbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUwNy17XFxuLS1cXG5tbS92bXNjYW4uYy00NTMwLVxcbm1tL3Ztc2Nhbi5jOjQ1MzE6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU0MS1cXG5tbS92bXNjYW4uYzo0NTQyOnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjctXFxubW0vdm1zY2FuLmM6NDU2ODp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTY5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NzYtXFxubW0vdm1zY2FuLmM6NDU3Nzpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1Nzgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU4OS1cXG5tbS92bXNjYW4uYzo0NTkwOnN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTQ1OTEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYyMy0gKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTE6NDEuMzA2MTM3ODE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTY3NzQ3MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgbHJ1X2dlbl9zZXFfd3JpdGVgIGFuZCBpdHMgQ29ubmVjdGlvbnMqKlxuXG5Pa2F5LCBzbyBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgc3RhdGljIGZpbGUgb3BlcmF0aW9uIGhhbmRsZXIg4oCTIEkgZ2V0IHRoYXQuIEJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgVk0gc2Nhbm5pbmcgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRoYXQgYXJlIHNvbWVob3cgcmVsYXRlZCB0byBgbHJ1X2dlbmAgb3IsIG1vcmUgYnJvYWRseSwgdGhlIFZNIHNjYW4gaXRzZWxmLiBJIHN1c3BlY3QgdGhlcmUncyBhIGNvbm5lY3Rpb24sIGFuZCBJIG5lZWQgdG8gbWFwIGl0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbi4gSSdsbCBzY2FuIHRocm91Z2ggaXQgYW5kIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGNhbGwgb3IgYmUgY2FsbGVkIGJ5IHRoaXMgc3RhdGljIGhhbmRsZXIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGUgcmVsYXRpb25zaGlwIGlzIGxpa2VseSB0aGVyZSBhbmQgSSB3aWxsIGZpbmQgdGhlIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY1NSwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjE0LjQ3Mzg4ODIyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NzEwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgW2EtekEtWjAtOV9dK3xedW5zaWduZWQgbG9uZyBbYS16QS1aMC05X10rfF5pbnQgW2EtekEtWjAtOV9dK3xeYm9vbCBbYS16QS1aMC05X10rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIxMj1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy0yMjAtICovXFxubW0vdm1zY2FuLmM6MjIxOmludCB2bV9zd2FwcGluZXNzID0gNjA7XFxubW0vdm1zY2FuLmMtMjIyLVxcbi0tXFxubW0vdm1zY2FuLmM9MzY1PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NC0gKi9cXG5tbS92bXNjYW4uYzozOTU6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3Ztc2Nhbi5jLTM5Ni17XFxuLS1cXG5tbS92bXNjYW4uYy00MTMtICovXFxubW0vdm1zY2FuLmM6NDE0OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcXG5tbS92bXNjYW4uYy00MTUte1xcbi0tXFxubW0vdm1zY2FuLmM9NDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRyb3Bfc2xhYl9ub2RlKGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NDEtXFxubW0vdm1zY2FuLmM6NDQyOnZvaWQgZHJvcF9zbGFiKHZvaWQpXFxubW0vdm1zY2FuLmMtNDQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMz1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMC1cXG5tbS92bXNjYW4uYzo1MzE6dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcXG5tbS92bXNjYW4uYy01MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA0LSAqL1xcbm1tL3Ztc2Nhbi5jOjYwNTp2b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTYwNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgbnJfdGhyb3R0bGVkKVxcbi0tXFxubW0vdm1zY2FuLmM9ODE4PWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy04NDAtICovXFxubW0vdm1zY2FuLmM6ODQxOnZvaWQgZm9saW9fcHV0YmFja19scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy04NDIte1xcbi0tXFxubW0vdm1zY2FuLmM9MTY5OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTgxNS0gKi9cXG5tbS92bXNjYW4uYzoxODE2OmJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy0xODE3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIxNzQ9c3RhdGljIHVuc2lnbmVkIGludCByZWNsYWltX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIxOTgtXFxubW0vdm1zY2FuLmM6MjE5OTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS92bXNjYW4uYy0yMjAwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5NDM9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTYxLVxcbm1tL3Ztc2Nhbi5jOjI5NjI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTYzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5ODgtXFxubW0vdm1zY2FuLmM6Mjk4OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5OTAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmM6MzAyOTp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0zMDMwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyODU9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzEtICovXFxubW0vdm1zY2FuLmM6NDMzMjpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzMy17XFxuLS1cXG5tbS92bXNjYW4uYz00NDU4PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDUwNS1cXG5tbS92bXNjYW4uYzo0NTA2OnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MDcte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUzMC1cXG5tbS92bXNjYW4uYzo0NTMxOnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NDEtXFxubW0vdm1zY2FuLmM6NDU0Mjp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDU0My17XFxuLS1cXG5tbS92bXNjYW4uYy00NTY3LVxcbm1tL3Ztc2Nhbi5jOjQ1Njg6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDU2OS17XFxuLS1cXG5tbS92bXNjYW4uYy00NTc2LVxcbm1tL3Ztc2Nhbi5jOjQ1Nzc6Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTc4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1OTA9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00NjIzLSAqL1xcbm1tL3Ztc2Nhbi5jOjQ2MjQ6dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyNS17XFxuLS1cXG5tbS92bXNjYW4uYz00NjY1PXN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00Njk1LVxcbm1tL3Ztc2Nhbi5jOjQ2OTY6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS92bXNjYW4uYy00Njk3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yb19mb3BzID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNTkzNC1cXG5tbS92bXNjYW4uYzo1OTM1OnZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxubW0vdm1zY2FuLmMtNTkzNi17XFxuLS1cXG5tbS92bXNjYW4uYy01OTQ2LVxcbm1tL3Ztc2Nhbi5jOjU5NDc6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy01OTQ4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NjgtXFxubW0vdm1zY2FuLmM6NTk2OTp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNTk3MC17XFxuLS1cXG5tbS92bXNjYW4uYy01OTc5LVxcbm1tL3Ztc2Nhbi5jOjU5ODA6dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTU5ODEte1xcbi0tXFxubW0vdm1zY2FuLmM9Njc2NT1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NDQtXFxubW0vdm1zY2FuLmM6Njg0NTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02ODQ2LVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4OTAtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY4OTE6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODkyLVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5MzAtXFxubW0vdm1zY2FuLmM6NjkzMTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY5MzItXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NzEtI2Vsc2VcXG5tbS92bXNjYW4uYzo2OTcyOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjk3My1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9NzU2OD1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzY0OC0gKi9cXG5tbS92bXNjYW4uYzo3NjQ5OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzY1MC1cXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NjkzLVxcbm1tL3Ztc2Nhbi5jOjc2OTQ6dm9pZCBrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdCwgZW51bSBrc3dhcGRfY2xlYXJfaG9wZWxlc3NfcmVhc29uIHJlYXNvbilcXG5tbS92bXNjYW4uYy03Njk1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3MDYtICovXFxubW0vdm1zY2FuLmM6NzcwNzp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03NzA4LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NzE0LVxcbm1tL3Ztc2Nhbi5jOjc3MTU6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTc3MTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNzcyOC0gKi9cXG5tbS92bXNjYW4uYzo3NzI5OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc3MzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNzc2MS0gKi9cXG5tbS92bXNjYW4uYzo3NzYyOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcXG5tbS92bXNjYW4uYy03NzYzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3ODUtICovXFxubW0vdm1zY2FuLmM6Nzc4Njp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc3ODcte1xcbi0tXFxubW0vdm1zY2FuLmM9NzgzMj1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NDAtICovXFxubW0vdm1zY2FuLmM6Nzg0MTppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcXG5tbS92bXNjYW4uYy03ODQyLVxcbi0tXFxubW0vdm1zY2FuLmMtNzg1My0gKi9cXG5tbS92bXNjYW4uYzo3ODU0OmludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvID0gMTtcXG5tbS92bXNjYW4uYy03ODU1LVxcbi0tXFxubW0vdm1zY2FuLmMtNzg1OS0gKi9cXG5tbS92bXNjYW4uYzo3ODYwOmludCBzeXNjdGxfbWluX3NsYWJfcmF0aW8gPSA1O1xcbm1tL3Ztc2Nhbi5jLTc4NjEtXFxuLS1cXG5tbS92bXNjYW4uYz03OTA5PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy03OTUxLVxcbm1tL3Ztc2Nhbi5jOjc5NTI6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bXNjYW4uYy03OTUzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMjg9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtODAzMy1cXG5tbS92bXNjYW4uYzo4MDM0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy04MDM1LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNDgtICovXFxubW0vdm1zY2FuLmM6ODE0OTp2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbm1tL3Ztc2Nhbi5jLTgxNTAte1xcbi0tXFxubW0vdm1zY2FuLmM9ODE5Nz1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XFxubW0vdm1zY2FuLmM6ODE5ODppbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbm1tL3Ztc2Nhbi5jLTgxOTkte1xcbi0tXFxubW0vdm1zY2FuLmMtODIwMi1cXG5tbS92bXNjYW4uYzo4MjAzOnZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxubW0vdm1zY2FuLmMtODIwNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjE0LjUyNDc2NjQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyODk1ODg3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IHdpdGggTFJVIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhbWF0aW9uOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtYXhfbHJ1X2dlbl9tZW1jZ2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2dgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gU2VlbXMgbGlrZSBhIHdob2xlIGVjb3N5c3RlbSBvZiByZWNsYW1hdGlvbiBzdHJhdGVnaWVzIGlzIGF0IHBsYXkgaGVyZSwgY2VudGVyZWQgYXJvdW5kIHRoaXMgTFJVIGdlbmVyYXRpb24gY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYmVoaW5kIHRoaXMuIERpZ2dpbmcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUsIEkgc2VlIHRoZSBjb3JlIGBjb25maWcgTFJVX0dFTmAgZGVmaW5lZCwgYWxvbmcgd2l0aCBgY29uZmlnIExSVV9HRU5fRU5BQkxFRGAgd2hpY2ggaW1wbGllcyB0aGlzIGlzIGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQuIGBjb25maWcgTFJVX0dFTl9TVEFUU2AgaXMgaW50ZXJlc3RpbmcsIGZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZy4uLiB0aGF0J3MgYWx3YXlzIGhlbHBmdWwuIEFuZCBmaW5hbGx5LCBgY29uZmlnIExSVV9HRU5fV0FMS1NfTU1VYCBpcyBhIHBvaW50IG9mIGNvbmNlcm4gLSB0aGUgTU1VIGludGVyYWN0aW9uIGNhbiBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBsb29raW5nIGF0IHRoZSBhcmNoaXRlY3R1cmUuXG5cbkZpbmFsbHksIEknbSBqdXN0IGN1cmlvdXMgLSBpcyBgQVJDSF9IQVNfUFJFRkVUQ0hXYCBldmVuIGEgY29uZmlnPyBJIHNob3VsZCBncmVwIHRoZSBLY29uZmlnIHRvIGJlIHN1cmUsIGluIGNhc2UgdGhpcyBpbXBhY3RzIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzQ1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjIyLjgxNDM1ODI3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0ODM0NDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19QUkVGRVRDSFdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zNT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQ0LSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hcXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjQ1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00Ni1cXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTExMT1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTE4LSNpZiBfX0xJTlVYX0FSTV9BUkNIX18gXFx1MDAzZT0gNyBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTE5OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTIwLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKnB0cilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNDAwLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NDAxOiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00MDItc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICpwdHIpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xOTk9dW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMjE1LVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIxNjojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIxNy0jZGVmaW5lIHByZWZldGNodyh4KSBfX2J1aWx0aW5fcHJlZmV0Y2goKHgpLCAxLCAxKVxcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTM2MT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzg4LVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozODk6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzkwLSNkZWZpbmUgcHJlZmV0Y2h3KHgpIF9fYnVpbHRpbl9wcmVmZXRjaCgoeCksIDEsIDEpXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oPTIzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICphZGRyKVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJlZmV0Y2guaC0zNC0jaWZkZWYgQ09ORklHX1BBMjBcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oOjM1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJlZmV0Y2guaC0zNi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9Mzk0PWludCB2YWxpZGF0ZV9zcF9zaXplKHVuc2lnbmVkIGxvbmcgc3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00MDAtI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDo0MDE6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNDAyLVxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xNjk9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTE3My1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjE3NDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTc1LXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeClcXG4tLVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmg9MTgxPWV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oLTE4OS0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaDoxOTA6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oLTE5MS1cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0Lmg9MTc5PXVuc2lnbmVkIGxvbmcgX19nZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgtMTg5LSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oOjE5MDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgtMTkxLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9NjI0PWV4dGVybiBjaGFyXFx0XFx0XFx0aWdub3JlX2ZwdV9pcnE7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC02MjYtI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVCAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NjI3OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNjI4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oPTE4PXN0cnVjdCBwYWdlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oLTQxLVxcbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaDo0MjojaWZuZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaC00My0jZGVmaW5lIHByZWZldGNodyh4KSBfX2J1aWx0aW5fcHJlZmV0Y2goeCwxKVxcbi0tXFxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xODMtXFxubW0vdm1zY2FuLmM6MTg0OiNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG5tbS92bXNjYW4uYy0xODUtc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMjoyNC42NjI3MTA0OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2OTAyOTc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1HTFJVIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNR0xSVSBwYXRjaCwgYW5kIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIG5vdGluZyB0aGUgZGVmaW5pdGlvbiBvZiBgQVJDSF9IQVNfUFJFRkVUQ0hXYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBwcmVmZXRjaGluZyBvcHRpbWl6YXRpb25zLCBhbmQgd2hlcmUgdGhhdCBsaXZlcyAoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXJzKS4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgb2YgY291cnNlLCBhbmQgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBgTUVNQ0dgIHBsYXlzIGEgcm9sZSBpbiBtZW1jZyBMUlUgZ2VuIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBMUlVfR0VOYDsgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIE1NVSwgYW5kIGl0J3MgY29udGluZ2VudCBvbiBiaXQgYXZhaWxhYmlsaXR5IHdpdGhpbiBgZm9saW8tXHUwMDNlZmxhZ3NgIGFuZCB0aGVuIGVpdGhlciBgNjRCSVRgIG9yIHRoZSBTUEFSU0VNRU0gY29uZmlndXJhdGlvbi4gVGhlIHByZXNlbmNlIG9mIGBMUlVfR0VOX0VOQUJMRURgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgZGVwZW5kaW5nIG9ubHkgb24gYExSVV9HRU5gLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQncyBjbGVhciB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBtb2RpZmljYXRpb25zLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gc2VlaW5nIGFyZSB0aGluZ3MgbGlrZSBgaW5jX21pbl9zZXFgLCBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgZmx1c2hfbHJ1X2JhdGNoYCwgYHByZWZldGNod19wcmV2X2xydV9mb2xpb2AsIGFuZCBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYC4gSSBzZWUgdGhhdCB0aGUgY29yZSBMUlUgZ2VuIGZ1bmN0aW9ucyBsaWtlIGBfX2ZvbGlvX2luY19nZW5gLCBgZm9saW9faW5jX2dlbmAsIGBmbHVzaF9scnVfYmF0Y2hgLCBhbmQgYGluY19taW5fc2VxYCBhcmUgYWxsIHN0YXRpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gU28gSSB3aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBJIHNlZSB0aGUgZnVuY3Rpb25zIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYG1heF9scnVfZ2VuX21lbWNnYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi5cblxuVG8gd3JhcCB0aGlzIHVwLCBJIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBnb2luZyB0byB0YWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCBiZWNhdXNlIGl0J3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBNR0xSVSBmb2xpbyBtYW5hZ2VtZW50IGFuZCBMUlUgbGlzdCBtYW5pcHVsYXRpb24gd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0J3MgcmVmYWN0b3JpbmcgYGluY19taW5fc2VxYCB0byBiYXRjaCBMUlUgbGlzdCBtYW5pcHVsYXRpb25zLCB3aGljaCBjYW4gaGF2ZSBpbnRlcmVzdGluZyBlZmZlY3RzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBgW1wiTFJVX0dFTlwiLCBcIkxSVV9HRU5fRU5BQkxFRFwiXWAuIEZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgW1widXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLCBcIm1heF9scnVfZ2VuX21lbWNnXCIsIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIiwgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsIFwic2hyaW5rX2FsbF9tZW1vcnlcIl1gLiBXaXRoIGFsbCBvZiB0aGlzIGluIGhhbmQsIEkgY2FuIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNTksIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjM3LjM1MzAxMjExMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzA2MTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1heF9scnVfZ2VuX21lbWNnXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBhZ2luZyBhbmQgbGlzdCBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jLiBTcGVjaWZpY2FsbHksIGluY19taW5fc2VxIGFuZCBmb2xpb19pbmNfZ2VuIGFyZSB1cGRhdGVkIHRvIGJhdGNoIGxpc3Qgc3BsaWNpbmcgKHZpYSBmbHVzaF9scnVfYmF0Y2gpIGFuZCBnZW5lcmF0aW9uIGFjY291bnRpbmcsIGNoYW5naW5nIGhvdyBmb2xpb3MgYXJlIG1vdmVkIGFuZCB1cGRhdGVkIGR1cmluZyBMUlUgYWdpbmcgYW5kIG1lbW9yeSByZWNsYWltLiBUaGlzIGlzIGNvcmUgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjM3LjQzMzMyNzgxNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzMjI4MzcxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMjozNy40MzM4NjE5NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjMyMjI5NzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIChzdHJ1Y3QgZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQsIGFuZCBnZW5lcmF0aW9uIGNvdW50ZXJzL2ZsYWdzKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBnZW5faW5jcmVhc2VkLCBkZWx0YSwgYmF0Y2hfZW5kLCBhbmQgdGhlIG1vdmFibGUgbGlzdCBoZWFkKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN5c2NhbGwvaW9jdGwvc29ja2V0IGJvdW5kYXJpZXMsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbGlua2VkIGxpc3QgY29ycnVwdGlvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgYWNjb3VudGluZyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBDT05GSUdfREVCVUdfTElTVCwgYW5kIGtlcm5lbCBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZDYyOGExMGI5OGY1Zjg0ZmIyNDExZWYzNmViYjliY2RkZmJjN2RlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMTowOTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xODIsMTcgKzE4MiwzNyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiB9O1xuIFxuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpXHRcdFx0XFxcbi1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKChfZm9saW8pLVx1MDAzZWxydS5wcmV2ICE9IF9iYXNlKSB7XHRcdFx0XFxcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKnByZXY7XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjYoX2ZvbGlvLVx1MDAzZWxydSkpO1x0XHRcXFxuLVx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbi1cdFx0fVx0XHRcdFx0XHRcdFx0XFxcbi1cdH0gd2hpbGUgKDApXG4rc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuK3tcbitcdGlmIChmb2xpby1cdTAwM2VscnUucHJldiAhPSBiYXNlKSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqcHJldjtcbitcbitcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbit7XG4rXHRpZiAoZm9saW8tXHUwMDNlbHJ1Lm5leHQgIT0gYmFzZSkge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4rXG4rXHRcdG5leHQgPSBsaXN0X2VudHJ5KGZvbGlvLVx1MDAzZWxydS5uZXh0LCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdHByZWZldGNodyhcdTAwMjZuZXh0LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4gI2Vsc2Vcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMClcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTE2OTUsNyArMTcxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XG4tXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XG4rXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjKTtcbiBcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG5AQCAtMzI5NSwyMSArMzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gfVxuIFxuLS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4rXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4rXHRcdFx0aWYgKGluY3JlYXNlZClcbitcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0fVxuIFxuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCArMzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0aWYgKGluY3JlYXNlZClcbitcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4rXHRyZXR1cm4gbmV3X2dlbjtcbit9XG4rXG4rLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuK1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRpZiAoZ2VuX2luY3JlYXNlZClcbitcdFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcdHJldHVybiBuZXdfZ2VuO1xuIH1cbiBcbkBAIC0zODk3LDYgKzM5MzEsMTkgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLFxuK1x0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KVxuK3tcbitcdExJU1RfSEVBRChtb3ZhYmxlKTtcbitcbitcdGlmICghKmJhdGNoX2VuZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4rXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXHUwMDI2bW92YWJsZSwgZHN0KTtcbitcdCpiYXRjaF9lbmQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRpbnQgem9uZTtcbkBAIC0zOTA0LDYgKzM5NTEsNyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTEzLDM1ICszOTYxLDYzIEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFx0aWYgKCF0eXBlIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzcylcbiBcdFx0Z290byBkb25lO1xuIFxuK1x0Vk1fV0FSTl9PTl9PTkNFKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT1cbitcdFx0XHRscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIHRhcmdldF9nZW4pKTtcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspIHtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xuK1x0XHRsb25nIGRlbHRhID0gMDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuK1x0XHRcdHByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCk7XG4rXHRcdFx0cG9zID0gcG9zLVx1MDAzZW5leHQ7XG4rXHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBJZiBnZW5faW5jcmVhc2VkIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHJvbW90aW9uLiBQdXQgZm9saW9zXG4rXHRcdFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxuK1x0XHRcdCAqIHRoZSB0YWlsIG9mIHRoZSBzZWNvbmQtb2xkZXN0IGdlbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoZ2VuX2luY3JlYXNlZCkge1xuK1x0XHRcdFx0ZGVsdGEgKz0gbnJfcGFnZXM7XG4rXHRcdFx0XHRiYXRjaF9lbmQgPSBcdTAwMjZmb2xpby1cdTAwM2VscnU7XG4gXG4tXHRcdFx0LyogZG9uJ3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4tXHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4tXHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbi1cdFx0XHRcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdFx0XHRcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuK1x0XHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4rXHRcdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuIFxuLVx0XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuLVx0XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgZGVsdGEpO1xuK1x0XHRcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4rXHRcdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIG5yX3BhZ2VzKTtcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuK1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXG4rXHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuK1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTtcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICsgZGVsdGEpO1xuK1x0XHRpZiAoIXJlbWFpbmluZylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMjozNy40MzM4NjYzMjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIzMjIyNjg0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBtbS92bXNjYW4uYyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCB0byBgbW0vdm1zY2FuLmNgIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gZmlyZSB1cCB0aGUgS01TQU4gZnV6emluZyBlbmdpbmUgb3IgaWYgS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwIHdpbGwgZG8gdGhlIHRyaWNrLlxuXG5GaXJzdCwgSSdtIHNlZWluZyBhIHJlZmFjdG9yaW5nIHdpdGggY2hhbmdlcyBhcm91bmQgcHJlZmV0Y2hpbmcgYW5kIHRoZSBMUlUgbGlzdCBtYW5pcHVsYXRpb24uIFNwZWNpZmljYWxseSwgaW5saW5pbmcgYHByZWZldGNod2AgaGVscGVycywgdXBkYXRpbmcgY2FsbHMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AsIHNwbGl0dGluZyBgZm9saW9faW5jX2dlbmAsIGFuZCBiYXRjaGluZyBmb2xpbyBtb3ZlcyB3aXRoIGBmbHVzaF9scnVfYmF0Y2hgIGluIHRoZSBtdWx0aS1nZW4gTFJVIChNR0xSVSkgY29kZS4gV2UncmUgZGVhbGluZyB3aXRoIGxpc3QgbWFuaXB1bGF0aW9uIChgc3RydWN0IGxpc3RfaGVhZGAsIGBmb2xpby1cdTAwM2VscnVgKSwgZm9saW8gZmxhZ3MvZ2VuZXJhdGlvbiB0cmFja2luZyAoYGZvbGlvLVx1MDAzZWZsYWdzLmZgLCBgY21weGNoZ2ApLCBmb2xpbyBhY2NvdW50aW5nIChgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCwgYGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRgKSwgYW5kIG1lbW9yeSBwcmVmZXRjaGluZyAoYHByZWZldGNod2ApLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mbyBsZWFrcz8gTGV0J3MgY2hlY2sgYWdhaW5zdCBvdXIgS01TQU4gY3JpdGVyaWEuXG5cbjEuICAqKlVzZXItc3BhY2UgaW50ZXJhY3Rpb24/KiogTm8sIG5vdGhpbmcgaGVyZSBpcyB0b3VjaGluZyB1c2VyIHNwYWNlIHZpYSBjb3B5IG9wZXJhdGlvbnMsIHB1dCBvcGVyYXRpb25zLCBuZXRsaW5rLCBpb2N0bHMsIG9yIGFueXRoaW5nIHNpbWlsYXIuIE5vIHdvcnJpZXMgdGhlcmUuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogV2UgaGF2ZSBhIGBib29sIGdlbl9pbmNyZWFzZWRgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gYF9fZm9saW9faW5jX2dlbmAsIGJ1dCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZC4gYGJhdGNoX2VuZGAsIGBwb3NgLCBhbmQgYGRlbHRhYCBhcmUgYWxsIGluaXRpYWxpemVkIGFzIHdlbGwuIFNvLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IGhlcmUgZWl0aGVyLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24/KiogTm8gbmV3IGFsbG9jYXRpb25zLCBzbyB0aGF0J3MgYSBub24taXNzdWUuXG40LiAgKipCb3VuZHMgY2hlY2tzIGFuZCB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vIGNvbmNlcm5zIHdpdGggdGhhdCBoZXJlLlxuXG5TbywgZnJvbSBteSBhc3Nlc3NtZW50LCB0aGVyZSBhcmVuJ3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgaW5mbyBsZWFrcyB0aGF0IG5lY2Vzc2l0YXRlIEtNU0FOLlxuXG5XaGF0IGFib3V0IG90aGVyIGJ1Z3MgdGhhdCBtaWdodCBjcmVlcCBpbj8gTGlzdCBjb3JydXB0aW9uLCBwYWdlIGZsYWcgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBhY2NvdW50aW5nIGltYmFsYW5jZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgYXJlIGFsbCBwb3RlbnRpYWwuIEhvd2V2ZXIsIEtBU0FOIGFuZCBvdXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgbGlrZSBDT05GSUdcXF9ERUJVR1xcX0xJU1QgYW5kIFZNXFxfV0FSTlxcX09OXFxfT05DRSwgYXJlIHdlbGwtc3VpdGVkIHRvIGNhdGNoIHRoZXNlIGlzc3Vlcy4gV2UgY2FuIGFsc28gdXNlIGRhdGEtcmFjZSBkZXRlY3RvcnMuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBmbHVzaF9scnVfYmF0Y2hgLCBhcyB0aGV5IGludm9sdmUgbGlzdCBtYW5pcHVsYXRpb24uIEFmdGVyIGEgYnJpZWYgcmV2aWV3LCBpdCBpcyBjbGVhciB0aGF0IHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5TbywgSSB0aGluayB3ZSdyZSBnb29kIHRvIHByb2NlZWQgd2l0aCBzdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTi4gV2UgZG9uJ3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGZvciB0aGlzIHBhdGNoLiBJJ2xsIGdvIGFoZWFkIGFuZCBpbnZva2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDYsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEzOjI5Ljc1NjEzODk1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIChzdHJ1Y3QgZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQsIGFuZCBnZW5lcmF0aW9uIGNvdW50ZXJzL2ZsYWdzKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBnZW5faW5jcmVhc2VkLCBkZWx0YSwgYmF0Y2hfZW5kLCBhbmQgdGhlIG1vdmFibGUgbGlzdCBoZWFkKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN5c2NhbGwvaW9jdGwvc29ja2V0IGJvdW5kYXJpZXMsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbGlua2VkIGxpc3QgY29ycnVwdGlvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgYWNjb3VudGluZyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBDT05GSUdfREVCVUdfTElTVCwgYW5kIGtlcm5lbCBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFtYXRpb24gbWVjaGFuaXNtIGluIG1tL3Ztc2Nhbi5jLiBJdCBvcHRpbWl6ZXMgdGhlIGdlbmVyYXRpb24gaW5jcmVtZW50IHBhdGggYW5kIGJhdGNoLW1vdmVzIGZvbGlvcyBiZXR3ZWVuIExSVSBnZW5lcmF0aW9uIGxpc3RzIHVzaW5nIGxpc3RfY3V0X3Bvc2l0aW9uL2xpc3Rfc3BsaWNlX3RhaWxfaW5pdCwgcmVmYWN0b3JzIGZvbGlvX2luY19nZW4gLyBfX2ZvbGlvX2luY19nZW4sIGFuZCB1cGRhdGVzIHByZWZldGNoIGhlbHBlcnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgKHN0cnVjdCBmb2xpbywgc3RydWN0IGxpc3RfaGVhZCwgYW5kIGdlbmVyYXRpb24gY291bnRlcnMvZmxhZ3MpLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGdlbl9pbmNyZWFzZWQsIGRlbHRhLCBiYXRjaF9lbmQsIGFuZCB0aGUgbW92YWJsZSBsaXN0IGhlYWQpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3lzY2FsbC9pb2N0bC9zb2NrZXQgYm91bmRhcmllcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsaW5rZWQgbGlzdCBjb3JydXB0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBhY2NvdW50aW5nIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIENPTkZJR19ERUJVR19MSVNULCBhbmQga2VybmVsIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 10:51:58 +0000 UTC FinishedAt: 2026-09-02 11:13:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "6853fd39-7d06-4e57-bea7-c803137ce3c3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "max_lru_gen_memcg", "try_to_free_pages", "try_to_free_mem_cgroup_pages", "shrink_all_memory" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttYXhfbHJ1X2dlbl9tZW1jZyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludm9sdmUgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcyAoc3RydWN0IGZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkLCBhbmQgZ2VuZXJhdGlvbiBjb3VudGVycy9mbGFncykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgZ2VuX2luY3JlYXNlZCwgZGVsdGEsIGJhdGNoX2VuZCwgYW5kIHRoZSBtb3ZhYmxlIGxpc3QgaGVhZCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzeXNjYWxsL2lvY3RsL3NvY2tldCBib3VuZGFyaWVzLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxpbmtlZCBsaXN0IGNvcnJ1cHRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFjY291bnRpbmcgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgQ09ORklHX0RFQlVHX0xJU1QsIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGFnaW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMuIFNwZWNpZmljYWxseSwgaW5jX21pbl9zZXEgYW5kIGZvbGlvX2luY19nZW4gYXJlIHVwZGF0ZWQgdG8gYmF0Y2ggbGlzdCBzcGxpY2luZyAodmlhIGZsdXNoX2xydV9iYXRjaCkgYW5kIGdlbmVyYXRpb24gYWNjb3VudGluZywgY2hhbmdpbmcgaG93IGZvbGlvcyBhcmUgbW92ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIExSVSBhZ2luZyBhbmQgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJkNjI4YTEwYjk4ZjVmODRmYjI0MTFlZjM2ZWJiOWJjZGRmYmM3ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDExOjA5OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xODIsMTcgJiM0MzsxODIsMzcgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gfTtcbiBcbiAjaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4tXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICgoX2ZvbGlvKS1cdTAwM2VscnUucHJldiAhPSBfYmFzZSkge1x0XHRcdFxcXG4tXHRcdFx0c3RydWN0IGZvbGlvICpwcmV2O1x0XHRcdFx0XFxcbi1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdHByZXYgPSBscnVfdG9fZm9saW8oXHUwMDI2KF9mb2xpby1cdTAwM2VscnUpKTtcdFx0XFxcbi1cdFx0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VfZmllbGQpO1x0XHRcdFxcXG4tXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4tXHR9IHdoaWxlICgwKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvLVx1MDAzZWxydS5wcmV2ICE9IGJhc2UpIHtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqcHJldjtcbiYjNDM7XG4mIzQzO1x0XHRwcmV2ID0gbHJ1X3RvX2ZvbGlvKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4mIzQzO1x0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZvbGlvLVx1MDAzZWxydS5uZXh0ICE9IGJhc2UpIHtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRuZXh0ID0gbGlzdF9lbnRyeShmb2xpby1cdTAwM2VscnUubmV4dCwgc3RydWN0IGZvbGlvLCBscnUpO1xuJiM0MztcdFx0cHJlZmV0Y2h3KFx1MDAyNm5leHQtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7fVxuICNlbHNlXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbiYjNDM7e1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gLypcbkBAIC0xNjk1LDcgJiM0MzsxNzE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oc3JjKTtcbi1cdFx0cHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKGZvbGlvLCBzcmMsIGZsYWdzKTtcbiYjNDM7XHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjKTtcbiBcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzO1xuQEAgLTMyOTUsMjEgJiM0MzszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiB9XG4gXG4tLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHRpbnQgbmV3X2dlbjtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuIFxuIFx0ZG8ge1xuIFx0XHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKVxuJiM0MztcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbiYjNDM7XHRcdFx0aWYgKGluY3JlYXNlZClcbiYjNDM7XHRcdFx0XHQqaW5jcmVhc2VkID0gZmFsc2U7XG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCAmIzQzOzMzMzcsMjIgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4mIzQzO1x0aWYgKGluY3JlYXNlZClcbiYjNDM7XHRcdCppbmNyZWFzZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiBuZXdfZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xuJiM0MztzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4mIzQzO1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4mIzQzO1x0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbiYjNDM7XHRib29sIGdlbl9pbmNyZWFzZWQ7XG4gXG4mIzQzO1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4mIzQzO1x0aWYgKGdlbl9pbmNyZWFzZWQpXG4mIzQzO1x0XHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuIFx0cmV0dXJuIG5ld19nZW47XG4gfVxuIFxuQEAgLTM4OTcsNiAmIzQzOzM5MzEsMTkgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRMSVNUX0hFQUQobW92YWJsZSk7XG4mIzQzO1xuJiM0MztcdGlmICghKmJhdGNoX2VuZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNm1vdmFibGUsIGRzdCk7XG4mIzQzO1x0KmJhdGNoX2VuZCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4ge1xuIFx0aW50IHpvbmU7XG5AQCAtMzkwNCw2ICYjNDM7Mzk1MSw3IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4mIzQzO1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuIFx0LyogRm9yIGZpbGUgdHlwZSwgc2tpcCB0aGUgY2hlY2sgaWYgc3dhcHBpbmVzcyBpcyBhbm9uIG9ubHkgKi9cbiBcdGlmICh0eXBlIFx1MDAyNlx1MDAyNiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpXG5AQCAtMzkxMywzNSAmIzQzOzM5NjEsNjMgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4gXHRpZiAoIXR5cGUgXHUwMDI2XHUwMDI2ICFzd2FwcGluZXNzKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIG9sZF9nZW4pICE9XG4mIzQzO1x0XHRcdGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgdGFyZ2V0X2dlbikpO1xuIFx0LyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovXG4gXHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0YXJnZXRfbGlzdCA9IFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV07XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuJiM0MztcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDtcbiYjNDM7XHRcdGxvbmcgZGVsdGEgPSAwO1xuIFxuLVx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuJiM0MztcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGZvbGlvLCBscnUpO1xuJiM0MztcdFx0XHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHRcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xuIFx0XHRcdGJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuJiM0MztcdFx0XHRwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oZm9saW8sIGhlYWQpO1xuJiM0MztcdFx0XHRwb3MgPSBwb3MtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIGdlbl9pbmNyZWFzZWQgaXMgZmFsc2UsIHRoaXMgaXMgYSBwcm9tb3Rpb24uIFB1dCBmb2xpb3NcbiYjNDM7XHRcdFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxuJiM0MztcdFx0XHQgKiB0aGUgdGFpbCBvZiB0aGUgc2Vjb25kLW9sZGVzdCBnZW4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoZ2VuX2luY3JlYXNlZCkge1xuJiM0MztcdFx0XHRcdGRlbHRhICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRcdFx0XHRiYXRjaF9lbmQgPSBcdTAwMjZmb2xpby1cdTAwM2VscnU7XG4gXG4tXHRcdFx0LyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuLVx0XHRcdGlmIChyZWZzICYjNDM7IHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSAmIzQzOyAxKSB7XG4tXHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbi1cdFx0XHRcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRcdFx0XHQvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4mIzQzO1x0XHRcdFx0aWYgKHJlZnMgJiM0Mzsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICYjNDM7IDEpIHtcbiYjNDM7XHRcdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuIFxuLVx0XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuLVx0XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICYjNDM7IGRlbHRhKTtcbiYjNDM7XHRcdFx0XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBucl9wYWdlcyk7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcbiYjNDM7XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcbiBcdFx0XHR9XG4tXG4gXHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiBcdFx0fVxuJiM0MztcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuJiM0MztcdFx0XHQgICBscnVnZW4tXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0gLSBkZWx0YSk7XG4mIzQzO1x0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSxcbiYjNDM7XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICYjNDM7IGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmVtYWluaW5nKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmQ2MjhhMTBiOThmNWY4NGZiMjQxMWVmMzZlYmI5YmNkZGZiYzdkZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTE6MDk6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODIsMTcgJiM0MzsxODIsMzcgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiB9OwogCiAjaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXCi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKChfZm9saW8pLSZndDtscnUucHJldiAhPSBfYmFzZSkgewkJCVwKLQkJCXN0cnVjdCBmb2xpbyAqcHJldjsJCQkJXAotCQkJCQkJCQkJXAotCQkJcHJldiA9IGxydV90b19mb2xpbygmYW1wOyhfZm9saW8tJmd0O2xydSkpOwkJXAotCQkJcHJlZmV0Y2h3KCZhbXA7cHJldi0mZ3Q7X2ZpZWxkKTsJCQlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqYmFzZSkKJiM0Mzt7CiYjNDM7CWlmIChmb2xpby0mZ3Q7bHJ1LnByZXYgIT0gYmFzZSkgewomIzQzOwkJc3RydWN0IGZvbGlvICpwcmV2OwomIzQzOwomIzQzOwkJcHJldiA9IGxydV90b19mb2xpbygmYW1wO2ZvbGlvLSZndDtscnUpOwomIzQzOwkJcHJlZmV0Y2h3KCZhbXA7cHJldi0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCiYjNDM7ewomIzQzOwlpZiAoZm9saW8tJmd0O2xydS5uZXh0ICE9IGJhc2UpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqbmV4dDsKJiM0MzsKJiM0MzsJCW5leHQgPSBsaXN0X2VudHJ5KGZvbGlvLSZndDtscnUubmV4dCwgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJcHJlZmV0Y2h3KCZhbXA7bmV4dC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQogI2Vsc2UKLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQomIzQzO3sKJiM0Mzt9CiAjZW5kaWYKIAogLyoKQEAgLTE2OTUsNyAmIzQzOzE3MTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJCWZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7Ci0JCXByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7CiYjNDM7CQlwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYyk7CiAKIAkJbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCXRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzOwpAQCAtMzI5NSwyMSAmIzQzOzMzMTUsMjEgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWEKIAlyZXR1cm4gKChvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiB9CiAKLS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7Ci0Jc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Ci0JaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CWludCBuZXdfZ2VuOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKIAogCWRvIHsKIAkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKJiM0MzsJCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pIHsKJiM0MzsJCQlpZiAoaW5jcmVhc2VkKQomIzQzOwkJCQkqaW5jcmVhc2VkID0gZmFsc2U7CiAJCQlyZXR1cm4gbmV3X2dlbjsKJiM0MzsJCX0KIAogCQluZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKIApAQCAtMzMxNyw4ICYjNDM7MzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKLQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwlpZiAoaW5jcmVhc2VkKQomIzQzOwkJKmluY3JlYXNlZCA9IHRydWU7CiYjNDM7CXJldHVybiBuZXdfZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwomIzQzO3N0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKJiM0MzsJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwlib29sIGdlbl9pbmNyZWFzZWQ7CiAKJiM0MzsJbmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgJmFtcDtnZW5faW5jcmVhc2VkKTsKJiM0MzsJaWYgKGdlbl9pbmNyZWFzZWQpCiYjNDM7CQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCXJldHVybiBuZXdfZ2VuOwogfQogCkBAIC0zODk3LDYgJiM0MzszOTMxLDE5IEBAIHN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZCkKIAkJa2ZyZWUod2Fsayk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCkKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChtb3ZhYmxlKTsKJiM0MzsKJiM0MzsJaWYgKCEqYmF0Y2hfZW5kKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsaXN0X2N1dF9wb3NpdGlvbigmYW1wO21vdmFibGUsIGhlYWQsICpiYXRjaF9lbmQpOwomIzQzOwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFtcDttb3ZhYmxlLCBkc3QpOwomIzQzOwkqYmF0Y2hfZW5kID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIHsKIAlpbnQgem9uZTsKQEAgLTM5MDQsNiAmIzQzOzM5NTEsNyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiAJaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7CiYjNDM7CWludCB0YXJnZXRfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKIAogCS8qIEZvciBmaWxlIHR5cGUsIHNraXAgdGhlIGNoZWNrIGlmIHN3YXBwaW5lc3MgaXMgYW5vbiBvbmx5ICovCiAJaWYgKHR5cGUgJmFtcDsmYW1wOyAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkpCkBAIC0zOTEzLDM1ICYjNDM7Mzk2MSw2MyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcykKIAlpZiAoIXR5cGUgJmFtcDsmYW1wOyAhc3dhcHBpbmVzcykKIAkJZ290byBkb25lOwogCiYjNDM7CVZNX1dBUk5fT05fT05DRShnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpICE9IE1BWF9OUl9HRU5TKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT0KJiM0MzsJCQlscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIHRhcmdldF9nZW4pKTsKIAkvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi8KIAlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSAmYW1wO2xydWdlbi0mZ3Q7Zm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IGhlYWQtJmd0O25leHQ7CiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMOwomIzQzOwkJbG9uZyBkZWx0YSA9IDA7CiAKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJd2hpbGUgKHBvcyAhPSBoZWFkKSB7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiYjNDM7CQkJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJCWludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pOwogCQkJYm9vbCB3b3JraW5nc2V0ID0gZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCQlib29sIGdlbl9pbmNyZWFzZWQ7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7CiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pOwogCi0JCQluZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTsKLQkJCWxpc3RfbW92ZV90YWlsKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiYjNDM7CQkJcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkKTsKJiM0MzsJCQlwb3MgPSBwb3MtJmd0O25leHQ7CiYjNDM7CQkJbmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgJmFtcDtnZW5faW5jcmVhc2VkKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGdlbl9pbmNyZWFzZWQgaXMgZmFsc2UsIHRoaXMgaXMgYSBwcm9tb3Rpb24uIFB1dCBmb2xpb3MKJiM0MzsJCQkgKiBhdCB0aGUgaGVhZCBvZiB0aGUgcHJvbW90ZWQgZ2VuLiBPdGhlcndpc2UsIHB1dCB0aGVtIGF0CiYjNDM7CQkJICogdGhlIHRhaWwgb2YgdGhlIHNlY29uZC1vbGRlc3QgZ2VuLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChnZW5faW5jcmVhc2VkKSB7CiYjNDM7CQkJCWRlbHRhICYjNDM7PSBucl9wYWdlczsKJiM0MzsJCQkJYmF0Y2hfZW5kID0gJmFtcDtmb2xpby0mZ3Q7bHJ1OwogCi0JCQkvKiBkb24mIzM5O3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovCi0JCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewotCQkJCWludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpOwotCQkJCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJCQkJLyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqLwomIzQzOwkJCQlpZiAocmVmcyAmIzQzOyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgJiM0MzsgMSkgewomIzQzOwkJCQkJaW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7CiAKLQkJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAotCQkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBkZWx0YSk7CiYjNDM7CQkJCQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLAomIzQzOwkJCQkJCSAgIGxydWdlbi0mZ3Q7cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICYjNDM7IG5yX3BhZ2VzKTsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWZsdXNoX2xydV9iYXRjaChoZWFkLCAmYW1wO2JhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpOwomIzQzOwkJCQlsaXN0X21vdmUoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2xydWdlbi0mZ3Q7Zm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTsKIAkJCX0KLQogCQkJaWYgKCEtLXJlbWFpbmluZykKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJCWJyZWFrOwogCQl9CiYjNDM7CQlmbHVzaF9scnVfYmF0Y2goaGVhZCwgJmFtcDtiYXRjaF9lbmQsIHRhcmdldF9saXN0KTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSwKJiM0MzsJCQkgICBscnVnZW4tJmd0O25yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdIC0gZGVsdGEpOwomIzQzOwkJV1JJVEVfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdLAomIzQzOwkJCSAgIGxydWdlbi0mZ3Q7bnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0gJiM0MzsgZGVsdGEpOwomIzQzOwkJaWYgKCFyZW1haW5pbmcpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCX0KIGRvbmU6CiAJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwOQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZNU2NhbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWUgcmVmaW5lbWVudHMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBMUlUgcGFnZSBoYW5kbGluZywgd2hpY2ggaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIE1HTFJVLgoKRmlyc3QsIEkgc2VlIHByZWZldGNoaW5nIG1vZGlmaWNhdGlvbnMuIFRoZSBhZGRpdGlvbiBvZiBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYCBhbG9uZ3NpZGUgYHByZWZldGNod19wcmV2X2xydV9mb2xpb2Agc3VnZ2VzdHMgd2UgYXJlIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgcGFnZSB3YWxraW5nIHRocm91Z2ggdGhlIExSVSBsaXN0cywgcGVyaGFwcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGR1cmluZyBzY2FubmluZyBvciByZWNsYWltLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBwcmVmZXRjaGluZyBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBoZXJlLgoKTmV4dCwgYW5kIHByb2JhYmx5IHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQsIGFyZSB0aGUgTFJVIEdlbiBmdW5jdGlvbiBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gZnVuY3Rpb25zIGxpa2UgYF9fZm9saW9faW5jX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIGBmbHVzaF9scnVfYmF0Y2hgLiBUaGVzZSBhcmUgY29yZSB0byB0aGUgTXVsdGktR2VuIExSVSBsb2dpYywgaW5kaWNhdGluZyB0aGlzIHBhdGNoIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggZ2VuZXJhdGlvbmFsIExSVSBtYW5hZ2VtZW50LiBJIG5vdGljZSBvcHRpbWl6YXRpb25zIGluIGBpbmNfbWluX3NlcWAgcmVnYXJkaW5nIGhvdyBMUlUgYmF0Y2ggbW92ZXMgYXJlIGhhbmRsZWQgLSBtb3ZpbmcgdGhlbSB0byBhIGB0YXJnZXRfZ2VuYCBsaXN0LCB1cGRhdGluZyBgbnJfcGFnZXNgIGluIHRoZSBiYXRjaCwgYW5kIG1vdmluZyBwcm9tb3RlZCBmb2xpb3MgdG8gdGhlIGhlYWQuIFRoaXMgY291bGQgc2lnbmlmaWNhbnRseSByZWR1Y2Ugb3ZlcmhlYWQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjb3JyZWN0bHkgb3B0aW1pemluZyBob3cgcGFnZXMgdHJhbnNpdGlvbiBiZXR3ZWVuIGdlbmVyYXRpb25zIGlzIGNyaXRpY2FsIGZvciBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBvbiBzeXN0ZW1zIHdpdGggaGlnaCBtZW1vcnkgcHJlc3N1cmUuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGVyZSBleGFjdGx5IGFyZSB0aGVzZSBtb2RpZmljYXRpb25zIGxvY2F0ZWQgd2l0aGluIHRoZSBsYXJnZXIgYHZtc2Nhbi5jYCBjb2RlPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoYENPTkZJR18uLi5gKSBjb250cm9sIHRoaXMgY29kZSBwYXRoPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBhbmQgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGltcGFjdCB1bmRlciB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBjYW4gaGVscCBtZSB3aXRoIHRoZSBpbnZlc3RpZ2F0aW9uIG9mIGBtbS92bXNjYW4uY2AgYW5kIEtjb25maWcuIFRoYXQgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBpbi1kZXB0aCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG5tbS9LY29uZmlnOjE0MTU6XHRkZXBlbmRzIG9uIExSVV9HRU5cbm1tL0tjb25maWctMTQxNi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLTE0MTgtXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyMC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjE0MjE6XHRkZXBlbmRzIG9uIExSVV9HRU5cbm1tL0tjb25maWctMTQyMi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE0MzA6XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xubW0vS2NvbmZpZy0xNDMxLSMgfVxuLS1cbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNTEtXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL2ZvbGlvLmMtMzUzLVxuLS1cbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzk1LVxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS9mb2xpby5jLTM5Ny1cbi0tXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTQwNi1cbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDgtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3NDUtXHRcdFx0XHQgKDFMIFx1MDAzY1x1MDAzYyBQR19kcm9wYmVoaW5kKSB8XG5tbS9odWdlX21lbW9yeS5jOjM3NDY6XHRcdFx0XHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzQ3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjI3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2NDMtXG5tbS9tZW1jb250cm9sLmM6NDY0NDojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00NjQ1LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjYzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxubW0vbWVtY29udHJvbC5jOjQ2NjQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1jb250cm9sLmMtNDY2NS1cbi0tXG5tbS9tZW1vcnkuYz02NzI4PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbi0tXG5tbS9tZW1vcnkuYy02NzgwLVxubW0vbWVtb3J5LmM6Njc4MTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbW9yeS5jLTY3ODItc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1vcnkuYz02Nzk3PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxuLS1cbm1tL21lbW9yeS5jLTY3OTktfVxubW0vbWVtb3J5LmM6NjgwMDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL21lbW9yeS5jLTY4MDEtXG4tLVxubW0vbW1faW5pdC5jPTExMj12b2lkIF9faW5pdCBtbWluaXRfdmVyaWZ5X3BhZ2VmbGFnc19sYXlvdXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMTI1LVx0XHRLQVNBTl9UQUdfV0lEVEgsXG5tbS9tbV9pbml0LmM6MTI2Olx0XHRMUlVfR0VOX1dJRFRILFxubW0vbW1faW5pdC5jLTEyNy1cdFx0TFJVX1JFRlNfV0lEVEgsXG4tLVxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODUyLVxubW0vdm1zY2FuLmM6ODUzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODU0LS8qXG4tLVxubW0vdm1zY2FuLmM9ODgyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy04ODUtfVxubW0vdm1zY2FuLmM6ODg2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODg3LVxuLS1cbm1tL3Ztc2Nhbi5jPTI3MDA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNzExLVxubW0vdm1zY2FuLmM6MjcxMjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI3MTMtXG5tbS92bXNjYW4uYz0yNzE0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjcxNTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jLTI3MTctI2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmMtMjcxOC0jZWxzZVxubW0vdm1zY2FuLmM6MjcxOTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNzIwLSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxuLS1cbm1tL3Ztc2Nhbi5jPTI3MjM9c3RhdGljIGJvb2wgc2hvdWxkX3dhbGtfbW11KHZvaWQpXG5tbS92bXNjYW4uYy0yNzI0LXtcbm1tL3Ztc2Nhbi5jOjI3MjU6XHRyZXR1cm4gYXJjaF9oYXNfaHdfcHRlX3lvdW5nKCkgXHUwMDI2XHUwMDI2IGdldF9jYXAoTFJVX0dFTl9NTV9XQUxLKTtcbm1tL3Ztc2Nhbi5jLTI3MjYtfVxuLS1cbm1tL3Ztc2Nhbi5jPTI3Mjg9c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxubW0vdm1zY2FuLmMtMjcyOS17XG5tbS92bXNjYW4uYzoyNzMwOlx0cmV0dXJuIGFyY2hfaGFzX2h3X25vbmxlYWZfcG1kX3lvdW5nKCkgXHUwMDI2XHUwMDI2IGdldF9jYXAoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTI3MzEtfVxuLS1cbm1tL3Ztc2Nhbi5jLTI3NDEtXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XHRcdFx0XFxcbm1tL3Ztc2Nhbi5jOjI3NDI6XHRcdFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWluX3NlcVtMUlVfR0VOX0FOT05dKSxcdFxcXG5tbS92bXNjYW4uYzoyNzQzOlx0XHRSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbTFJVX0dFTl9GSUxFXSksXHRcXFxubW0vdm1zY2FuLmMtMjc0NC1cdH1cbi0tXG5tbS92bXNjYW4uYz0yOTAwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MTktXG5tbS92bXNjYW4uYzoyOTIwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MjEtXG4tLVxubW0vdm1zY2FuLmM9MzAyOT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDU3LVxubW0vdm1zY2FuLmM6MzA1ODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0zMDU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTMyODk9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzMwNy1cdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xubW0vdm1zY2FuLmM6MzMwODpcdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxubW0vdm1zY2FuLmMtMzMwOS1cdFx0XHRyZXR1cm4gLTE7XG5tbS92bXNjYW4uYy0zMzEwLVxubW0vdm1zY2FuLmM6MzMxMTpcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbm1tL3Ztc2Nhbi5jOjMzMTI6XHRcdG5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbm1tL3Ztc2Nhbi5jLTMzMTMtXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbm1tL3Ztc2Nhbi5jLTMzMTQtXG5tbS92bXNjYW4uYzozMzE1Olx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG5tbS92bXNjYW4uYy0zMzE2LX1cbi0tXG5tbS92bXNjYW4uYz0zMzE4PXN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4tLVxubW0vdm1zY2FuLmMtMzMyMi1cbm1tL3Ztc2Nhbi5jOjMzMjM6XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTMzMjQtXG5tbS92bXNjYW4uYy0zMzI1LVx0ZG8ge1xubW0vdm1zY2FuLmM6MzMyNjpcdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG5tbS92bXNjYW4uYy0zMzI3LVx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi0tXG5tbS92bXNjYW4uYy0zMzM1LVxubW0vdm1zY2FuLmM6MzMzNjpcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbm1tL3Ztc2Nhbi5jOjMzMzc6XHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xubW0vdm1zY2FuLmMtMzMzOC1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQwMjk9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDA2NS1cbm1tL3Ztc2Nhbi5jOjQwNjY6XHRcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFx1MDAzYyBzZXEpXG5tbS92bXNjYW4uYzo0MDY3Olx0XHRcdG1pbl9zZXFbTFJVX0dFTl9BTk9OXSA9IHNlcTtcbm1tL3Ztc2Nhbi5jOjQwNjg6XHRcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcdTAwM2Ugc2VxIFx1MDAyNlx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNjIHNlcSlcbm1tL3Ztc2Nhbi5jOjQwNjk6XHRcdFx0bWluX3NlcVtMUlVfR0VOX0ZJTEVdID0gc2VxO1xubW0vdm1zY2FuLmMtNDA3MC1cdH1cbi0tXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxMTMtXHQgKiB0aGUgY3VycmVudCBtYXhfc2VxIG5lZWQgdG8gYmUgY292ZXJlZCwgc2luY2UgbWF4X3NlcSYjNDM7MSBjYW4gb3ZlcmxhcFxubW0vdm1zY2FuLmM6NDExNDpcdCAqIHdpdGggbWluX3NlcVtMUlVfR0VOX0FOT05dIGlmIHN3YXBwaW5nIGlzIGNvbnN0cmFpbmVkLiBBbmQgaWYgdGhleSBkb1xubW0vdm1zY2FuLmMtNDExNS1cdCAqIG92ZXJsYXAsIGNvbGQvaG90IGludmVyc2lvbiBoYXBwZW5zLlxuLS1cbm1tL3Ztc2Nhbi5jPTQ4OTg9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDkwMi1cdGlmIChzd2FwcGluZXNzIFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgJiM0MzsgMSlcbm1tL3Ztc2Nhbi5jOjQ5MDM6XHRcdHJldHVybiBMUlVfR0VOX0ZJTEU7XG5tbS92bXNjYW4uYy00OTA0LVxubW0vdm1zY2FuLmMtNDkwNS1cdGlmIChzd2FwcGluZXNzIFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXG5tbS92bXNjYW4uYzo0OTA2Olx0XHRyZXR1cm4gTFJVX0dFTl9BTk9OO1xubW0vdm1zY2FuLmMtNDkwNy1cdC8qXG4tLVxubW0vdm1zY2FuLmMtNDkxMC1cdCAqL1xubW0vdm1zY2FuLmM6NDkxMTpcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xubW0vdm1zY2FuLmM6NDkxMjpcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG5tbS92bXNjYW4uYy00OTEzLVxuLS1cbm1tL3Ztc2Nhbi5jPTU0MzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NTAtXHRpZiAoZW5hYmxlZClcbm1tL3Ztc2Nhbi5jOjU0NTE6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xubW0vdm1zY2FuLmMtNTQ1Mi1cdGVsc2Vcbm1tL3Ztc2Nhbi5jOjU0NTM6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcbm1tL3Ztc2Nhbi5jLTU0NTQtXG4tLVxubW0vdm1zY2FuLmM9NTUxNT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL3Ztc2Nhbi5jLTU1MTgtXG5tbS92bXNjYW4uYzo1NTE5Olx0aWYgKGdldF9jYXAoTFJVX0dFTl9DT1JFKSlcbm1tL3Ztc2Nhbi5jOjU1MjA6XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fQ09SRSk7XG5tbS92bXNjYW4uYy01NTIxLVxubW0vdm1zY2FuLmMtNTUyMi1cdGlmIChzaG91bGRfd2Fsa19tbXUoKSlcbm1tL3Ztc2Nhbi5jOjU1MjM6XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fTU1fV0FMSyk7XG5tbS92bXNjYW4uYy01NTI0LVxubW0vdm1zY2FuLmMtNTUyNS1cdGlmIChzaG91bGRfY2xlYXJfcG1kX3lvdW5nKCkpXG5tbS92bXNjYW4uYzo1NTI2Olx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xubW0vdm1zY2FuLmMtNTUyNy1cbi0tXG5tbS92bXNjYW4uYz01NTMyPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NTQ0LVxubW0vdm1zY2FuLmM6NTU0NTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSYjNDM7JiM0MzspIHtcbm1tL3Ztc2Nhbi5jLTU1NDYtXHRcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXHUwMDI2IEJJVChpKTtcbm1tL3Ztc2Nhbi5jLTU1NDctXG5tbS92bXNjYW4uYzo1NTQ4Olx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG5tbS92bXNjYW4uYy01NTQ5LVx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTYwMDk9c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXG4tLVxubW0vdm1zY2FuLmMtNjAxMS1cdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyAmIzQzOyAxIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xubW0vdm1zY2FuLmM6NjAxMjpcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXHUwMDNjPSBNQVhfTlJfR0VOUyk7XG5tbS92bXNjYW4uYy02MDEzLVxuLS1cbm1tL3Ztc2Nhbi5jPTYwMjQ9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNjAyNS1cbm1tL3Ztc2Nhbi5jOjYwMjY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MDI3LVxuLS1cbm1tL3Ztc2Nhbi5jPTYwMzg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDQyLVxubW0vdm1zY2FuLmM6NjA0MzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTYwNDQtXG4tLVxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTIzMi1cbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS93b3JraW5nc2V0LmMtMjM0LVxubW0vd29ya2luZ3NldC5jPTIzNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yNTAtXG5tbS93b3JraW5nc2V0LmM6MjUxOlx0QlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggJiM0MzsgTFJVX1JFRlNfV0lEVEggXHUwMDNlXG5tbS93b3JraW5nc2V0LmMtMjUyLVx0XHQgICAgIEJJVFNfUEVSX0xPTkcgLSBtYXgoRVZJQ1RJT05fU0hJRlQsIEVWSUNUSU9OX1NISUZUX0FOT04pKTtcbi0tXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTMzNi1cbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzM4LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzUzLVxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBMUlVfR0VOIGFuZCB2bXNjYW4uYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgb2YgYExSVV9HRU5gIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBtb3JlIGRlZXBseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1tL0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBMUlVfR0VOYCBkZWZpbml0aW9uLiBJIHdhbnQgdG8gc2VlIHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW50YW5nbGVkIHdpdGggaXQg4oCTIHdoYXQgcHJlcmVxdWlzaXRlcyBleGlzdCwgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBpdHMgcGxhY2UgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4KCkZyb20gdGhlcmUsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLiBJIGhhdmUgYSByb3VnaCBhcmVhIGluIG1pbmQsIHJvdWdobHkgbGluZXMgMjcwMC00MDAwLiBJdCYjMzk7cyBhIGJyb2FkIHJhbmdlLCBJIGtub3csIGJ1dCBpdCBzaG91bGQgY29udGFpbiBzb21lIG9mIHRoZSBjb3JlIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEnigJltIGxvb2tpbmcgZm9yIHRoZSBwbGFjZXMgd2hlcmUgYGluY19taW5fc2VxYCBvciBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbiBjYWxscyBhcmUgYmVpbmcgbWFkZS4gVHJhY2luZyB0aGVzZSBjYWxscyBzaG91bGQgZXhwb3NlIGhvdyB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGJlaW5nIGluY3JlbWVudGVkIGFuZCBob3cgaXTigJlzIGJlaW5nIHVzZWQgdG8gYWZmZWN0IHBhZ2UgcmVjbGFpbS4gVGhpcyB3aWxsIHJldmVhbCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBnZW5lcmF0aW9uYWwgTFJVIGltcGxlbWVudGF0aW9uIGFuZCB3aGVyZSBpdCYjMzk7cyB0cnVseSBtYWtpbmcgYW4gaW1wYWN0IG9uIHBhZ2Ugc2Nhbm5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDE6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDI6XHRcbjE0MDM6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDI0Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDI1Olx0XG4xNDI2Olx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyOTpcdFx0ZGVmX2Jvb2wgeVxuMTQzMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MzE6XHQjIH1cbjE0MzI6XHRcbjE0MzM6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzQ6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzNTpcdFxuMTQzNjpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0Mzc6XHRcdGRlZl9ib29sIHlcbjE0Mzg6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTXVsdGktR2VuIExSVSBDb25maWd1cmF0aW9uIGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbXVsdGktZ2VuIExSVSBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHN3aXRjaC4gSWYgdGhhdCYjMzk7cyBlbmFibGVkLCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgc2VlbXMgdG8gYmUgc2V0dGluZyB1cCB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5IHJpZ2h0IG91dCBvZiB0aGUgZ2F0ZSwgbm8gbWFudWFsIHN5c2ZzIGZpZGRsaW5nIG5lZWRlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHNpbXBsaWZpZXMgdGhpbmdzLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgYGluY19taW5fc2VxYCBhbmQgb3RoZXIgTUdMUlUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGV5IGRlZmluZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSBhcmUgdGhleSBiZWluZyAqY2FsbGVkKj8gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgaGllcmFyY2h5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cuIFNvLCBJJiMzOTtsbCBzdGFydCB3aXRoIGBtbS92bXNjYW4uY2AgYmVjYXVzZSBpdCYjMzk7cyBhIGdvb2QgYmV0IGZvciBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbHMuIEnigJlsbCBsb2NhdGUgYGluY19taW5fc2VxYCB3aXRoaW4gdGhhdCBmaWxlIGFuZCB0aGVuIG1ldGljdWxvdXNseSB3b3JrIG15IHdheSB1cCB0aGUgY2FsbCBzdGFjay4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGdlbi1MUlUgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkIGFuZCB3aGF0IHRoZSBzeXN0ZW0gaXMgcmVseWluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmNfbWluX3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM5MzQ9c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM5NDYtXG5tbS92bXNjYW4uYzozOTQ3OnN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtMzk0OC17XG4tLVxubW0vdm1zY2FuLmMtNDAyOC1cbm1tL3Ztc2Nhbi5jOjQwMjk6c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy00MDMwLXtcbi0tXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxMDItXG5tbS92bXNjYW4uYzo0MTAzOlx0XHRpZiAoaW5jX21pbl9zZXEobHJ1dmVjLCB0eXBlLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTQxMDQtXHRcdFx0Y29udGludWU7XG4tLVxubW0vdm1zY2FuLmM9NDk1MT1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00OTcwLVx0LyogSW4gY2FzZSBmb2xpbyBkZWxldGlvbiBsZWZ0IGVtcHR5IG9sZCBnZW5zLCBmbHVzaCB0aGVtICovXG5tbS92bXNjYW4uYzo0OTcxOlx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy00OTcyLVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NzgtXHRpZiAoc2Nhbm5lZClcbm1tL3Ztc2Nhbi5jOjQ5Nzk6XHRcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNDk4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgaGllcmFyY2h5IHdpdGhpbiB0aGUgVk0gc2Nhbm5pbmcgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzZXF1ZW5jZSBudW1iZXJzIGFyZSBpbmNyZW1lbnRlZC4gSSBzZWUgdGhhdCBgaW5jX21pbl9zZXFgIGlzIGNhbGxlZCBmcm9tIGBpbmNfbWF4X3NlcWAgYW5kIGB0cnlfdG9faW5jX21pbl9zZXFgLCBib3RoIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiAgVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgKmVsc2UqIGlzIHRyaWdnZXJpbmcgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUgYnJvYWRlciBlbnRyeSBwb2ludHMgaW50byB0aGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIGFyZSBpbml0aWF0ZWQuCgpJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIGJyb2FkZW4gbXkgc2VhcmNoLiBJIHdpbGwgaW52ZXN0aWdhdGUgY2FsbGVycyBvZiBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAg4oCTIG9yIGFueSBvdGhlciBvYnZpb3VzIGVudHJ5IHBvaW50cyBpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIOKAkyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhvc2Ugc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMuIEJ5IHRyYWNpbmcgdGhvc2UgY2FsbHMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSByZWNsYWltIHByb2Nlc3MsIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01Mjg0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMDQtXG5tbS92bXNjYW4uYzo1MzA1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzA2LXtcbi0tXG5tbS92bXNjYW4uYz02MDMzPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzctXG5tbS92bXNjYW4uYzo2MDM4OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDM5LXtcbi0tXG5tbS92bXNjYW4uYz02MzE1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzMjItXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MzIzOlx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MzI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBNR0xSVSBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYHNocmlua19ub2RlYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgcGFnZSByZWNsYWltLCBzcGVjaWZpY2FsbHkgd2hlbiBrc3dhcGQgb3IgZGlyZWN0IHJlY2xhaW0gYXJlIHJ1bm5pbmcuIFJpZ2h0LCBnb3QgaXQuIE15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgYXJlYXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXR0YWNrIHZlY3RvcnMgdG8gbG9vayBhdC4gQXJlIHRoZXJlIGFueSBleHBvcnRlZCBzeW1ib2xzLCBzeXNmcyBlbnRyeXBvaW50cywgb3IgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgYXJlbiYjMzk7dCBjb25zaWRlcmVkICYjMzQ7aG90IHBhdGhzJiMzNDsgdGhhdCBtaWdodCBiZSByaXBlIGZvciBmdXp6aW5nPyBUaG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLgoKTmV4dCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBkZWJ1Z2ZzLCBzeXNmcywgb3IgcHJvY2ZzIGludGVyZmFjZXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gTUdMUlUgb3IgTFJVIGdlbmVyYXRpb24gaW4gZ2VuZXJhbC4gVGhvc2UgdHlwZXMgb2YgaW50ZXJmYWNlcyBhcmUgb2Z0ZW4gb3Zlcmxvb2tlZCBhbmQgY2FuIGV4cG9zZSBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIGZvciB0aGUgdGVybSBgbHJ1X2dlbmAgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL3Ztc2Nhbi5jPTg0Nz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTg1OS0gKi9cbm1tL3Ztc2Nhbi5jOjg2MDpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTg4MS0jZWxzZVxubW0vdm1zY2FuLmM6ODgyOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg4My17XG4tLVxubW0vdm1zY2FuLmM9ODg4PXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTkxMi1cbm1tL3Ztc2Nhbi5jOjkxMzpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTkxNC1cdFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXG4tLVxubW0vdm1zY2FuLmMtOTE2LVxubW0vdm1zY2FuLmM6OTE3Olx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbm1tL3Ztc2Nhbi5jLTkxOC1cdH1cbi0tXG5tbS92bXNjYW4uYz0yMzAwPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzMDYtXG5tbS92bXNjYW4uYzoyMzA3Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbm1tL3Ztc2Nhbi5jLTIzMDgtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz0yNzE0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmMtMjcxNS0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jOjI3MTc6I2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmMtMjcxOC0jZWxzZVxubW0vdm1zY2FuLmM6MjcxOTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYzoyNzIwOiNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmMtMjcyMS0jZW5kaWZcbi0tXG5tbS92bXNjYW4uYz0yODA4PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgzNy0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4Mzg6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgzOS0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTI4NTU9c3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAqa2V5KVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NjQtXG5tbS92bXNjYW4uYzoyODY1OnN0YXRpYyBib29sIHRlc3RfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODY2LVx0XHRcdCAgICAgIHZvaWQgKml0ZW0pXG4tLVxubW0vdm1zY2FuLmMtMjg4MC1cbm1tL3Ztc2Nhbi5jOjI4ODE6c3RhdGljIHZvaWQgdXBkYXRlX2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtMjg4Mi1cdFx0XHRcdHZvaWQgKml0ZW0pXG4tLVxubW0vdm1zY2FuLmMtMjg5OS1cbm1tL3Ztc2Nhbi5jOjI5MDA6c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG5tbS92bXNjYW4uYy0yOTAxLXtcbi0tXG5tbS92bXNjYW4uYy0yOTIxLVxubW0vdm1zY2FuLmM6MjkyMjpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMjkyMy17XG5tbS92bXNjYW4uYzoyOTI0Olx0c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgbW1fbGlzdCA9IHtcbm1tL3Ztc2Nhbi5jLTI5MjUtXHRcdC5maWZvID0gTElTVF9IRUFEX0lOSVQobW1fbGlzdC5maWZvKSxcbi0tXG5tbS92bXNjYW4uYy0yOTM3LVxubW0vdm1zY2FuLmM6MjkzODpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKmdldF9tbV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0yOTM5LXtcbi0tXG5tbS92bXNjYW4uYy0yOTQyLVxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTI5NDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NDctXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjI5NDg6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk0OS1cbi0tXG5tbS92bXNjYW4uYy0yOTYxLVxubW0vdm1zY2FuLmM6Mjk2Mjp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk2My17XG4tLVxubW0vdm1zY2FuLmMtMjk2NS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vdm1zY2FuLmM6Mjk2NjpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYy0yOTY3LVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NzYtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5tbS92bXNjYW4uYzoyOTc3Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTI5NzgtXG4tLVxubW0vdm1zY2FuLmMtMjk4OC1cbm1tL3Ztc2Nhbi5jOjI5ODk6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5OTAte1xubW0vdm1zY2FuLmMtMjk5MS1cdGludCBuaWQ7XG5tbS92bXNjYW4uYzoyOTkyOlx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdDtcbm1tL3Ztc2Nhbi5jLTI5OTMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMDYtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5tbS92bXNjYW4uYzozMDA3Olx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMwMDgtXG4tLVxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMzAzMC17XG4tLVxubW0vdm1zY2FuLmMtMzA1Mi1cbm1tL3Ztc2Nhbi5jOjMwNTM6XHRscnVfZ2VuX2RlbF9tbShtbSk7XG5tbS92bXNjYW4uYzozMDU0Olx0bHJ1X2dlbl9hZGRfbW0obW0pO1xubW0vdm1zY2FuLmMtMzA1NS19XG4tLVxubW0vdm1zY2FuLmMtMzA1OS1cbm1tL3Ztc2Nhbi5jOjMwNjA6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTMwNjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjQtXG5tbS92bXNjYW4uYzozMDY1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTMwNjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjktXG5tbS92bXNjYW4uYzozMDcwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMzA3MS17XG4tLVxubW0vdm1zY2FuLmMtMzA3Ni1cbm1tL3Ztc2Nhbi5jOjMwNzc6c3RhdGljIHZvaWQgcmVzZXRfbW1fc3RhdHMoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaywgYm9vbCBsYXN0KVxubW0vdm1zY2FuLmMtMzA3OC17XG4tLVxubW0vdm1zY2FuLmMtMzA4MS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXHUwMDNlbHJ1dmVjO1xubW0vdm1zY2FuLmM6MzA4MjpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzA4My1cbi0tXG5tbS92bXNjYW4uYy0zMTAxLVxubW0vdm1zY2FuLmM6MzEwMjpzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Qoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IG1tX3N0cnVjdCAqKml0ZXIpXG5tbS92bXNjYW4uYy0zMTAzLXtcbi0tXG5tbS92bXNjYW4uYy0zMTA4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzozMTA5Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjMxMTA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMxMTEtXG4tLVxubW0vdm1zY2FuLmM9MzE2Nj1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMzE2OS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzE3MDpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYzozMTcxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMTcyLVxuLS1cbm1tL3Ztc2Nhbi5jPTMyMTg9c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tLVxubW0vdm1zY2FuLmMtMzIyMS1cdGludCBpO1xubW0vdm1zY2FuLmM6MzIyMjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzIyMy1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyMzc9c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXG4tLVxubW0vdm1zY2FuLmMtMzIzOS1cdGludCBoaXN0LCB0aWVyO1xubW0vdm1zY2FuLmM6MzI0MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzI0MS1cdGJvb2wgY2xlYXIgPSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyBcdTAwM2UgMTtcbi0tXG5tbS92bXNjYW4uYz0zMjg5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzMDYtXHRkbyB7XG5tbS92bXNjYW4uYzozMzA3Olx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG5tbS92bXNjYW4uYy0zMzA4LVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tLVxubW0vdm1zY2FuLmM9MzM0Nj1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNDgtXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjMzNDk6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jOjMzNTA6XHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmMtMzM1MS1cdGJvb2wgZ2VuX2luY3JlYXNlZDtcbi0tXG5tbS92bXNjYW4uYy0zMzU0LVx0aWYgKGdlbl9pbmNyZWFzZWQpXG5tbS92bXNjYW4uYzozMzU1Olx0XHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xubW0vdm1zY2FuLmMtMzM1Ni1cdHJldHVybiBuZXdfZ2VuO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNTgtXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0zMzYwLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbi0tXG5tbS92bXNjYW4uYy0zMzc0LVxubW0vdm1zY2FuLmM6MzM3NTpzdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMzc2LXtcbi0tXG5tbS92bXNjYW4uYy0zMzc4LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzM3OTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzM4MC1cbi0tXG5tbS92bXNjYW4uYy0zMzkzLVxubW0vdm1zY2FuLmM6MzM5NDpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSlcbm1tL3Ztc2Nhbi5jLTMzOTUtXHRcdFx0bHJ1ICYjNDM7PSBMUlVfQUNUSVZFO1xuLS1cbm1tL3Ztc2Nhbi5jPTM0MDI9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM0MDUtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXHUwMDNldm1hO1xubW0vdm1zY2FuLmM6MzQwNjpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYy0zNDA3LVxuLS1cbm1tL3Ztc2Nhbi5jPTM1NDA9c3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbi0tXG5tbS92bXNjYW4uYy0zNTQ3LVxubW0vdm1zY2FuLmM6MzU0ODpzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM1NDktXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1NjQtXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xubW0vdm1zY2FuLmM6MzU2NTpcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xubW0vdm1zY2FuLmMtMzU2Ni1cdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTM1NzI9c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzU4Mi1cdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG5tbS92bXNjYW4uYzozNTgzOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM1ODQtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM1ODYtXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozNTg3Olx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG5tbS92bXNjYW4uYy0zNTg4LVx0dW5zaWduZWQgaW50IG5yO1xuLS1cbm1tL3Ztc2Nhbi5jPTM2NjM9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1zY2FuLmMtMzY3MC1cdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XG5tbS92bXNjYW4uYzozNjcxOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM2NzItXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM2NzQtXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozNjc1Olx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG5tbS92bXNjYW4uYy0zNjc2LVxuLS1cbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzc2MC1cdHVuc2lnbmVkIGxvbmcgZmlyc3QgPSAtMTtcbm1tL3Ztc2Nhbi5jOjM3NjE6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmM6Mzc2MjpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYy0zNzYzLVxuLS1cbm1tL3Ztc2Nhbi5jPTM4MjQ9c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zODMwLVx0dW5zaWduZWQgbG9uZyBuZXh0O1xubW0vdm1zY2FuLmM6MzgzMTpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYy0zODMyLVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NjUtXG5tbS92bXNjYW4uYzozODY2OnN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zODY3LXtcbi0tXG5tbS92bXNjYW4uYy0zOTAwLVxubW0vdm1zY2FuLmM6MzkwMTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbm1tL3Ztc2Nhbi5jLTM5MDIte1xubW0vdm1zY2FuLmM6MzkwMzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM5MDQtXG4tLVxubW0vdm1zY2FuLmM9MzkyMT1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXG5tbS92bXNjYW4uYy0zOTIyLXtcbm1tL3Ztc2Nhbi5jOjM5MjM6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gY3VycmVudC1cdTAwM2VyZWNsYWltX3N0YXRlLVx1MDAzZW1tX3dhbGs7XG5tbS92bXNjYW4uYy0zOTI0LVxuLS1cbm1tL3Ztc2Nhbi5jPTM5NDc9c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtMzk1MC1cdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIO1xubW0vdm1zY2FuLmM6Mzk1MTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzk1Mi1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmM6Mzk1MzpcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy0zOTU0LVx0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5NjQtXHRWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7XG5tbS92bXNjYW4uYzozOTY1Olx0Vk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT1cbm1tL3Ztc2Nhbi5jOjM5NjY6XHRcdFx0bHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCB0YXJnZXRfZ2VuKSk7XG5tbS92bXNjYW4uYy0zOTY3LVx0LyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovXG4tLVxubW0vdm1zY2FuLmM9NDAyOT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MDMyLVx0Ym9vbCBzZXFfaW5jX2ZsYWcgPSBmYWxzZTtcbm1tL3Ztc2Nhbi5jOjQwMzM6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMzQtXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTQwNDAtXHRcdHdoaWxlIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEpIHtcbm1tL3Ztc2Nhbi5jOjQwNDE6XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTQwNDItXG4tLVxubW0vdm1zY2FuLmMtNDA2MS1cbm1tL3Ztc2Nhbi5jOjQwNjI6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtNDA2My1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwODUtXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwODY6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwODctcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYy00MTE2LVx0ICovXG5tbS92bXNjYW4uYzo0MTE3Olx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSAxKTtcbm1tL3Ztc2Nhbi5jOjQxMTg6XHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWF4X3NlcSAmIzQzOyAxKTtcbm1tL3Ztc2Nhbi5jLTQxMTktXG4tLVxubW0vdm1zY2FuLmM9NDE0Nj1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MTQ5LVx0Ym9vbCBzdWNjZXNzO1xubW0vdm1zY2FuLmM6NDE1MDpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MTUxLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xubW0vdm1zY2FuLmM6NDE1MjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6NDE1MzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDE1NC1cbi0tXG5tbS92bXNjYW4uYy00MTY1LVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MTY2Olx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQxNjctXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MjMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyMzMtXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xubW0vdm1zY2FuLmM6NDIzNDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDIzNS1cdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtNDIzOS1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0MjQwOlx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbm1tL3Ztc2Nhbi5jLTQyNDEtXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOylcbi0tXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQyNzUtXG5tbS92bXNjYW4uYzo0Mjc2Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSk7XG5tbS92bXNjYW4uYy00Mjc3LVx0YmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xuLS1cbm1tL3Ztc2Nhbi5jLTQyODItLyogdG8gcHJvdGVjdCB0aGUgd29ya2luZyBzZXQgb2YgdGhlIGxhc3QgTiBqaWZmaWVzICovXG5tbS92bXNjYW4uYzo0MjgzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNDI4NC1cbm1tL3Ztc2Nhbi5jOjQyODU6c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQyODYte1xubW0vdm1zY2FuLmMtNDI4Ny1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbm1tL3Ztc2Nhbi5jOjQyODg6XHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcbm1tL3Ztc2Nhbi5jLTQyODktXHRib29sIHJlY2xhaW1hYmxlID0gIW1pbl90dGw7XG4tLVxubW0vdm1zY2FuLmMtNDMzMS0gKi9cbm1tL3Ztc2Nhbi5jOjQzMzI6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDMzMy17XG4tLVxubW0vdm1zY2FuLmMtNDMzNy1cdHVuc2lnbmVkIGxvbmcgZW5kO1xubW0vdm1zY2FuLmM6NDMzODpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MzM5LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy00MzQ3LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vdm1zY2FuLmM6NDM0ODpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbm1tL3Ztc2Nhbi5jLTQzNDktXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tLVxubW0vdm1zY2FuLmMtNDM4Ny1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xubW0vdm1zY2FuLmM6NDM4ODpcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG5tbS92bXNjYW4uYy00Mzg5LVx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYz00NDUwPWVudW0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NTctXG5tbS92bXNjYW4uYzo0NDU4OnN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxubW0vdm1zY2FuLmMtNDQ1OS17XG4tLVxubW0vdm1zY2FuLmMtNDUwNS1cbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA3LXtcbi0tXG5tbS92bXNjYW4uYy00NTMwLVxubW0vdm1zY2FuLmM6NDUzMTp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMyLXtcbi0tXG5tbS92bXNjYW4uYy00NTM3LVxubW0vdm1zY2FuLmM6NDUzODpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcbm1tL3Ztc2Nhbi5jLTQ1MzktXHR9XG4tLVxubW0vdm1zY2FuLmMtNDU0MS1cbm1tL3Ztc2Nhbi5jOjQ1NDI6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDU0My17XG4tLVxubW0vdm1zY2FuLmMtNDU2Ny1cbm1tL3Ztc2Nhbi5jOjQ1Njg6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTY5LXtcbi0tXG5tbS92bXNjYW4uYy00NTczLVx0aWYgKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXG5tbS92bXNjYW4uYzo0NTc0Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9IRUFEKTtcbm1tL3Ztc2Nhbi5jLTQ1NzUtfVxubW0vdm1zY2FuLmMtNDU3Ni1cbm1tL3Ztc2Nhbi5jOjQ1Nzc6Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1Nzgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ1OTA9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNDU5Mi17XG5tbS92bXNjYW4uYzo0NTkzOlx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjQ1OTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQ1OTUtXHRpbnQgc3dhcHBpbmVzcyA9IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4tLVxubW0vdm1zY2FuLmMtNDYyMy0gKi9cbm1tL3Ztc2Nhbi5jOjQ2MjQ6dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NjI1LXtcbi0tXG5tbS92bXNjYW4uYy00NjUwLSAqICAgIGdlbmVyYXRpb25zIG9uIGFuIExSVSBsaXN0LlxubW0vdm1zY2FuLmM6NDY1MTogKiA0LiBJbiBscnVfZ2VuX2RlbF9mb2xpbygpLCB0aGUgZ2VuZXJhdGlvbiB0byB3aGljaCB0aGUgZm9saW8gYmVsb25ncyBpc1xubW0vdm1zY2FuLmMtNDY1Mi0gKiAgICBmb3VuZCBiYXNlZCBvbiB0aGUgZ2VuZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiBmb2xpby1cdTAwM2VmbGFncywgYW5kIHRoZVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NTQtICogICAgdGhlIGxydSBzaXplIGNvcnJlY3RseSBkdXJpbmcgcmVwYXJlbnRpbmcsIG90aGVyd2lzZSB0aGUgbHJ1IHNpemUgbWF5XG5tbS92bXNjYW4uYzo0NjU1OiAqICAgIGJlIHVwZGF0ZWQgaW5jb3JyZWN0bHkgaW4gbHJ1X2dlbl9kZWxfZm9saW8oKS5cbm1tL3Ztc2Nhbi5jLTQ2NTYtICpcbi0tXG5tbS92bXNjYW4uYy00NjY0LSAqL1xubW0vdm1zY2FuLmM6NDY2NTpzdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDY2Ni1cdFx0XHRcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxubW0vdm1zY2FuLmMtNDY2Ny17XG5tbS92bXNjYW4uYzo0NjY4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmNoaWxkX2xydWdlbiwgKnBhcmVudF9scnVnZW47XG5tbS92bXNjYW4uYy00NjY5LVx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XG4tLVxubW0vdm1zY2FuLmMtNDY3NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdldF9ucl9nZW5zKGNoaWxkX2xydXZlYywgdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0Njc2Olx0XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShjaGlsZF9scnVnZW4tXHUwMDNlbWF4X3NlcSAtIGkpO1xubW0vdm1zY2FuLmMtNDY3Ny1cdFx0bG9uZyBucl9wYWdlcyA9IGNoaWxkX2xydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdO1xubW0vdm1zY2FuLmM6NDY3ODpcdFx0aW50IGNoaWxkX2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcbm1tL3Ztc2Nhbi5jOjQ2Nzk6XHRcdGludCBwYXJlbnRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikgPyBMUlVfQUNUSVZFIDogMDtcbm1tL3Ztc2Nhbi5jLTQ2ODAtXG4tLVxubW0vdm1zY2FuLmMtNDY4OC1cbm1tL3Ztc2Nhbi5jOjQ2ODk6XHRcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShjaGlsZF9scnV2ZWMsIGdlbikgIT0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSkge1xubW0vdm1zY2FuLmMtNDY5MC1cdFx0XHRfX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSAmIzQzOyBjaGlsZF9scnVfYWN0aXZlLCB6b25lLCAtbnJfcGFnZXMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2OTUtXG5tbS92bXNjYW4uYzo0Njk2OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5tbS92bXNjYW4uYy00Njk3LXtcbi0tXG5tbS92bXNjYW4uYy00NzA3LVx0XHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlJiM0MzsmIzQzOylcbm1tL3Ztc2Nhbi5jOjQ3MDg6XHRcdFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcbm1tL3Ztc2Nhbi5jLTQ3MDktXG4tLVxubW0vdm1zY2FuLmM9NDczMD1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDczOS1cdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xubW0vdm1zY2FuLmM6NDc0MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDc0MS1cbi0tXG5tbS92bXNjYW4uYy00NzQ4LVx0LyogcHJvbW90ZWQgKi9cbm1tL3Ztc2Nhbi5jOjQ3NDk6XHRpZiAoZ2VuICE9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XG5tbS92bXNjYW4uYy00NzUwLVx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ3Nzk9c3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3OTYtXG5tbS92bXNjYW4uYzo0Nzk3Olx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xubW0vdm1zY2FuLmMtNDc5OC1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4MDM9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODE0LVx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xubW0vdm1zY2FuLmM6NDgxNTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDgxNi1cbi0tXG5tbS92bXNjYW4uYy00ODIyLVxubW0vdm1zY2FuLmM6NDgyMzpcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xubW0vdm1zY2FuLmMtNDgyNC1cbi0tXG5tbS92bXNjYW4uYz00OTUxPXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NTktXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG5tbS92bXNjYW4uYzo0OTYwOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTQ5NjEtXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuLS1cbm1tL3Ztc2Nhbi5jLTUwMTAtXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xubW0vdm1zY2FuLmM6NTAxMTpcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxubW0vdm1zY2FuLmMtNTAxMi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4tLVxubW0vdm1zY2FuLmM9NTE3Mz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTgwLVxubW0vdm1zY2FuLmM6NTE4MTpcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG5tbS92bXNjYW4uYy01MTgyLVx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcbi0tXG5tbS92bXNjYW4uYz01MjE0PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMjAtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo1MjIxOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUyMjItXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtNTIzNC1cdFx0aWYgKG9wKSB7XG5tbS92bXNjYW4uYzo1MjM1Olx0XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xubW0vdm1zY2FuLmMtNTIzNi1cdFx0XHRvcCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNTI0OC1cdFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcbm1tL3Ztc2Nhbi5jOjUyNDk6XHRcdFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTUyNTAtXHRcdFx0bWVtY2cgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTUyNjYtXHRpZiAob3ApXG5tbS92bXNjYW4uYzo1MjY3Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcbm1tL3Ztc2Nhbi5jLTUyNjgtXG4tLVxubW0vdm1zY2FuLmMtNTI3My1cbm1tL3Ztc2Nhbi5jOjUyNzQ6XHQvKiByZXN0YXJ0IGlmIHJhY2VkIHdpdGggbHJ1X2dlbl9yb3RhdGVfbWVtY2coKSAqL1xubW0vdm1zY2FuLmMtNTI3NS1cdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXG4tLVxubW0vdm1zY2FuLmMtNTI4My1cbm1tL3Ztc2Nhbi5jOjUyODQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01Mjg1LXtcbi0tXG5tbS92bXNjYW4uYy01Mjk3LVx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmM6NTI5ODpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xubW0vdm1zY2FuLmMtNTI5OS1cbi0tXG5tbS92bXNjYW4uYy01MzA0LVxubW0vdm1zY2FuLmM6NTMwNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTMwNi17XG4tLVxubW0vdm1zY2FuLmM9NTM1MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01MzUyLXtcbm1tL3Ztc2Nhbi5jOjUzNTM6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUzNTQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtbS92bXNjYW4uY2AgY29kZSByZWxhdGVkIHRvIGRlYnVnZnMgYW5kIHN5c2ZzIGludGVyYWN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSB0aG9zZSBjb25uZWN0ZWQgdG8gdGhlIGRlYnVnIGFuZCBzeXN0ZW0gZmlsZSBzeXN0ZW1zLgoKVG8gbWFrZSB0aGlzIGVmZmljaWVudCwgSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiB0aGUgbGlrZWx5IGFyZWEgd2hlcmUgc3VjaCBjb2RlIHdvdWxkIHJlc2lkZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIGFyb3VuZCBsaW5lcyA1NTAwIHRvIDYwMDAuIFRoYXQgcmFuZ2Ugb2Z0ZW4gaG9sZHMgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBzeXN0ZW0gaXMgZXhwb3NlZCBmb3IgZGVidWdnaW5nIG9yIG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBgdm1zY2FuYCBleHBvc2VzIGFueSBpbnRlcm5hbCBzdGF0ZSBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU1MDA6XHRzdGF0aWMgc3NpemVfdCBtaW5fdHRsX21zX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG41NTAxOlx0XHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG41NTAyOlx0e1xuNTUwMzpcdFx0dW5zaWduZWQgaW50IG1zZWNzO1xuNTUwNDpcdFxuNTUwNTpcdFx0aWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZtc2VjcykpXG41NTA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTUwNzpcdFxuNTUwODpcdFx0V1JJVEVfT05DRShscnVfZ2VuX21pbl90dGwsIG1zZWNzX3RvX2ppZmZpZXMobXNlY3MpKTtcbjU1MDk6XHRcbjU1MTA6XHRcdHJldHVybiBsZW47XG41NTExOlx0fVxuNTUxMjpcdFxuNTUxMzpcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9taW5fdHRsX2F0dHIgPSBfX0FUVFJfUlcobWluX3R0bF9tcyk7XG41NTE0Olx0XG41NTE1Olx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbjU1MTY6XHR7XG41NTE3Olx0XHR1bnNpZ25lZCBpbnQgY2FwcyA9IDA7XG41NTE4Olx0XG41NTE5Olx0XHRpZiAoZ2V0X2NhcChMUlVfR0VOX0NPUkUpKVxuNTUyMDpcdFx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xuNTUyMTpcdFxuNTUyMjpcdFx0aWYgKHNob3VsZF93YWxrX21tdSgpKVxuNTUyMzpcdFx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xuNTUyNDpcdFxuNTUyNTpcdFx0aWYgKHNob3VsZF9jbGVhcl9wbWRfeW91bmcoKSlcbjU1MjY6XHRcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcbjU1Mjc6XHRcbjU1Mjg6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7MHglMDR4XFxuXCYjMzQ7LCBjYXBzKTtcbjU1Mjk6XHR9XG41NTMwOlx0XG41NTMxOlx0Lyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xuNTUzMjpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbjU1MzM6XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjU1MzQ6XHR7XG41NTM1Olx0XHRpbnQgaTtcbjU1MzY6XHRcdHVuc2lnbmVkIGludCBjYXBzO1xuNTUzNzpcdFxuNTUzODpcdFx0aWYgKHRvbG93ZXIoKmJ1ZikgPT0gJiMzOTtuJiMzOTspXG41NTM5Olx0XHRcdGNhcHMgPSAwO1xuNTU0MDpcdFx0ZWxzZSBpZiAodG9sb3dlcigqYnVmKSA9PSAmIzM5O3kmIzM5OylcbjU1NDE6XHRcdFx0Y2FwcyA9IC0xO1xuNTU0MjpcdFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFx1MDAyNmNhcHMpKVxuNTU0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU1NDQ6XHRcbjU1NDU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSYjNDM7JiM0MzspIHtcbjU1NDY6XHRcdFx0Ym9vbCBlbmFibGVkID0gY2FwcyBcdTAwMjYgQklUKGkpO1xuNTU0NzpcdFxuNTU0ODpcdFx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG41NTQ5Olx0XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG41NTUwOlx0XHRcdGVsc2UgaWYgKGVuYWJsZWQpXG41NTUxOlx0XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbjU1NTI6XHRcdFx0ZWxzZVxuNTU1MzpcdFx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xuNTU1NDpcdFx0fVxuNTU1NTpcdFxuNTU1NjpcdFx0cmV0dXJuIGxlbjtcbjU1NTc6XHR9XG41NTU4Olx0XG41NTU5Olx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcbjU1NjA6XHRcbjU1NjE6XHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xuNTU2MjpcdFx0XHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcbjU1NjM6XHRcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG41NTY0Olx0XHROVUxMXG41NTY1Olx0fTtcbjU1NjY6XHRcbjU1Njc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XG41NTY4Olx0XHQubmFtZSA9IFwmIzM0O2xydV9nZW5cJiMzNDssXG41NTY5Olx0XHQuYXR0cnMgPSBscnVfZ2VuX2F0dHJzLFxuNTU3MDpcdH07XG41NTcxOlx0XG41NTcyOlx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNTU3MzpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxuNTU3NDpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG41NTc1Olx0XG41NTc2Olx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXG41NTc3Olx0e1xuNTU3ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTU3OTpcdFx0bG9mZl90IG5yX3RvX3NraXAgPSAqcG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBkZWJ1Z2ZzIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IHNjYW5uaW5nLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGxpa2VseSByZXNpZGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cywgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgYG1tYCBkaXJlY3RvcnkuIE5vdywgd2hlcmUgd291bGQgdGhlIHZtIHNjYW5uaW5nIGRldGFpbHMgYmU/ICpBaCwgeWVzLCBgdm1zY2FuLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGUuKiBMZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmVzIDU1NzUgdGhyb3VnaCA2MDEwIHdpdGhpbiB0aGF0IGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbnMgb3Igc29tZSBpbmRpY2F0aW9uIG9mIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGFyZSBleHBvc2VkLiBGcm9tIHRob3NlIGxpbmVzIEkmIzM5O2xsIGJlIGFibGUgdG8gc2VlIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgdm1zYW4gY29kZS4gSXQmIzM5O3MgYSB0YXJnZXRlZCBzZWFyY2gsIEkgaG9wZSB0byBmaW5kIHNvbWUgaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbnMgdGhlcmUsIG90aGVyd2lzZSBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NTgwOlx0XG41NTgxOlx0XHRtLVx1MDAzZXByaXZhdGUgPSBrdm1hbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7XG41NTgyOlx0XHRpZiAoIW0tXHUwMDNlcHJpdmF0ZSlcbjU1ODM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG41NTg0Olx0XG41NTg1Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTtcbjU1ODY6XHRcdGRvIHtcbjU1ODc6XHRcdFx0aW50IG5pZDtcbjU1ODg6XHRcbjU1ODk6XHRcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG41NTkwOlx0XHRcdFx0aWYgKCFucl90b19za2lwLS0pXG41NTkxOlx0XHRcdFx0XHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjU1OTI6XHRcdFx0fVxuNTU5MzpcdFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xuNTU5NDpcdFxuNTU5NTpcdFx0cmV0dXJuIE5VTEw7XG41NTk2Olx0fVxuNTU5NzpcdFxuNTU5ODpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTU5OTpcdHtcbjU2MDA6XHRcdGlmICghSVNfRVJSX09SX05VTEwodikpXG41NjAxOlx0XHRcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhOVUxMLCBscnV2ZWNfbWVtY2codikpO1xuNTYwMjpcdFxuNTYwMzpcdFx0a3ZmcmVlKG0tXHUwMDNlcHJpdmF0ZSk7XG41NjA0Olx0XHRtLVx1MDAzZXByaXZhdGUgPSBOVUxMO1xuNTYwNTpcdH1cbjU2MDY6XHRcbjU2MDc6XHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuNTYwODpcdHtcbjU2MDk6XHRcdGludCBuaWQgPSBscnV2ZWNfcGdkYXQodiktXHUwMDNlbm9kZV9pZDtcbjU2MTA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh2KTtcbjU2MTE6XHRcbjU2MTI6XHRcdCYjNDM7JiM0MzsqcG9zO1xuNTYxMzpcdFxuNTYxNDpcdFx0bmlkID0gbmV4dF9tZW1vcnlfbm9kZShuaWQpO1xuNTYxNTpcdFx0aWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMpIHtcbjU2MTY6XHRcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpO1xuNTYxNzpcdFx0XHRpZiAoIW1lbWNnKVxuNTYxODpcdFx0XHRcdHJldHVybiBOVUxMO1xuNTYxOTpcdFxuNTYyMDpcdFx0XHRuaWQgPSBmaXJzdF9tZW1vcnlfbm9kZTtcbjU2MjE6XHRcdH1cbjU2MjI6XHRcbjU2MjM6XHRcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTYyNDpcdH1cbjU2MjU6XHRcbjU2MjY6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG41NjI3Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgdW5zaWduZWQgbG9uZyAqbWluX3NlcSxcbjU2Mjg6XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzZXEpXG41NjI5Olx0e1xuNTYzMDpcdFx0aW50IGk7XG41NjMxOlx0XHRpbnQgdHlwZSwgdGllcjtcbjU2MzI6XHRcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcbjU2MzM6XHRcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuNTYzNDpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG41NjM1Olx0XG41NjM2Olx0XHRmb3IgKHRpZXIgPSAwOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7XG41NjM3Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICAgICAgICAgICAgJTEwZFwmIzM0OywgdGllcik7XG41NjM4Olx0XHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KSB7XG41NjM5Olx0XHRcdFx0Y29uc3QgY2hhciAqcyA9IFwmIzM0O3h4eFwmIzM0OztcbjU2NDA6XHRcdFx0XHR1bnNpZ25lZCBsb25nIG5bM10gPSB7fTtcbjU2NDE6XHRcbjU2NDI6XHRcdFx0XHRpZiAoc2VxID09IG1heF9zZXEpIHtcbjU2NDM6XHRcdFx0XHRcdHMgPSBcJiMzNDtSVHhcJiMzNDs7XG41NjQ0Olx0XHRcdFx0XHRuWzBdID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW3RpZXJdKTtcbjU2NDU6XHRcdFx0XHRcdG5bMV0gPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVt0aWVyXSk7XG41NjQ2Olx0XHRcdFx0fSBlbHNlIGlmIChzZXEgPT0gbWluX3NlcVt0eXBlXSB8fCBOUl9ISVNUX0dFTlMgXHUwMDNlIDEpIHtcbjU2NDc6XHRcdFx0XHRcdHMgPSBcJiMzNDtyZXBcJiMzNDs7XG41NjQ4Olx0XHRcdFx0XHRuWzBdID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnVnZW4tXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcbjU2NDk6XHRcdFx0XHRcdG5bMV0gPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcbjU2NTA6XHRcdFx0XHRcdG5bMl0gPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XG41NjUxOlx0XHRcdFx0fVxuNTY1MjpcdFxuNTY1MzpcdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDM7IGkmIzQzOyYjNDM7KVxuNTY1NDpcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgJTEwbHUlY1wmIzM0OywgbltpXSwgc1tpXSk7XG41NjU1Olx0XHRcdH1cbjU2NTY6XHRcdFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG41NjU3Olx0XHR9XG41NjU4Olx0XG41NjU5Olx0XHRpZiAoIW1tX3N0YXRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGVidWdmcyBXcml0ZSBIYW5kbGVycyBmb3IgYGxydV9nZW5gKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBkZWJ1Z2ZzYCBpbnRlcmZhY2UgYW5kIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGUgaGFuZGxlcnMgYXZhaWxhYmxlIGZvciB0aGUgYGxydV9nZW5gIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgbW9kaWZpYWJsZSBvciBjb25maWd1cmFibGUgdGhyb3VnaCB0aGF0IGRlYnVnIGludGVyZmFjZS4gTXkgdGhpbmtpbmcgaXMgdG8gZGlyZWN0bHkgZXhhbWluZSB0aGUgY29kZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucyB0byBgbHJ1X2dlbmAuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSYjMzk7bGwgcmVhZCBmcm9tIGxpbmUgNTc1MCB0byA2MDIwLCB0byBwaW5wb2ludCB0aG9zZSBjcml0aWNhbCB3cml0ZSBoYW5kbGVyIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodCBuZWVkZWQgb24gd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGV4cG9zZWQgdG8gbWUgdmlhIGRlYnVnZnMsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGVmZmVjdHMgYXJlIG9uIHRoZSBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTc1MTpcdFxuNTc1MjpcdFx0cmV0dXJuIHRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MsIGZvcmNlX3NjYW4pID8gMCA6IC1FRVhJU1Q7XG41NzUzOlx0fVxuNTc1NDpcdFxuNTc1NTpcdHN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuNTc1NjpcdFx0XHRcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG41NzU3Olx0e1xuNTc1ODpcdFx0aW50IG5yX2JhdGNoO1xuNTc1OTpcdFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbjU3NjA6XHRcbjU3NjE6XHRcdGlmIChzZXEgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG41NzYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTc2MzpcdFxuNTc2NDpcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcbjU3NjU6XHRcbjU3NjY6XHRcdHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjU3Njc6XHRcdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbjU3Njg6XHRcbjU3Njk6XHRcdFx0aWYgKHNlcSBcdTAwM2MgZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykpXG41NzcwOlx0XHRcdFx0cmV0dXJuIDA7XG41NzcxOlx0XG41NzcyOlx0XHRcdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlPSBucl90b19yZWNsYWltKVxuNTc3MzpcdFx0XHRcdHJldHVybiAwO1xuNTc3NDpcdFxuNTc3NTpcdFx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbjU3NzY6XHRcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxuNTc3NzpcdFx0XHRcdHJldHVybiAwO1xuNTc3ODpcdFxuNTc3OTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjU3ODA6XHRcdH1cbjU3ODE6XHRcbjU3ODI6XHRcdHJldHVybiAtRUlOVFI7XG41NzgzOlx0fVxuNTc4NDpcdFxuNTc4NTpcdHN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcbjU3ODY6XHRcdFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcbjU3ODc6XHR7XG41Nzg4Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG41Nzg5Olx0XHRpbnQgZXJyID0gLUVJTlZBTDtcbjU3OTA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG41NzkxOlx0XG41NzkyOlx0XHRpZiAobmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSlcbjU3OTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41Nzk0Olx0XG41Nzk1Olx0XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xuNTc5NjpcdFx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQobWVtY2dfaWQpO1xuNTc5NzpcdFx0XHRpZiAoIW1lbWNnKVxuNTc5ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTc5OTpcdFx0fVxuNTgwMDpcdFxuNTgwMTpcdFx0aWYgKG1lbWNnX2lkICE9IG1lbV9jZ3JvdXBfaWQobWVtY2cpKVxuNTgwMjpcdFx0XHRnb3RvIGRvbmU7XG41ODAzOlx0XG41ODA0Olx0XHRzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnO1xuNTgwNTpcdFx0bHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjU4MDY6XHRcbjU4MDc6XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUylcbjU4MDg6XHRcdFx0c3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuNTgwOTpcdFx0ZWxzZSBpZiAoc3dhcHBpbmVzcyBcdTAwM2UgU1dBUFBJTkVTU19BTk9OX09OTFkpXG41ODEwOlx0XHRcdGdvdG8gZG9uZTtcbjU4MTE6XHRcbjU4MTI6XHRcdHN3aXRjaCAoY21kKSB7XG41ODEzOlx0XHRjYXNlICYjMzk7JiM0MzsmIzM5OzpcbjU4MTQ6XHRcdFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xuNTgxNTpcdFx0XHRicmVhaztcbjU4MTY6XHRcdGNhc2UgJiMzOTstJiMzOTs6XG41ODE3Olx0XHRcdGVyciA9IHJ1bl9ldmljdGlvbihscnV2ZWMsIHNlcSwgc2MsIHN3YXBwaW5lc3MsIG9wdCk7XG41ODE4Olx0XHRcdGJyZWFrO1xuNTgxOTpcdFx0fVxuNTgyMDpcdGRvbmU6XG41ODIxOlx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG41ODIyOlx0XG41ODIzOlx0XHRyZXR1cm4gZXJyO1xuNTgyNDpcdH1cbjU4MjU6XHRcbjU4MjY6XHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG41ODI3Olx0c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXG41ODI4Olx0XHRcdFx0XHQgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG41ODI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE1HTFJVIExpc3QgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYGxydV9nZW5fc2VxX3dyaXRlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGRlYnVnZnMgY29tbWFuZHMgdGhhdCB0cmlnZ2VyIGFnaW5nIG9yIGV2aWN0aW9uLCBhbmQgdGhhdCwgaW4gdHVybiwgZnVubmVscyBpbnRvIHRoZSBjb3JlIHNlcXVlbmNlIGluY3JlbWVudCBhbmQgZm9saW8gZXZpY3Rpb24gbG9naWMuIFRoZSBmbG93IGlzIGNsZWFyOiBjb21tYW5kcyBmcm9tIGRlYnVnZnMsIHdoaWNoLCBpbiB0dXJuLCB0cmlnZ2VycyBhZ2luZy9ldmljdGlvbiwgdHJpZ2dlcnMgdGhlIHNlcXVlbmNlIGluY3JlbWVudCBhbmQvb3IgZm9saW8gZXZpY3Rpb24uIEJvdGggbm9ybWFsIHBhZ2UgcmVjbGFtYXRpb24gYW5kIHRoZSBkZWJ1Z2ZzIHBhdGhzIHNlZW0gdG8gaGl0IHNpbWlsYXIgY29kZSBwYXRoczogYHNocmlua19ub2RlYCAtJmd0OyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgLSZndDsgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCAtJmd0OyBgZXZpY3RfZm9saW9zYCBvciBgdHJ5X3RvX2luY19tYXhfc2VxYC4KCk5vdywgdGhpcyBzcGVjaWZpYyBwYXRjaDogVGhlIGluaXRpYWwgY2hhbmdlIGlzIHRoZSBgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvYCBtYWNybyB0dXJuZWQgaW50byBhbiBpbmxpbmUgZnVuY3Rpb24sIGFuZCBhIG5ldyBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYC4gVGhhdCYjMzk7cyBhIHJlZmFjdG9yLCBtYWtpbmcgdGhlIGNvZGUgYSBsaXR0bGUgbW9yZSByZWFkYWJsZS4gQWxzbywgdGhlcmUmIzM5O3MgYSBuZXcgaGVscGVyLCBgX19mb2xpb19pbmNfZ2VuYCwgdGhhdCBhYnN0cmFjdHMgdGhlIGNvcmUgZ2VuZXJhdGlvbiBpbmNyZW1lbnQgbG9naWMuIFRoZSBuZXcgYGZsdXNoX2xydV9iYXRjaGAgaGVscGVyIGlzIGEgbmljZSB0b3VjaDsgdGhpcyBjbGVhcmx5IGFpbXMgdG8gb3B0aW1pemUgbGlzdCBtYW5pcHVsYXRpb25zIGZvciBwZXJmb3JtYW5jZS4KClRoZSBiaWcgY2hhbmdlIGlzIHdpdGhpbiBgaW5jX21pbl9zZXFgLiBJbnN0ZWFkIG9mIGluZGl2aWR1YWxseSBtb3ZpbmcgZWFjaCBmb2xpbywgaXQmIzM5O3Mgbm93IGJhdGNoaW5nIHRoZSBtb3ZlcyEgSXQgaXRlcmF0ZXMgdGhlIGxpc3QsIHByZWZldGNoZXMgdGhlIG5leHQgZW50cnksIGluY3JlbWVudHMgdGhlIGdlbmVyYXRpb24sIGFuZCAqdGhlbiogZG9lcyB0aGUgZm9saW8gbW92ZS4gSXQga2VlcHMgdHJhY2sgb2YgYSBgYmF0Y2hfZW5kYCwgYWNjdW11bGF0aW5nIGZvbGlvcyB0byBiZSBtb3ZlZC4gSWYgdGhlIGdlbmVyYXRpb24gaW5jcmVhc2VzIChgZ2VuX2luY3JlYXNlZGAgaXMgdHJ1ZSksIGl0IHVwZGF0ZXMgYSBkZWx0YSwgYWNjdW11bGF0ZXMgdGhlIGJhdGNoLCBhbmQgdXBkYXRlcyBwcm90ZWN0ZWQgdGllciBzdGF0cy4gSWYgdGhlIGdlbmVyYXRpb24gZG9lc24mIzM5O3QgaW5jcmVhc2UgKHByb21vdGlvbiksIGl0IGZsdXNoZXMgdGhlIGJhdGNoIGFuZCB0aGVuIG1vdmVzIHRoZSBjdXJyZW50IGZvbGlvLiBBZnRlciB0aGUgbG9vcCwgdGhlIHJlbWFpbmluZyBiYXRjaCBpcyBmbHVzaGVkLiBUaGVyZSBhcmUgYWxzbyBuZXcgYFZNX1dBUk5fT05fT05DRWAgY2hlY2tzIGFkZGVkIHRvIGVuc3VyZSBzYW5pdHkgYXJvdW5kIHRoZSBudW1iZXIgb2YgZ2VuZXJhdGlvbnMgYW5kIGFjdGl2ZSBMUlUgc3RhdGUuIFRoZSBiYXRjaGluZyBpcyBzbWFydC4KCk9rYXksIGlzIHRoaXMgcGF0Y2ggZnV6emFibGU/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB0aGUgdmVyeSBjb3JlIG9mIE1HTFJVJiMzOTtzIGFnaW5nIGFuZCBldmljdGlvbiBhbGdvcml0aG1zLCBpbiB0aGUgY3JpdGljYWwgYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgbWFuaXB1bGF0aW5nIGxpc3RzIHVzaW5nIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBsaXN0X3NwbGljZV90YWlsX2luaXRgIGFuZCB0cmFja2luZyBhIGdlbmVyYXRpb24sIGFuZCBiYXRjaGluZyBhY2NvdW50aW5nLiBUaGlzIGtpbmQgb2YgbG9naWMgaXMgcHJpbWUgZm9yIGZpbmRpbmcgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSwgTFJVIGFnaW5nLCBwYWdlIHJlY2xhaW0sIG9yIGRlYnVnZ2luZy4gVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3ltYm9scyBpbiBgbW0vdm1zY2FuLmNgIG9yIHJlbGF0ZWQgYXJlIGdvb2QgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMuIEkgd2FudCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIChiZWNhdXNlIHRob3NlIGhlbHBlcnMgYXJlIHVzdWFsbHkgaW5saW5lZCwgc28gdGhlIGZ1enplciB3b3VsZG4mIzM5O3QgdGFyZ2V0IHRoZSBzeW1ib2xzIGRpcmVjdGx5KS4gTGV0JiMzOTtzIGxvb2sgZm9yIGZ1bmN0aW9ucyBpbiB0aGF0IGFyZWEgcmVsYXRlZCB0byBNR0xSVSBvciB2bXNjYW4gdGhhdCBhcmVuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtMTg0LSNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbm1tL3Ztc2Nhbi5jOjE4NTpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0xODYtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4tLVxubW0vdm1zY2FuLmMtMTk1LVxubW0vdm1zY2FuLmM6MTk2OnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTE5Ny1cdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbi0tXG5tbS92bXNjYW4uYy0yMDYtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjIwNzpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0yMDgtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4tLVxubW0vdm1zY2FuLmMtMjExLVxubW0vdm1zY2FuLmM6MjEyOnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTIxMy1cdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbi0tXG5tbS92bXNjYW4uYz0yMjE9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcbm1tL3Ztc2Nhbi5jLTIyMi1cbm1tL3Ztc2Nhbi5jOjIyMzpzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTIyNC17XG4tLVxubW0vdm1zY2FuLmMtMjMyLS8qIFJldHVybnMgdHJ1ZSBmb3IgcmVjbGFpbSB0aHJvdWdoIGNncm91cCBsaW1pdHMgb3IgY2dyb3VwIGludGVyZmFjZXMuICovXG5tbS92bXNjYW4uYzoyMzM6c3RhdGljIGJvb2wgY2dyb3VwX3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yMzQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI0MS0gKi9cbm1tL3Ztc2Nhbi5jOjI0MjpzdGF0aWMgYm9vbCByb290X3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yNDMte1xuLS1cbm1tL3Ztc2Nhbi5jLTI1OS0gKi9cbm1tL3Ztc2Nhbi5jOjI2MDpzdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjYxLXtcbi0tXG5tbS92bXNjYW4uYy0yNzAtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI3MTpzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTI3Mi17XG4tLVxubW0vdm1zY2FuLmMtMjc1LVxubW0vdm1zY2FuLmM6Mjc2OnN0YXRpYyBib29sIHJvb3RfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTI3Ny17XG4tLVxubW0vdm1zY2FuLmMtMjgwLVxubW0vdm1zY2FuLmM6MjgxOnN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yODIte1xuLS1cbm1tL3Ztc2Nhbi5jLTI4Ni1cbm1tL3Ztc2Nhbi5jOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0yODgtXHRcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtMjkyLVxubW0vdm1zY2FuLmM6MjkzOnN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxubW0vdm1zY2FuLmMtMjk0LVx0XHRcdFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwOC0gKi9cbm1tL3Ztc2Nhbi5jOjMwOTpzdGF0aWMgdm9pZCBmbHVzaF9yZWNsYWltX3N0YXRlKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMzEwLXtcbi0tXG5tbS92bXNjYW4uYy0zNDQtXG5tbS92bXNjYW4uYzozNDU6c3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbm1tL3Ztc2Nhbi5jLTM0Ni1cdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0zNjQtXG5tbS92bXNjYW4uYzozNjU6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtMzY2LVx0XHRcdFx0XHQgIGludCBuaWQsXG4tLVxubW0vdm1zY2FuLmMtMzk0LSAqL1xubW0vdm1zY2FuLmM6Mzk1OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbm1tL3Ztc2Nhbi5jLTM5Ni17XG4tLVxubW0vdm1zY2FuLmMtNDEzLSAqL1xubW0vdm1zY2FuLmM6NDE0OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbm1tL3Ztc2Nhbi5jLTQxNS17XG4tLVxubW0vdm1zY2FuLmMtNDI4LVxubW0vdm1zY2FuLmM6NDI5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRyb3Bfc2xhYl9ub2RlKGludCBuaWQpXG5tbS92bXNjYW4uYy00MzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0MS1cbm1tL3Ztc2Nhbi5jOjQ0Mjp2b2lkIGRyb3Bfc2xhYih2b2lkKVxubW0vdm1zY2FuLmMtNDQzLXtcbi0tXG5tbS92bXNjYW4uYy00NjYtXG5tbS92bXNjYW4uYzo0Njc6c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDY4LXtcbi0tXG5tbS92bXNjYW4uYy00OTMtICovXG5tbS92bXNjYW4uYzo0OTQ6c3RhdGljIHZvaWQgaGFuZGxlX3dyaXRlX2Vycm9yKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vdm1zY2FuLmMtNDk1LVx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IGVycm9yKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMi1cbm1tL3Ztc2Nhbi5jOjUwMzpzdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTUwNC17XG4tLVxubW0vdm1zY2FuLmMtNTMwLVxubW0vdm1zY2FuLmM6NTMxOnZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXG5tbS92bXNjYW4uYy01MzIte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNC0gKi9cbm1tL3Ztc2Nhbi5jOjYwNTp2b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdm1zY2FuLmMtNjA2LVx0XHRcdFx0XHRcdFx0aW50IG5yX3Rocm90dGxlZClcbi0tXG5tbS92bXNjYW4uYz02Mjc9dHlwZWRlZiBlbnVtIHtcbi0tXG5tbS92bXNjYW4uYy02NDAtICovXG5tbS92bXNjYW4uYzo2NDE6c3RhdGljIHBhZ2VvdXRfdCBwYWdlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbm1tL3Ztc2Nhbi5jLTY0Mi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbi0tXG5tbS92bXNjYW4uYy03MDEtICovXG5tbS92bXNjYW4uYzo3MDI6c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdm1zY2FuLmMtNzAzLVx0XHRcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbi0tXG5tbS92bXNjYW4uYy04MTctICovXG5tbS92bXNjYW4uYzo4MTg6bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTgxOS17XG4tLVxubW0vdm1zY2FuLmMtODQwLSAqL1xubW0vdm1zY2FuLmM6ODQxOnZvaWQgZm9saW9fcHV0YmFja19scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTg0Mi17XG4tLVxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODU5LSAqL1xubW0vdm1zY2FuLmM6ODYwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg2MS17XG4tLVxubW0vdm1zY2FuLmMtODgxLSNlbHNlXG5tbS92bXNjYW4uYzo4ODI6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODgzLXtcbi0tXG5tbS92bXNjYW4uYy04ODctXG5tbS92bXNjYW4uYzo4ODg6c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy04ODktXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy05NTQtLyogQ2hlY2sgaWYgYSBmb2xpbyBpcyBkaXJ0eSBvciB1bmRlciB3cml0ZWJhY2sgKi9cbm1tL3Ztc2Nhbi5jOjk1NTpzdGF0aWMgdm9pZCBmb2xpb19jaGVja19kaXJ0eV93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTk1Ni1cdFx0XHRcdCAgICAgICBib29sICpkaXJ0eSwgYm9vbCAqd3JpdGViYWNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTk4NS1cbm1tL3Ztc2Nhbi5jOjk4NjpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG5tbS92bXNjYW4uYy05ODctXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbi0tXG5tbS92bXNjYW4uYy0xMDE2LSAqL1xubW0vdm1zY2FuLmM6MTAxNzpzdGF0aWMgdW5zaWduZWQgaW50IGRlbW90ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbW90ZV9mb2xpb3MsXG5tbS92bXNjYW4uYy0xMDE4LVx0XHRcdFx0ICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy0xMDU5LVxubW0vdm1zY2FuLmM6MTA2MDpzdGF0aWMgYm9vbCBtYXlfZW50ZXJfZnMoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX21hc2spXG5tbS92bXNjYW4uYy0xMDYxLXtcbi0tXG5tbS92bXNjYW4uYy0xMDc3LSAqL1xubW0vdm1zY2FuLmM6MTA3ODpzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG5tbS92bXNjYW4uYy0xMDc5LVx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0xNjA4LVxubW0vdm1zY2FuLmM6MTYwOTp1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS92bXNjYW4uYy0xNjEwLVx0XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTE2NjMtICovXG5tbS92bXNjYW4uYzoxNjY0OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTE2NjUtXHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgKm5yX3pvbmVfdGFrZW4pXG4tLVxubW0vdm1zY2FuLmMtMTY5OC0gKi9cbm1tL3Ztc2Nhbi5jOjE2OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTE3MDAtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTE4MTUtICovXG5tbS92bXNjYW4uYzoxODE2OmJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTE4MTcte1xuLS1cbm1tL3Ztc2Nhbi5jLTE4NDEtICovXG5tbS92bXNjYW4uYzoxODQyOnN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxubW0vdm1zY2FuLmMtMTg0My1cdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMTg4NS0gKi9cbm1tL3Ztc2Nhbi5jOjE4ODY6c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL3Ztc2Nhbi5jLTE4ODcte1xuLS1cbm1tL3Ztc2Nhbi5jLTE5NTUtICovXG5tbS92bXNjYW4uYzoxOTU2OnN0YXRpYyBpbnQgY3VycmVudF9tYXlfdGhyb3R0bGUodm9pZClcbm1tL3Ztc2Nhbi5jLTE5NTcte1xuLS1cbm1tL3Ztc2Nhbi5jLTE5NjAtXG5tbS92bXNjYW4uYzoxOTYxOnN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxubW0vdm1zY2FuLmMtMTk2Mi1cdFx0XHRcdCAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy0yMDAyLSAqL1xubW0vdm1zY2FuLmM6MjAwMzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDA0LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwODQtICovXG5tbS92bXNjYW4uYzoyMDg1OnN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDg2LVx0XHRcdCAgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjE3My1cbm1tL3Ztc2Nhbi5jOjIxNzQ6c3RhdGljIHVuc2lnbmVkIGludCByZWNsYWltX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbm1tL3Ztc2Nhbi5jLTIxNzUtXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTIxOTgtXG5tbS92bXNjYW4uYzoyMTk5OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxubW0vdm1zY2FuLmMtMjIwMC17XG4tLVxubW0vdm1zY2FuLmMtMjIzMS1cbm1tL3Ztc2Nhbi5jOjIyMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIyMzMtXHRcdFx0XHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMjczLSAqL1xubW0vdm1zY2FuLmM6MjI3NDpzdGF0aWMgYm9vbCBpbmFjdGl2ZV9pc19sb3coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGluYWN0aXZlX2xydSlcbm1tL3Ztc2Nhbi5jLTIyNzUte1xuLS1cbm1tL3Ztc2Nhbi5jPTIyOTM9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyOTktXG5tbS92bXNjYW4uYzoyMzAwOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjMwMS17XG4tLVxubW0vdm1zY2FuLmMtMjQ2My1cbm1tL3Ztc2Nhbi5jOjI0NjQ6c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9wcmVzc3VyZV9iYWxhbmNlKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtMjQ2NS1cdFx0XHRpbnQgc3dhcHBpbmVzcywgdTY0ICpmcmFjdGlvbiwgdTY0ICpkZW5vbWluYXRvcilcbi0tXG5tbS92bXNjYW4uYy0yNTAwLVxubW0vdm1zY2FuLmM6MjUwMTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy0yNTAyLVx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBzY2FuKVxuLS1cbm1tL3Ztc2Nhbi5jLTI1NjktICovXG5tbS92bXNjYW4uYzoyNTcwOnN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy0yNTcxLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKm5yKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTktICovXG5tbS92bXNjYW4uYzoyNzAwOnN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy0yNzAxLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNzEzLVxubW0vdm1zY2FuLmM6MjcxNDpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jLTI3MTUtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI3MTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNzE3LSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI3MTgtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI3MTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmMtMjcyMC0jZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbi0tXG5tbS92bXNjYW4uYy0yNzIyLVxubW0vdm1zY2FuLmM6MjcyMzpzdGF0aWMgYm9vbCBzaG91bGRfd2Fsa19tbXUodm9pZClcbm1tL3Ztc2Nhbi5jLTI3MjQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI3MjctXG5tbS92bXNjYW4uYzoyNzI4OnN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbm1tL3Ztc2Nhbi5jLTI3Mjkte1xuLS1cbm1tL3Ztc2Nhbi5jLTI3NjMtXG5tbS92bXNjYW4uYzoyNzY0OnN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTI3NjUte1xuLS1cbm1tL3Ztc2Nhbi5jLTI3ODMtXG5tbS92bXNjYW4uYzoyNzg0OnN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTI3ODUte1xuLS1cbm1tL3Ztc2Nhbi5jLTI4MDItXG5tbS92bXNjYW4uYzoyODAzOnN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbm1tL3Ztc2Nhbi5jLTI4MDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI4MDctXG5tbS92bXNjYW4uYzoyODA4OnN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0yODA5LXtcbi0tXG5tbS92bXNjYW4uYy0yODQ5LVxubW0vdm1zY2FuLmM6Mjg1MDpzdGF0aWMgaW5saW5lIGludCBmaWx0ZXJfZ2VuX2Zyb21fc2VxKHVuc2lnbmVkIGxvbmcgc2VxKVxubW0vdm1zY2FuLmMtMjg1MS17XG4tLVxubW0vdm1zY2FuLmMtMjg1NC1cbm1tL3Ztc2Nhbi5jOjI4NTU6c3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAqa2V5KVxubW0vdm1zY2FuLmMtMjg1Ni17XG4tLVxubW0vdm1zY2FuLmMtMjg2NC1cbm1tL3Ztc2Nhbi5jOjI4NjU6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NjYtXHRcdFx0ICAgICAgdm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODgwLVxubW0vdm1zY2FuLmM6Mjg4MTpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODgyLVx0XHRcdFx0dm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbm1tL3Ztc2Nhbi5jLTI5MDEte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjEtXG5tbS92bXNjYW4uYzoyOTIyOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yOTIzLXtcbi0tXG5tbS92bXNjYW4uYy0yOTM3LVxubW0vdm1zY2FuLmM6MjkzODpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKmdldF9tbV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0yOTM5LXtcbi0tXG5tbS92bXNjYW4uYy0yOTQyLVxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTI5NDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NjEtXG5tbS92bXNjYW4uYzoyOTYyOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTYzLXtcbi0tXG5tbS92bXNjYW4uYy0yOTg4LVxubW0vdm1zY2FuLmM6Mjk4OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk5MC17XG4tLVxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMzAzMC17XG4tLVxubW0vdm1zY2FuLmMtMzA1OS1cbm1tL3Ztc2Nhbi5jOjMwNjA6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTMwNjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjQtXG5tbS92bXNjYW4uYzozMDY1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTMwNjYte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjktXG5tbS92bXNjYW4uYzozMDcwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMzA3MS17XG4tLVxubW0vdm1zY2FuLmMtMzA3Ni1cbm1tL3Ztc2Nhbi5jOjMwNzc6c3RhdGljIHZvaWQgcmVzZXRfbW1fc3RhdHMoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaywgYm9vbCBsYXN0KVxubW0vdm1zY2FuLmMtMzA3OC17XG4tLVxubW0vdm1zY2FuLmMtMzEwMS1cbm1tL3Ztc2Nhbi5jOjMxMDI6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxubW0vdm1zY2FuLmMtMzEwMy17XG4tLVxubW0vdm1zY2FuLmMtMzE2NS1cbm1tL3Ztc2Nhbi5jOjMxNjY6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0X25vd2FsayhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxKVxubW0vdm1zY2FuLmMtMzE2Ny17XG4tLVxubW0vdm1zY2FuLmM9MzIxMj1zdHJ1Y3QgY3RybF9wb3Mge1xuLS1cbm1tL3Ztc2Nhbi5jLTMyMTctXG5tbS92bXNjYW4uYzozMjE4OnN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxubW0vdm1zY2FuLmMtMzIxOS1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuLS1cbm1tL3Ztc2Nhbi5jLTMyMzYtXG5tbS92bXNjYW4uYzozMjM3OnN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxubW0vdm1zY2FuLmMtMzIzOC17XG4tLVxubW0vdm1zY2FuLmMtMzI3Mi1cbm1tL3Ztc2Nhbi5jOjMyNzM6c3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbm1tL3Ztc2Nhbi5jLTMyNzQte1xuLS1cbm1tL3Ztc2Nhbi5jLTMyODgtLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG5tbS92bXNjYW4uYzozMjg5OnN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtMzI5MC17XG4tLVxubW0vdm1zY2FuLmMtMzMxNy1cbm1tL3Ztc2Nhbi5jOjMzMTg6c3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbm1tL3Ztc2Nhbi5jLTMzMTkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNDUtLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbm1tL3Ztc2Nhbi5jOjMzNDY6c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3Ztc2Nhbi5jLTMzNDcte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNTgtXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy0zMzYwLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbi0tXG5tbS92bXNjYW4uYy0zMzc0LVxubW0vdm1zY2FuLmM6MzM3NTpzdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMzc2LXtcbi0tXG5tbS92bXNjYW4uYy0zNDAxLVxubW0vdm1zY2FuLmM6MzQwMjpzdGF0aWMgaW50IHNob3VsZF9za2lwX3ZtYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKmFyZ3MpXG5tbS92bXNjYW4uYy0zNDAzLXtcbi0tXG5tbS92bXNjYW4uYy0zNDQ3LSAqL1xubW0vdm1zY2FuLmM6MzQ0ODpzdGF0aWMgYm9vbCBnZXRfbmV4dF92bWEodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtbV93YWxrICphcmdzLFxubW0vdm1zY2FuLmMtMzQ0OS1cdFx0XHQgdW5zaWduZWQgbG9uZyAqdm1fc3RhcnQsIHVuc2lnbmVkIGxvbmcgKnZtX2VuZClcbi0tXG5tbS92bXNjYW4uYy0zNDczLVxubW0vdm1zY2FuLmM6MzQ3NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcHRlX3BmbihwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS92bXNjYW4uYy0zNDc1LVx0XHRcdFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtMzQ5OC1cbm1tL3Ztc2Nhbi5jOjM0OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3BtZF9wZm4ocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vdm1zY2FuLmMtMzUwMC1cdFx0XHRcdCBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1MjAtXG5tbS92bXNjYW4uYzozNTIxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmdldF9wZm5fZm9saW8odW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTM1MjItXHRcdFx0XHQgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1MzktXG5tbS92bXNjYW4uYzozNTQwOnN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG5tbS92bXNjYW4uYy0zNTQxLXtcbi0tXG5tbS92bXNjYW4uYy0zNTQ3LVxubW0vdm1zY2FuLmM6MzU0ODpzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM1NDktXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuLS1cbm1tL3Ztc2Nhbi5jLTM1NzEtXG5tbS92bXNjYW4uYzozNTcyOnN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzU3My1cdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYy0zNjYyLVxubW0vdm1zY2FuLmM6MzY2MzpzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM2NjQtXHRcdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzLCB1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGxvbmcgKmZpcnN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTM3NTAtXG5tbS92bXNjYW4uYzozNzUxOnN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzc1Mi1cdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYy0zODIzLVxubW0vdm1zY2FuLmM6MzgyNDpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzgyNS1cdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NjUtXG5tbS92bXNjYW4uYzozODY2OnN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zODY3LXtcbi0tXG5tbS92bXNjYW4uYy0zOTAwLVxubW0vdm1zY2FuLmM6MzkwMTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbm1tL3Ztc2Nhbi5jLTM5MDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MjAtXG5tbS92bXNjYW4uYzozOTIxOnN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM5MjIte1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MzMtXG5tbS92bXNjYW4uYzozOTM0OnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbm1tL3Ztc2Nhbi5jLTM5MzUtXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXG4tLVxubW0vdm1zY2FuLmMtMzk0Ni1cbm1tL3Ztc2Nhbi5jOjM5NDc6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy0zOTQ4LXtcbi0tXG5tbS92bXNjYW4uYy00MDI4LVxubW0vdm1zY2FuLmM6NDAyOTpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbm1tL3Ztc2Nhbi5jLTQwMzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQwODAtXG5tbS92bXNjYW4uYzo0MDgxOnN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxubW0vdm1zY2FuLmMtNDA4Mi17XG4tLVxubW0vdm1zY2FuLmMtNDE0NS1cbm1tL3Ztc2Nhbi5jOjQxNDY6c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy00MTQ3LVx0XHRcdCAgICAgICBpbnQgc3dhcHBpbmVzcywgYm9vbCBmb3JjZV9zY2FuKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyMDMtXG5tbS92bXNjYW4uYzo0MjA0OnN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDIwNS17XG4tLVxubW0vdm1zY2FuLmMtNDIyOS1cbm1tL3Ztc2Nhbi5jOjQyMzA6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG5tbS92bXNjYW4uYy00MjMxLXtcbi0tXG5tbS92bXNjYW4uYy00MjQ4LVxubW0vdm1zY2FuLmM6NDI0OTpzdGF0aWMgYm9vbCBscnV2ZWNfaXNfc2l6YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDI1MC17XG4tLVxubW0vdm1zY2FuLmMtNDI2MC1cbm1tL3Ztc2Nhbi5jOjQyNjE6c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy00MjYyLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG1pbl90dGwpXG4tLVxubW0vdm1zY2FuLmM9NDI4Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnVfZ2VuX21pbl90dGwgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTQyODQtXG5tbS92bXNjYW4uYzo0Mjg1OnN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00Mjg2LXtcbi0tXG5tbS92bXNjYW4uYy00MzMxLSAqL1xubW0vdm1zY2FuLmM6NDMzMjpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MzMzLXtcbi0tXG5tbS92bXNjYW4uYz00NDUwPWVudW0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NTctXG5tbS92bXNjYW4uYzo0NDU4OnN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxubW0vdm1zY2FuLmMtNDQ1OS17XG4tLVxubW0vdm1zY2FuLmMtNDUwNS1cbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA3LXtcbi0tXG5tbS92bXNjYW4uYy00NTMwLVxubW0vdm1zY2FuLmM6NDUzMTp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMyLXtcbi0tXG5tbS92bXNjYW4uYy00NTQxLVxubW0vdm1zY2FuLmM6NDU0Mjp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQzLXtcbi0tXG5tbS92bXNjYW4uYy00NTY3LVxubW0vdm1zY2FuLmM6NDU2ODp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1Njkte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NzYtXG5tbS92bXNjYW4uYzo0NTc3OmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTc4LXtcbi0tXG5tbS92bXNjYW4uYy00NTg5LVxubW0vdm1zY2FuLmM6NDU5MDpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTQ1OTEtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNDYyMy0gKi9cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY1NQoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX3NlcV93cml0ZWAgYW5kIGl0cyBDb25uZWN0aW9ucyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgc3RhdGljIGZpbGUgb3BlcmF0aW9uIGhhbmRsZXIg4oCTIEkgZ2V0IHRoYXQuIEJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgVk0gc2Nhbm5pbmcgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRoYXQgYXJlIHNvbWVob3cgcmVsYXRlZCB0byBgbHJ1X2dlbmAgb3IsIG1vcmUgYnJvYWRseSwgdGhlIFZNIHNjYW4gaXRzZWxmLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBjb25uZWN0aW9uLCBhbmQgSSBuZWVkIHRvIG1hcCBpdC4gVGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24uIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBpdCBhbmQgbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBvciBiZSBjYWxsZWQgYnkgdGhpcyBzdGF0aWMgaGFuZGxlci4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZSByZWxhdGlvbnNoaXAgaXMgbGlrZWx5IHRoZXJlIGFuZCBJIHdpbGwgZmluZCB0aGUgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIFthLXpBLVowLTlfXSYjNDM7fF51bnNpZ25lZCBsb25nIFthLXpBLVowLTlfXSYjNDM7fF5pbnQgW2EtekEtWjAtOV9dJiM0Mzt8XmJvb2wgW2EtekEtWjAtOV9dJiM0MzsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMTI9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyMC0gKi9cbm1tL3Ztc2Nhbi5jOjIyMTppbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjIyLVxuLS1cbm1tL3Ztc2Nhbi5jPTM2NT1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtMzk0LSAqL1xubW0vdm1zY2FuLmM6Mzk1OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbm1tL3Ztc2Nhbi5jLTM5Ni17XG4tLVxubW0vdm1zY2FuLmMtNDEzLSAqL1xubW0vdm1zY2FuLmM6NDE0OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbm1tL3Ztc2Nhbi5jLTQxNS17XG4tLVxubW0vdm1zY2FuLmM9NDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRyb3Bfc2xhYl9ub2RlKGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDQxLVxubW0vdm1zY2FuLmM6NDQyOnZvaWQgZHJvcF9zbGFiKHZvaWQpXG5tbS92bXNjYW4uYy00NDMte1xuLS1cbm1tL3Ztc2Nhbi5jPTUwMz1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy01MzAtXG5tbS92bXNjYW4uYzo1MzE6dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcbm1tL3Ztc2Nhbi5jLTUzMi17XG4tLVxubW0vdm1zY2FuLmMtNjA0LSAqL1xubW0vdm1zY2FuLmM6NjA1OnZvaWQgX19hY2N0X3JlY2xhaW1fd3JpdGViYWNrKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYy02MDYtXHRcdFx0XHRcdFx0XHRpbnQgbnJfdGhyb3R0bGVkKVxuLS1cbm1tL3Ztc2Nhbi5jPTgxOD1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3Ztc2Nhbi5jLTg0MC0gKi9cbm1tL3Ztc2Nhbi5jOjg0MTp2b2lkIGZvbGlvX3B1dGJhY2tfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS92bXNjYW4uYy04NDIte1xuLS1cbm1tL3Ztc2Nhbi5jPTE2OTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0xODE1LSAqL1xubW0vdm1zY2FuLmM6MTgxNjpib29sIGZvbGlvX2lzb2xhdGVfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS92bXNjYW4uYy0xODE3LXtcbi0tXG5tbS92bXNjYW4uYz0yMTc0PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE5OC1cbm1tL3Ztc2Nhbi5jOjIxOTk6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG5tbS92bXNjYW4uYy0yMjAwLXtcbi0tXG5tbS92bXNjYW4uYz0yOTQzPXN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NjEtXG5tbS92bXNjYW4uYzoyOTYyOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTYzLXtcbi0tXG5tbS92bXNjYW4uYy0yOTg4LVxubW0vdm1zY2FuLmM6Mjk4OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk5MC17XG4tLVxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMzAzMC17XG4tLVxubW0vdm1zY2FuLmM9NDI4NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQzMzEtICovXG5tbS92bXNjYW4uYzo0MzMyOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQzMzMte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ0NTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDUwNS1cbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTA3LXtcbi0tXG5tbS92bXNjYW4uYy00NTMwLVxubW0vdm1zY2FuLmM6NDUzMTp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTMyLXtcbi0tXG5tbS92bXNjYW4uYy00NTQxLVxubW0vdm1zY2FuLmM6NDU0Mjp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NTQzLXtcbi0tXG5tbS92bXNjYW4uYy00NTY3LVxubW0vdm1zY2FuLmM6NDU2ODp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1Njkte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NzYtXG5tbS92bXNjYW4uYzo0NTc3OmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTc4LXtcbi0tXG5tbS92bXNjYW4uYz00NTkwPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MjMtICovXG5tbS92bXNjYW4uYzo0NjI0OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyNS17XG4tLVxubW0vdm1zY2FuLmM9NDY2NT1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2OTUtXG5tbS92bXNjYW4uYzo0Njk2OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5tbS92bXNjYW4uYy00Njk3LXtcbi0tXG5tbS92bXNjYW4uYz01OTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcbi0tXG5tbS92bXNjYW4uYy01OTM0LVxubW0vdm1zY2FuLmM6NTkzNTp2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxubW0vdm1zY2FuLmMtNTkzNi17XG4tLVxubW0vdm1zY2FuLmMtNTk0Ni1cbm1tL3Ztc2Nhbi5jOjU5NDc6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTU5NDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NjgtXG5tbS92bXNjYW4uYzo1OTY5OnZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTU5NzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NzktXG5tbS92bXNjYW4uYzo1OTgwOnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTU5ODEte1xuLS1cbm1tL3Ztc2Nhbi5jPTY3NjU9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjg0NC1cbm1tL3Ztc2Nhbi5jOjY4NDU6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02ODQ2LVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTAtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg5MTp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg5Mi1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjkzMC1cbm1tL3Ztc2Nhbi5jOjY5MzE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY5MzItXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjk3MS0jZWxzZVxubW0vdm1zY2FuLmM6Njk3Mjp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjk3My1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03NTY4PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4tLVxubW0vdm1zY2FuLmMtNzY0OC0gKi9cbm1tL3Ztc2Nhbi5jOjc2NDk6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc2NTAtXHRcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NjkzLVxubW0vdm1zY2FuLmM6NzY5NDp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxubW0vdm1zY2FuLmMtNzY5NS17XG4tLVxubW0vdm1zY2FuLmMtNzcwNi0gKi9cbm1tL3Ztc2Nhbi5jOjc3MDc6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NzA4LVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzcxNC1cbm1tL3Ztc2Nhbi5jOjc3MTU6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxubW0vdm1zY2FuLmMtNzcxNi17XG4tLVxubW0vdm1zY2FuLmMtNzcyOC0gKi9cbm1tL3Ztc2Nhbi5jOjc3Mjk6dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG5tbS92bXNjYW4uYy03NzMwLXtcbi0tXG5tbS92bXNjYW4uYy03NzYxLSAqL1xubW0vdm1zY2FuLmM6Nzc2Mjp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXG5tbS92bXNjYW4uYy03NzYzLXtcbi0tXG5tbS92bXNjYW4uYy03Nzg1LSAqL1xubW0vdm1zY2FuLmM6Nzc4Njp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxubW0vdm1zY2FuLmMtNzc4Ny17XG4tLVxubW0vdm1zY2FuLmM9NzgzMj1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbi0tXG5tbS92bXNjYW4uYy03ODQwLSAqL1xubW0vdm1zY2FuLmM6Nzg0MTppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTc4NDItXG4tLVxubW0vdm1zY2FuLmMtNzg1My0gKi9cbm1tL3Ztc2Nhbi5jOjc4NTQ6aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xubW0vdm1zY2FuLmMtNzg1NS1cbi0tXG5tbS92bXNjYW4uYy03ODU5LSAqL1xubW0vdm1zY2FuLmM6Nzg2MDppbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbm1tL3Ztc2Nhbi5jLTc4NjEtXG4tLVxubW0vdm1zY2FuLmM9NzkwOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NTEtXG5tbS92bXNjYW4uYzo3OTUyOnVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bXNjYW4uYy03OTUzLXtcbi0tXG5tbS92bXNjYW4uYz04MDI4PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy04MDMzLVxubW0vdm1zY2FuLmM6ODAzNDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy04MDM1LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy04MTQ4LSAqL1xubW0vdm1zY2FuLmM6ODE0OTp2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxubW0vdm1zY2FuLmMtODE1MC17XG4tLVxubW0vdm1zY2FuLmM9ODE5Nz1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG5tbS92bXNjYW4uYzo4MTk4OmludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG5tbS92bXNjYW4uYy04MTk5LXtcbi0tXG5tbS92bXNjYW4uYy04MjAyLVxubW0vdm1zY2FuLmM6ODIwMzp2b2lkIHJlY2xhaW1fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxubW0vdm1zY2FuLmMtODIwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzQ1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIExSVSBHZW5lcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhbWF0aW9uOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtYXhfbHJ1X2dlbl9tZW1jZ2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2dgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gU2VlbXMgbGlrZSBhIHdob2xlIGVjb3N5c3RlbSBvZiByZWNsYW1hdGlvbiBzdHJhdGVnaWVzIGlzIGF0IHBsYXkgaGVyZSwgY2VudGVyZWQgYXJvdW5kIHRoaXMgTFJVIGdlbmVyYXRpb24gY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGJlaGluZCB0aGlzLiBEaWdnaW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBJIHNlZSB0aGUgY29yZSBgY29uZmlnIExSVV9HRU5gIGRlZmluZWQsIGFsb25nIHdpdGggYGNvbmZpZyBMUlVfR0VOX0VOQUJMRURgIHdoaWNoIGltcGxpZXMgdGhpcyBpcyBsaWtlbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBgY29uZmlnIExSVV9HRU5fU1RBVFNgIGlzIGludGVyZXN0aW5nLCBmdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmcuLi4gdGhhdCYjMzk7cyBhbHdheXMgaGVscGZ1bC4gQW5kIGZpbmFsbHksIGBjb25maWcgTFJVX0dFTl9XQUxLU19NTVVgIGlzIGEgcG9pbnQgb2YgY29uY2VybiAtIHRoZSBNTVUgaW50ZXJhY3Rpb24gY2FuIGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGxvb2tpbmcgYXQgdGhlIGFyY2hpdGVjdHVyZS4KCkZpbmFsbHksIEkmIzM5O20ganVzdCBjdXJpb3VzIC0gaXMgYEFSQ0hfSEFTX1BSRUZFVENIV2AgZXZlbiBhIGNvbmZpZz8gSSBzaG91bGQgZ3JlcCB0aGUgS2NvbmZpZyB0byBiZSBzdXJlLCBpbiBjYXNlIHRoaXMgaW1wYWN0cyB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX0hBU19QUkVGRVRDSFcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zNT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00NC0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjQ1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQ2LVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTExMT1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqcHRyKVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTExOC0jaWYgX19MSU5VWF9BUk1fQVJDSF9fIFx1MDAzZT0gNyBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU01QKVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTE5OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0xMjAtc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICpwdHIpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKnB0cilcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQwMC1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NDAxOiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQwMi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKnB0cilcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xOTk9dW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIxNS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIxNjojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMjE3LSNkZWZpbmUgcHJlZmV0Y2h3KHgpIF9fYnVpbHRpbl9wcmVmZXRjaCgoeCksIDEsIDEpXG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTM2MT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM4OC1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozODk6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zOTAtI2RlZmluZSBwcmVmZXRjaHcoeCkgX19idWlsdGluX3ByZWZldGNoKCh4KSwgMSwgMSlcbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oPTIzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICphZGRyKVxuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3ByZWZldGNoLmgtMzQtI2lmZGVmIENPTkZJR19QQTIwXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oOjM1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oLTM2LXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9Mzk0PWludCB2YWxpZGF0ZV9zcF9zaXplKHVuc2lnbmVkIGxvbmcgc3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNDAwLSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDo0MDE6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00MDItXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xNjk9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0xNzMtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjE3NDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0xNzUtc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICp4KVxuLS1cbmFyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmg9MTgxPWV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaC0xODktI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaDoxOTA6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcbmFyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgtMTkxLVxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0Lmg9MTc5PXVuc2lnbmVkIGxvbmcgX19nZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oLTE4OS0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oOjE5MDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaC0xOTEtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9NjI0PWV4dGVybiBjaGFyXHRcdFx0aWdub3JlX2ZwdV9pcnE7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNjI2LSNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NjI3OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC02MjgtXG4tLVxuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oPTE4PXN0cnVjdCBwYWdlO1xuLS1cbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaC00MS1cbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaDo0MjojaWZuZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oLTQzLSNkZWZpbmUgcHJlZmV0Y2h3KHgpIF9fYnVpbHRpbl9wcmVmZXRjaCh4LDEpXG4tLVxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtMTgzLVxubW0vdm1zY2FuLmM6MTg0OiNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbm1tL3Ztc2Nhbi5jLTE4NS1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzU5CgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDU2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTUdMUlUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBkZWZpbml0aW9uIG9mIGBBUkNIX0hBU19QUkVGRVRDSFdgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHByZWZldGNoaW5nIG9wdGltaXphdGlvbnMsIGFuZCB3aGVyZSB0aGF0IGxpdmVzIChpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhlYWRlcnMpLiBJJiMzOTttIGFsc28gY29uZmlybWluZyB0aGF0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgb2YgY291cnNlLCBhbmQgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBgTUVNQ0dgIHBsYXlzIGEgcm9sZSBpbiBtZW1jZyBMUlUgZ2VuIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTFJVX0dFTmA7IGl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBNTVUsIGFuZCBpdCYjMzk7cyBjb250aW5nZW50IG9uIGJpdCBhdmFpbGFiaWxpdHkgd2l0aGluIGBmb2xpby0mZ3Q7ZmxhZ3NgIGFuZCB0aGVuIGVpdGhlciBgNjRCSVRgIG9yIHRoZSBTUEFSU0VNRU0gY29uZmlndXJhdGlvbi4gVGhlIHByZXNlbmNlIG9mIGBMUlVfR0VOX0VOQUJMRURgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgZGVwZW5kaW5nIG9ubHkgb24gYExSVV9HRU5gLgoKTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb2RlIGNoYW5nZXMgdGhlbXNlbHZlcy4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBtb2RpZmljYXRpb25zLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIHNlZWluZyBhcmUgdGhpbmdzIGxpa2UgYGluY19taW5fc2VxYCwgYF9fZm9saW9faW5jX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYGZsdXNoX2xydV9iYXRjaGAsIGBwcmVmZXRjaHdfcHJldl9scnVfZm9saW9gLCBhbmQgYHByZWZldGNod19uZXh0X2xydV9mb2xpb2AuIEkgc2VlIHRoYXQgdGhlIGNvcmUgTFJVIGdlbiBmdW5jdGlvbnMgbGlrZSBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgZmx1c2hfbHJ1X2JhdGNoYCwgYW5kIGBpbmNfbWluX3NlcWAgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGBtbS92bXNjYW4uY2AuIFNvIEkgd2lsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0LCBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0byBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC4gSSBzZWUgdGhlIGZ1bmN0aW9ucyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBtYXhfbHJ1X2dlbl9tZW1jZ2AsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24uCgpUbyB3cmFwIHRoaXMgdXAsIEkgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O20gZ29pbmcgdG8gdGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAgYmVjYXVzZSBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIE1HTFJVIGZvbGlvIG1hbmFnZW1lbnQgYW5kIExSVSBsaXN0IG1hbmlwdWxhdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgcmVmYWN0b3JpbmcgYGluY19taW5fc2VxYCB0byBiYXRjaCBMUlUgbGlzdCBtYW5pcHVsYXRpb25zLCB3aGljaCBjYW4gaGF2ZSBpbnRlcmVzdGluZyBlZmZlY3RzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBgWyYjMzQ7TFJVX0dFTiYjMzQ7LCAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7XWAuIEZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgWyYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LCAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0O11gLiBXaXRoIGFsbCBvZiB0aGlzIGluIGhhbmQsIEkgY2FuIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttYXhfbHJ1X2dlbl9tZW1jZyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGFnaW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMuIFNwZWNpZmljYWxseSwgaW5jX21pbl9zZXEgYW5kIGZvbGlvX2luY19nZW4gYXJlIHVwZGF0ZWQgdG8gYmF0Y2ggbGlzdCBzcGxpY2luZyAodmlhIGZsdXNoX2xydV9iYXRjaCkgYW5kIGdlbmVyYXRpb24gYWNjb3VudGluZywgY2hhbmdpbmcgaG93IGZvbGlvcyBhcmUgbW92ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIExSVSBhZ2luZyBhbmQgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21heF9scnVfZ2VuX21lbWNnJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludm9sdmUgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcyAoc3RydWN0IGZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkLCBhbmQgZ2VuZXJhdGlvbiBjb3VudGVycy9mbGFncykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgZ2VuX2luY3JlYXNlZCwgZGVsdGEsIGJhdGNoX2VuZCwgYW5kIHRoZSBtb3ZhYmxlIGxpc3QgaGVhZCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzeXNjYWxsL2lvY3RsL3NvY2tldCBib3VuZGFyaWVzLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxpbmtlZCBsaXN0IGNvcnJ1cHRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFjY291bnRpbmcgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgQ09ORklHX0RFQlVHX0xJU1QsIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNjI4YTEwYjk4ZjVmODRmYjI0MTFlZjM2ZWJiOWJjZGRmYmM3ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDExOjA5OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi43OWRlZmJiNDRjNmU0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTgyLDE3ICYjNDM7MTgyLDM3IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wgewogfTsKIAogI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIVwotI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICgoX2ZvbGlvKS0mZ3Q7bHJ1LnByZXYgIT0gX2Jhc2UpIHsJCQlcCi0JCQlzdHJ1Y3QgZm9saW8gKnByZXY7CQkJCVwKLQkJCQkJCQkJCVwKLQkJCXByZXYgPSBscnVfdG9fZm9saW8oJmFtcDsoX2ZvbGlvLSZndDtscnUpKTsJCVwKLQkJCXByZWZldGNodygmYW1wO3ByZXYtJmd0O19maWVsZCk7CQkJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCiYjNDM7ewomIzQzOwlpZiAoZm9saW8tJmd0O2xydS5wcmV2ICE9IGJhc2UpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqcHJldjsKJiM0MzsKJiM0MzsJCXByZXYgPSBscnVfdG9fZm9saW8oJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKJiM0MzsJCXByZWZldGNodygmYW1wO3ByZXYtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQomIzQzO3sKJiM0MzsJaWYgKGZvbGlvLSZndDtscnUubmV4dCAhPSBiYXNlKSB7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKm5leHQ7CiYjNDM7CiYjNDM7CQluZXh0ID0gbGlzdF9lbnRyeShmb2xpby0mZ3Q7bHJ1Lm5leHQsIHN0cnVjdCBmb2xpbywgbHJ1KTsKJiM0MzsJCXByZWZldGNodygmYW1wO25leHQtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzO30KICNlbHNlCi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19uZXh0X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqYmFzZSkKJiM0Mzt7CiYjNDM7fQogI2VuZGlmCiAKIC8qCkBAIC0xNjk1LDcgJiM0MzsxNzE1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCQlmb2xpbyA9IGxydV90b19mb2xpbyhzcmMpOwotCQlwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpOwomIzQzOwkJcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKGZvbGlvLCBzcmMpOwogCiAJCW5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCQl0b3RhbF9zY2FuICYjNDM7PSBucl9wYWdlczsKQEAgLTMyOTUsMjEgJiM0MzszMzE1LDIxIEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogfQogCi0vKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwotc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwotCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwotCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlpbnQgbmV3X2dlbjsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiAKIAlkbyB7CiAJCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCi0JCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pCiYjNDM7CQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiYjNDM7CQkJaWYgKGluY3JlYXNlZCkKJiM0MzsJCQkJKmluY3JlYXNlZCA9IGZhbHNlOwogCQkJcmV0dXJuIG5ld19nZW47CiYjNDM7CQl9CiAKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKQEAgLTMzMTcsOCAmIzQzOzMzMzcsMjIgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKIAl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJaWYgKGluY3JlYXNlZCkKJiM0MzsJCSppbmNyZWFzZWQgPSB0cnVlOwomIzQzOwlyZXR1cm4gbmV3X2dlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi8KJiM0MztzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiYjNDM7CXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJYm9vbCBnZW5faW5jcmVhc2VkOwogCiYjNDM7CW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CWlmIChnZW5faW5jcmVhc2VkKQomIzQzOwkJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAlyZXR1cm4gbmV3X2dlbjsKIH0KIApAQCAtMzg5Nyw2ICYjNDM7MzkzMSwxOSBAQCBzdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpCiAJCWtmcmVlKHdhbGspOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLAomIzQzOwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpCiYjNDM7ewomIzQzOwlMSVNUX0hFQUQobW92YWJsZSk7CiYjNDM7CiYjNDM7CWlmICghKmJhdGNoX2VuZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGlzdF9jdXRfcG9zaXRpb24oJmFtcDttb3ZhYmxlLCBoZWFkLCAqYmF0Y2hfZW5kKTsKJiM0MzsJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZhbXA7bW92YWJsZSwgZHN0KTsKJiM0MzsJKmJhdGNoX2VuZCA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiB7CiAJaW50IHpvbmU7CkBAIC0zOTA0LDYgJiM0MzszOTUxLDcgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiAJaW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwlpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKIAkvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqLwogCWlmICh0eXBlICZhbXA7JmFtcDsgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpKQpAQCAtMzkxMywzNSAmIzQzOzM5NjEsNjMgQEAgc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpCiAJaWYgKCF0eXBlICZhbXA7JmFtcDsgIXN3YXBwaW5lc3MpCiAJCWdvdG8gZG9uZTsKIAomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIG9sZF9nZW4pICE9CiYjNDM7CQkJbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCB0YXJnZXRfZ2VuKSk7CiAJLyogcHJldmVudCBjb2xkL2hvdCBpbnZlcnNpb24gaWYgdGhlIHR5cGUgaXMgZXZpY3RhYmxlICovCiAJZm9yICh6b25lID0gMDsgem9uZSAmbHQ7IE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXTsKIAkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3Nbb2xkX2dlbl1bdHlwZV1bem9uZV07CiYjNDM7CQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBoZWFkLSZndDtuZXh0OwomIzQzOwkJc3RydWN0IGxpc3RfaGVhZCAqYmF0Y2hfZW5kID0gTlVMTDsKJiM0MzsJCWxvbmcgZGVsdGEgPSAwOwogCi0JCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCXdoaWxlIChwb3MgIT0gaGVhZCkgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJCWxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCQlpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTsKIAkJCWJvb2wgd29ya2luZ3NldCA9IGZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJYm9vbCBnZW5faW5jcmVhc2VkOwogCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTsKIAotCQkJbmV3X2dlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbyk7Ci0JCQlsaXN0X21vdmVfdGFpbCgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pOwomIzQzOwkJCXByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCk7CiYjNDM7CQkJcG9zID0gcG9zLSZndDtuZXh0OwomIzQzOwkJCW5ld19nZW4gPSBfX2ZvbGlvX2luY19nZW4oZm9saW8sIG9sZF9nZW4sICZhbXA7Z2VuX2luY3JlYXNlZCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBJZiBnZW5faW5jcmVhc2VkIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHJvbW90aW9uLiBQdXQgZm9saW9zCiYjNDM7CQkJICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdAomIzQzOwkJCSAqIHRoZSB0YWlsIG9mIHRoZSBzZWNvbmQtb2xkZXN0IGdlbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoZ2VuX2luY3JlYXNlZCkgewomIzQzOwkJCQlkZWx0YSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CQkJCWJhdGNoX2VuZCA9ICZhbXA7Zm9saW8tJmd0O2xydTsKIAotCQkJLyogZG9uJiMzOTt0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqLwotCQkJaWYgKHJlZnMgJiM0Mzsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICYjNDM7IDEpIHsKLQkJCQlpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTsKLQkJCQlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CQkJCS8qIGRvbiYjMzk7dCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi8KJiM0MzsJCQkJaWYgKHJlZnMgJiM0Mzsgd29ya2luZ3NldCAhPSBCSVQoTFJVX1JFRlNfV0lEVEgpICYjNDM7IDEpIHsKJiM0MzsJCQkJCWludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpOwogCi0JCQkJV1JJVEVfT05DRShscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSwKLQkJCQkJICAgbHJ1Z2VuLSZndDtwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gJiM0MzsgZGVsdGEpOwomIzQzOwkJCQkJV1JJVEVfT05DRShscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSwKJiM0MzsJCQkJCQkgICBscnVnZW4tJmd0O3Byb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSAmIzQzOyBucl9wYWdlcyk7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlmbHVzaF9scnVfYmF0Y2goaGVhZCwgJmFtcDtiYXRjaF9lbmQsIHRhcmdldF9saXN0KTsKJiM0MzsJCQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7CiAJCQl9Ci0KIAkJCWlmICghLS1yZW1haW5pbmcpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlicmVhazsKIAkJfQomIzQzOwkJZmx1c2hfbHJ1X2JhdGNoKGhlYWQsICZhbXA7YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sCiYjNDM7CQkJICAgbHJ1Z2VuLSZndDtucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTsKJiM0MzsJCVdSSVRFX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSwKJiM0MzsJCQkgICBscnVnZW4tJmd0O25yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICYjNDM7IGRlbHRhKTsKJiM0MzsJCWlmICghcmVtYWluaW5nKQomIzQzOwkJCXJldHVybiBmYWxzZTsKIAl9CiBkb25lOgogCXJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODA2CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDEyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBtbS92bXNjYW4uYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRvIGBtbS92bXNjYW4uY2AgYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBmaXJlIHVwIHRoZSBLTVNBTiBmdXp6aW5nIGVuZ2luZSBvciBpZiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAgd2lsbCBkbyB0aGUgdHJpY2suCgpGaXJzdCwgSSYjMzk7bSBzZWVpbmcgYSByZWZhY3RvcmluZyB3aXRoIGNoYW5nZXMgYXJvdW5kIHByZWZldGNoaW5nIGFuZCB0aGUgTFJVIGxpc3QgbWFuaXB1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGlubGluaW5nIGBwcmVmZXRjaHdgIGhlbHBlcnMsIHVwZGF0aW5nIGNhbGxzIGluIGBpc29sYXRlX2xydV9mb2xpb3NgLCBzcGxpdHRpbmcgYGZvbGlvX2luY19nZW5gLCBhbmQgYmF0Y2hpbmcgZm9saW8gbW92ZXMgd2l0aCBgZmx1c2hfbHJ1X2JhdGNoYCBpbiB0aGUgbXVsdGktZ2VuIExSVSAoTUdMUlUpIGNvZGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbGlzdCBtYW5pcHVsYXRpb24gKGBzdHJ1Y3QgbGlzdF9oZWFkYCwgYGZvbGlvLSZndDtscnVgKSwgZm9saW8gZmxhZ3MvZ2VuZXJhdGlvbiB0cmFja2luZyAoYGZvbGlvLSZndDtmbGFncy5mYCwgYGNtcHhjaGdgKSwgZm9saW8gYWNjb3VudGluZyAoYGxydWdlbi0mZ3Q7bnJfcGFnZXNgLCBgbHJ1Z2VuLSZndDtwcm90ZWN0ZWRgKSwgYW5kIG1lbW9yeSBwcmVmZXRjaGluZyAoYHByZWZldGNod2ApLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm8gbGVha3M/IExldCYjMzk7cyBjaGVjayBhZ2FpbnN0IG91ciBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKlVzZXItc3BhY2UgaW50ZXJhY3Rpb24/KiogTm8sIG5vdGhpbmcgaGVyZSBpcyB0b3VjaGluZyB1c2VyIHNwYWNlIHZpYSBjb3B5IG9wZXJhdGlvbnMsIHB1dCBvcGVyYXRpb25zLCBuZXRsaW5rLCBpb2N0bHMsIG9yIGFueXRoaW5nIHNpbWlsYXIuIE5vIHdvcnJpZXMgdGhlcmUuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBXZSBoYXZlIGEgYGJvb2wgZ2VuX2luY3JlYXNlZGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byBgX19mb2xpb19pbmNfZ2VuYCwgYnV0IGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZC4gYGJhdGNoX2VuZGAsIGBwb3NgLCBhbmQgYGRlbHRhYCBhcmUgYWxsIGluaXRpYWxpemVkIGFzIHdlbGwuIFNvLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IGhlcmUgZWl0aGVyLgozLiAgKipEYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbj8qKiBObyBuZXcgYWxsb2NhdGlvbnMsIHNvIHRoYXQmIzM5O3MgYSBub24taXNzdWUuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm8gY29uY2VybnMgd2l0aCB0aGF0IGhlcmUuCgpTbywgZnJvbSBteSBhc3Nlc3NtZW50LCB0aGVyZSBhcmVuJiMzOTt0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIG9yIGluZm8gbGVha3MgdGhhdCBuZWNlc3NpdGF0ZSBLTVNBTi4KCldoYXQgYWJvdXQgb3RoZXIgYnVncyB0aGF0IG1pZ2h0IGNyZWVwIGluPyBMaXN0IGNvcnJ1cHRpb24sIHBhZ2UgZmxhZyBjb3JydXB0aW9uLCByYWNlIGNvbmRpdGlvbnMsIGFjY291bnRpbmcgaW1iYWxhbmNlcywgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBhcmUgYWxsIHBvdGVudGlhbC4gSG93ZXZlciwgS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBsaWtlIENPTkZJR1xfREVCVUdcX0xJU1QgYW5kIFZNXF9XQVJOXF9PTlxfT05DRSwgYXJlIHdlbGwtc3VpdGVkIHRvIGNhdGNoIHRoZXNlIGlzc3Vlcy4gV2UgY2FuIGFsc28gdXNlIGRhdGEtcmFjZSBkZXRlY3RvcnMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gYGxpc3RfY3V0X3Bvc2l0aW9uYCBhbmQgYGZsdXNoX2xydV9iYXRjaGAsIGFzIHRoZXkgaW52b2x2ZSBsaXN0IG1hbmlwdWxhdGlvbi4gQWZ0ZXIgYSBicmllZiByZXZpZXcsIGl0IGlzIGNsZWFyIHRoYXQgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuCgpTbywgSSB0aGluayB3ZSYjMzk7cmUgZ29vZCB0byBwcm9jZWVkIHdpdGggc3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4uIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBpbnZva2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYW1hdGlvbiBtZWNoYW5pc20gaW4gbW0vdm1zY2FuLmMuIEl0IG9wdGltaXplcyB0aGUgZ2VuZXJhdGlvbiBpbmNyZW1lbnQgcGF0aCBhbmQgYmF0Y2gtbW92ZXMgZm9saW9zIGJldHdlZW4gTFJVIGdlbmVyYXRpb24gbGlzdHMgdXNpbmcgbGlzdF9jdXRfcG9zaXRpb24vbGlzdF9zcGxpY2VfdGFpbF9pbml0LCByZWZhY3RvcnMgZm9saW9faW5jX2dlbiAvIF9fZm9saW9faW5jX2dlbiwgYW5kIHVwZGF0ZXMgcHJlZmV0Y2ggaGVscGVycy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgKHN0cnVjdCBmb2xpbywgc3RydWN0IGxpc3RfaGVhZCwgYW5kIGdlbmVyYXRpb24gY291bnRlcnMvZmxhZ3MpLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGdlbl9pbmNyZWFzZWQsIGRlbHRhLCBiYXRjaF9lbmQsIGFuZCB0aGUgbW92YWJsZSBsaXN0IGhlYWQpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3lzY2FsbC9pb2N0bC9zb2NrZXQgYm91bmRhcmllcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsaW5rZWQgbGlzdCBjb3JydXB0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBhY2NvdW50aW5nIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIENPTkZJR19ERUJVR19MSVNULCBhbmQga2VybmVsIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludm9sdmUgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcyAoc3RydWN0IGZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkLCBhbmQgZ2VuZXJhdGlvbiBjb3VudGVycy9mbGFncykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgZ2VuX2luY3JlYXNlZCwgZGVsdGEsIGJhdGNoX2VuZCwgYW5kIHRoZSBtb3ZhYmxlIGxpc3QgaGVhZCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBzeXNjYWxsL2lvY3RsL3NvY2tldCBib3VuZGFyaWVzLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxpbmtlZCBsaXN0IGNvcnJ1cHRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFjY291bnRpbmcgZXJyb3JzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgQ09ORklHX0RFQlVHX0xJU1QsIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjMxLjk5NTY3OTMyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzc2MDQ5NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFtYXRpb24gbWVjaGFuaXNtIGluIG1tL3Ztc2Nhbi5jLiBJdCBvcHRpbWl6ZXMgdGhlIGdlbmVyYXRpb24gaW5jcmVtZW50IHBhdGggYW5kIGJhdGNoLW1vdmVzIGZvbGlvcyBiZXR3ZWVuIExSVSBnZW5lcmF0aW9uIGxpc3RzIHVzaW5nIGxpc3RfY3V0X3Bvc2l0aW9uL2xpc3Rfc3BsaWNlX3RhaWxfaW5pdCwgcmVmYWN0b3JzIGZvbGlvX2luY19nZW4gLyBfX2ZvbGlvX2luY19nZW4sIGFuZCB1cGRhdGVzIHByZWZldGNoIGhlbHBlcnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgKHN0cnVjdCBmb2xpbywgc3RydWN0IGxpc3RfaGVhZCwgYW5kIGdlbmVyYXRpb24gY291bnRlcnMvZmxhZ3MpLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGdlbl9pbmNyZWFzZWQsIGRlbHRhLCBiYXRjaF9lbmQsIGFuZCB0aGUgbW92YWJsZSBsaXN0IGhlYWQpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3lzY2FsbC9pb2N0bC9zb2NrZXQgYm91bmRhcmllcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsaW5rZWQgbGlzdCBjb3JydXB0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBhY2NvdW50aW5nIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIENPTkZJR19ERUJVR19MSVNULCBhbmQga2VybmVsIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGFnaW5nIGFuZCBsaXN0IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMuIFNwZWNpZmljYWxseSwgaW5jX21pbl9zZXEgYW5kIGZvbGlvX2luY19nZW4gYXJlIHVwZGF0ZWQgdG8gYmF0Y2ggbGlzdCBzcGxpY2luZyAodmlhIGZsdXNoX2xydV9iYXRjaCkgYW5kIGdlbmVyYXRpb24gYWNjb3VudGluZywgY2hhbmdpbmcgaG93IGZvbGlvcyBhcmUgbW92ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIExSVSBhZ2luZyBhbmQgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MDk6MzEuOTk1Njg1Mjg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIwMzQzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZDYyOGExMGI5OGY1Zjg0ZmIyNDExZWYzNmViYjliY2RkZmJjN2RlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTE6MDk6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xODIsMTcgKzE4MiwzNyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gfTtcXG4gXFxuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVxcdFxcdFxcdFxcXFxcXG4tXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0aWYgKChfZm9saW8pLVxcdTAwM2VscnUucHJldiAhPSBfYmFzZSkge1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpwcmV2O1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRwcmV2ID0gbHJ1X3RvX2ZvbGlvKFxcdTAwMjYoX2ZvbGlvLVxcdTAwM2VscnUpKTtcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdHByZWZldGNodyhcXHUwMDI2cHJldi1cXHUwMDNlX2ZpZWxkKTtcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdH0gd2hpbGUgKDApXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcXG4re1xcbitcXHRpZiAoZm9saW8tXFx1MDAzZWxydS5wcmV2ICE9IGJhc2UpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpwcmV2O1xcbitcXG4rXFx0XFx0cHJldiA9IGxydV90b19mb2xpbyhcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuK1xcdFxcdHByZWZldGNodyhcXHUwMDI2cHJldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcXG4re1xcbitcXHRpZiAoZm9saW8tXFx1MDAzZWxydS5uZXh0ICE9IGJhc2UpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpuZXh0O1xcbitcXG4rXFx0XFx0bmV4dCA9IGxpc3RfZW50cnkoZm9saW8tXFx1MDAzZWxydS5uZXh0LCBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdHByZWZldGNodyhcXHUwMDI2bmV4dC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4gI2Vsc2VcXG4tI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuK3tcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIC8qXFxuQEAgLTE2OTUsNyArMTcxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcbiBcXHRcXHRmb2xpbyA9IGxydV90b19mb2xpbyhzcmMpO1xcbi1cXHRcXHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpO1xcbitcXHRcXHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYyk7XFxuIFxcbiBcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0XFx0dG90YWxfc2NhbiArPSBucl9wYWdlcztcXG5AQCAtMzI5NSwyMSArMzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxcbiBcXHRyZXR1cm4gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4gfVxcbiBcXG4tLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcXG4ge1xcbi1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4tXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4tXFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbitcXHRpbnQgbmV3X2dlbjtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4rXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcXG4rXFx0XFx0XFx0aWYgKGluY3JlYXNlZClcXG4rXFx0XFx0XFx0XFx0KmluY3JlYXNlZCA9IGZhbHNlO1xcbiBcXHRcXHRcXHRyZXR1cm4gbmV3X2dlbjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4gXFxuQEAgLTMzMTcsOCArMzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0aWYgKGluY3JlYXNlZClcXG4rXFx0XFx0KmluY3JlYXNlZCA9IHRydWU7XFxuK1xcdHJldHVybiBuZXdfZ2VuO1xcbit9XFxuK1xcbisvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbitcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4rXFx0Ym9vbCBnZW5faW5jcmVhc2VkO1xcbiBcXG4rXFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXFx1MDAyNmdlbl9pbmNyZWFzZWQpO1xcbitcXHRpZiAoZ2VuX2luY3JlYXNlZClcXG4rXFx0XFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4gXFx0cmV0dXJuIG5ld19nZW47XFxuIH1cXG4gXFxuQEAgLTM4OTcsNiArMzkzMSwxOSBAQCBzdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXFxuIFxcdFxcdGtmcmVlKHdhbGspO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmRzdClcXG4re1xcbitcXHRMSVNUX0hFQUQobW92YWJsZSk7XFxuK1xcbitcXHRpZiAoISpiYXRjaF9lbmQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZtb3ZhYmxlLCBoZWFkLCAqYmF0Y2hfZW5kKTtcXG4rXFx0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFxcdTAwMjZtb3ZhYmxlLCBkc3QpO1xcbitcXHQqYmF0Y2hfZW5kID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxuIHtcXG4gXFx0aW50IHpvbmU7XFxuQEAgLTM5MDQsNiArMzk1MSw3IEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuIFxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbitcXHRpbnQgdGFyZ2V0X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4gXFxuIFxcdC8qIEZvciBmaWxlIHR5cGUsIHNraXAgdGhlIGNoZWNrIGlmIHN3YXBwaW5lc3MgaXMgYW5vbiBvbmx5ICovXFxuIFxcdGlmICh0eXBlIFxcdTAwMjZcXHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcXG5AQCAtMzkxMywzNSArMzk2MSw2MyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0aWYgKCF0eXBlIFxcdTAwMjZcXHUwMDI2ICFzd2FwcGluZXNzKVxcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRShscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIG9sZF9nZW4pICE9XFxuK1xcdFxcdFxcdGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgdGFyZ2V0X2dlbikpO1xcbiBcXHQvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi9cXG4gXFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnRhcmdldF9saXN0ID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW29sZF9nZW5dW3R5cGVdW3pvbmVdO1xcbitcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBoZWFkLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xcbitcXHRcXHRsb25nIGRlbHRhID0gMDtcXG4gXFxuLVxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xcbitcXHRcXHR3aGlsZSAocG9zICE9IGhlYWQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcdFxcdFxcdGludCByZWZzID0gZm9saW9fbHJ1X3JlZnMoZm9saW8pO1xcbiBcXHRcXHRcXHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRcXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuIFxcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSwgZm9saW8pO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdG5ld19nZW4gPSBmb2xpb19pbmNfZ2VuKGxydXZlYywgZm9saW8pO1xcbi1cXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTtcXG4rXFx0XFx0XFx0cHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKGZvbGlvLCBoZWFkKTtcXG4rXFx0XFx0XFx0cG9zID0gcG9zLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRcXHRuZXdfZ2VuID0gX19mb2xpb19pbmNfZ2VuKGZvbGlvLCBvbGRfZ2VuLCBcXHUwMDI2Z2VuX2luY3JlYXNlZCk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIElmIGdlbl9pbmNyZWFzZWQgaXMgZmFsc2UsIHRoaXMgaXMgYSBwcm9tb3Rpb24uIFB1dCBmb2xpb3NcXG4rXFx0XFx0XFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxcbitcXHRcXHRcXHQgKiB0aGUgdGFpbCBvZiB0aGUgc2Vjb25kLW9sZGVzdCBnZW4uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoZ2VuX2luY3JlYXNlZCkge1xcbitcXHRcXHRcXHRcXHRkZWx0YSArPSBucl9wYWdlcztcXG4rXFx0XFx0XFx0XFx0YmF0Y2hfZW5kID0gXFx1MDAyNmZvbGlvLVxcdTAwM2VscnU7XFxuIFxcbi1cXHRcXHRcXHQvKiBkb24ndCBjb3VudCB0aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi9cXG4tXFx0XFx0XFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XFxuLVxcdFxcdFxcdFxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbi1cXHRcXHRcXHRcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdFxcdFxcdFxcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocmVmcyArIHdvcmtpbmdzZXQgIT0gQklUKExSVV9SRUZTX1dJRFRIKSArIDEpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XFxuIFxcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBscnVnZW4tXFx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIGRlbHRhKTtcXG4rXFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShscnVnZW4tXFx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0gKyBucl9wYWdlcyk7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFxcdTAwMjZiYXRjaF9lbmQsIHRhcmdldF9saXN0KTtcXG4rXFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xcbiBcXHRcXHRcXHR9XFxuLVxcbiBcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGZsdXNoX2xydV9iYXRjaChoZWFkLCBcXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0sXFxuK1xcdFxcdFxcdCAgIGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbb2xkX2dlbl1bdHlwZV1bem9uZV0gLSBkZWx0YSk7XFxuK1xcdFxcdFdSSVRFX09OQ0UobHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSxcXG4rXFx0XFx0XFx0ICAgbHJ1Z2VuLVxcdTAwM2Vucl9wYWdlc1t0YXJnZXRfZ2VuXVt0eXBlXVt6b25lXSArIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyZW1haW5pbmcpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBkb25lOlxcbiBcXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMTowOTozMi40MTg0ODk4MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTAxNDgzMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZDYyOGExMGI5OGY1Zjg0ZmIyNDExZWYzNmViYjliY2RkZmJjN2RlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMTowOTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xODIsMTcgKzE4MiwzNyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiB9O1xuIFxuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpXHRcdFx0XFxcbi1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKChfZm9saW8pLVx1MDAzZWxydS5wcmV2ICE9IF9iYXNlKSB7XHRcdFx0XFxcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKnByZXY7XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjYoX2ZvbGlvLVx1MDAzZWxydSkpO1x0XHRcXFxuLVx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbi1cdFx0fVx0XHRcdFx0XHRcdFx0XFxcbi1cdH0gd2hpbGUgKDApXG4rc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuK3tcbitcdGlmIChmb2xpby1cdTAwM2VscnUucHJldiAhPSBiYXNlKSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqcHJldjtcbitcbitcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbit7XG4rXHRpZiAoZm9saW8tXHUwMDNlbHJ1Lm5leHQgIT0gYmFzZSkge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4rXG4rXHRcdG5leHQgPSBsaXN0X2VudHJ5KGZvbGlvLVx1MDAzZWxydS5uZXh0LCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdHByZWZldGNodyhcdTAwMjZuZXh0LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4gI2Vsc2Vcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMClcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTE2OTUsNyArMTcxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XG4tXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XG4rXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjKTtcbiBcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG5AQCAtMzI5NSwyMSArMzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gfVxuIFxuLS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4rXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4rXHRcdFx0aWYgKGluY3JlYXNlZClcbitcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0fVxuIFxuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCArMzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0aWYgKGluY3JlYXNlZClcbitcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4rXHRyZXR1cm4gbmV3X2dlbjtcbit9XG4rXG4rLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuK1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRpZiAoZ2VuX2luY3JlYXNlZClcbitcdFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcdHJldHVybiBuZXdfZ2VuO1xuIH1cbiBcbkBAIC0zODk3LDYgKzM5MzEsMTkgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLFxuK1x0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KVxuK3tcbitcdExJU1RfSEVBRChtb3ZhYmxlKTtcbitcbitcdGlmICghKmJhdGNoX2VuZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4rXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXHUwMDI2bW92YWJsZSwgZHN0KTtcbitcdCpiYXRjaF9lbmQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRpbnQgem9uZTtcbkBAIC0zOTA0LDYgKzM5NTEsNyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTEzLDM1ICszOTYxLDYzIEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFx0aWYgKCF0eXBlIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzcylcbiBcdFx0Z290byBkb25lO1xuIFxuK1x0Vk1fV0FSTl9PTl9PTkNFKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT1cbitcdFx0XHRscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIHRhcmdldF9nZW4pKTtcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspIHtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xuK1x0XHRsb25nIGRlbHRhID0gMDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuK1x0XHRcdHByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCk7XG4rXHRcdFx0cG9zID0gcG9zLVx1MDAzZW5leHQ7XG4rXHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBJZiBnZW5faW5jcmVhc2VkIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHJvbW90aW9uLiBQdXQgZm9saW9zXG4rXHRcdFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxuK1x0XHRcdCAqIHRoZSB0YWlsIG9mIHRoZSBzZWNvbmQtb2xkZXN0IGdlbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoZ2VuX2luY3JlYXNlZCkge1xuK1x0XHRcdFx0ZGVsdGEgKz0gbnJfcGFnZXM7XG4rXHRcdFx0XHRiYXRjaF9lbmQgPSBcdTAwMjZmb2xpby1cdTAwM2VscnU7XG4gXG4tXHRcdFx0LyogZG9uJ3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4tXHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4tXHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbi1cdFx0XHRcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdFx0XHRcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuK1x0XHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4rXHRcdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuIFxuLVx0XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuLVx0XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgZGVsdGEpO1xuK1x0XHRcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4rXHRcdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIG5yX3BhZ2VzKTtcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuK1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXG4rXHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuK1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTtcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICsgZGVsdGEpO1xuK1x0XHRpZiAoIXJlbWFpbmluZylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMTowOTozMi40MTg0OTIwODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI2NDEwMDMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZNU2NhbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHNvbWUgcmVmaW5lbWVudHMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBMUlUgcGFnZSBoYW5kbGluZywgd2hpY2ggaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIE1HTFJVLlxuXG5GaXJzdCwgSSBzZWUgcHJlZmV0Y2hpbmcgbW9kaWZpY2F0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIGBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW9gIGFsb25nc2lkZSBgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvYCBzdWdnZXN0cyB3ZSBhcmUgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBwYWdlIHdhbGtpbmcgdGhyb3VnaCB0aGUgTFJVIGxpc3RzLCBwZXJoYXBzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgZHVyaW5nIHNjYW5uaW5nIG9yIHJlY2xhaW0uIFRoYXQncyBhIGdvb2Qgc2lnbiwgcHJlZmV0Y2hpbmcgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QgaGVyZS5cblxuTmV4dCwgYW5kIHByb2JhYmx5IHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQsIGFyZSB0aGUgTFJVIEdlbiBmdW5jdGlvbiBjaGFuZ2VzLiBJJ20gc2VlaW5nIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBhbmQgYGZsdXNoX2xydV9iYXRjaGAuIFRoZXNlIGFyZSBjb3JlIHRvIHRoZSBNdWx0aS1HZW4gTFJVIGxvZ2ljLCBpbmRpY2F0aW5nIHRoaXMgcGF0Y2ggaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBnZW5lcmF0aW9uYWwgTFJVIG1hbmFnZW1lbnQuIEkgbm90aWNlIG9wdGltaXphdGlvbnMgaW4gYGluY19taW5fc2VxYCByZWdhcmRpbmcgaG93IExSVSBiYXRjaCBtb3ZlcyBhcmUgaGFuZGxlZCAtIG1vdmluZyB0aGVtIHRvIGEgYHRhcmdldF9nZW5gIGxpc3QsIHVwZGF0aW5nIGBucl9wYWdlc2AgaW4gdGhlIGJhdGNoLCBhbmQgbW92aW5nIHByb21vdGVkIGZvbGlvcyB0byB0aGUgaGVhZC4gVGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IHJlZHVjZSBvdmVyaGVhZC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGNvcnJlY3RseSBvcHRpbWl6aW5nIGhvdyBwYWdlcyB0cmFuc2l0aW9uIGJldHdlZW4gZ2VuZXJhdGlvbnMgaXMgY3JpdGljYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBoaWdoIG1lbW9yeSBwcmVzc3VyZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgZXhhY3RseSBhcmUgdGhlc2UgbW9kaWZpY2F0aW9ucyBsb2NhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGB2bXNjYW4uY2AgY29kZT8gQW5kIG1vcmUgaW1wb3J0YW50bHksIHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGBDT05GSUdfLi4uYCkgY29udHJvbCB0aGlzIGNvZGUgcGF0aD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdW5kZXIgdmFyaW91cyBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIGlmIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBjYW4gaGVscCBtZSB3aXRoIHRoZSBpbnZlc3RpZ2F0aW9uIG9mIGBtbS92bXNjYW4uY2AgYW5kIEtjb25maWcuIFRoYXQgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBpbi1kZXB0aCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjUxLjY4MjU5NTc5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQzOTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZzoxNDE1OlxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbm1tL0tjb25maWctMTQxNi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG5tbS9LY29uZmlnOjE0MjE6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDIyLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0MzA6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbm1tL0tjb25maWctMTQzMS0jIH1cXG4tLVxcbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTUtXFxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy0zOTctXFxuLS1cXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA2LVxcbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDA4LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NS1cXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2Ryb3BiZWhpbmQpIHxcXG5tbS9odWdlX21lbW9yeS5jOjM3NDY6XFx0XFx0XFx0XFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3NDctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDYyNz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2NDMtXFxubW0vbWVtY29udHJvbC5jOjQ2NDQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtY29udHJvbC5jLTQ2NDUtc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDY2Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5tbS9tZW1jb250cm9sLmM6NDY2NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1jb250cm9sLmMtNDY2NS1cXG4tLVxcbm1tL21lbW9yeS5jPTY3Mjg9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxubW0vbWVtb3J5LmMtNjc4MC1cXG5tbS9tZW1vcnkuYzo2NzgxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbW9yeS5jLTY3ODItc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jPTY3OTc9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnkuYy02Nzk5LX1cXG5tbS9tZW1vcnkuYzo2ODAwOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbW9yeS5jLTY4MDEtXFxuLS1cXG5tbS9tbV9pbml0LmM9MTEyPXZvaWQgX19pbml0IG1taW5pdF92ZXJpZnlfcGFnZWZsYWdzX2xheW91dCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTEyNS1cXHRcXHRLQVNBTl9UQUdfV0lEVEgsXFxubW0vbW1faW5pdC5jOjEyNjpcXHRcXHRMUlVfR0VOX1dJRFRILFxcbm1tL21tX2luaXQuYy0xMjctXFx0XFx0TFJVX1JFRlNfV0lEVEgsXFxuLS1cXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Mi1cXG5tbS92bXNjYW4uYzo4NTM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODU0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04ODI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODg1LX1cXG5tbS92bXNjYW4uYzo4ODY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODg3LVxcbi0tXFxubW0vdm1zY2FuLmM9MjcwMD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjcxMS1cXG5tbS92bXNjYW4uYzoyNzEyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3MTMtXFxubW0vdm1zY2FuLmM9MjcxND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzE1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzE3LSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI3MTgtI2Vsc2VcXG5tbS92bXNjYW4uYzoyNzE5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzIwLSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxuLS1cXG5tbS92bXNjYW4uYz0yNzIzPXN0YXRpYyBib29sIHNob3VsZF93YWxrX21tdSh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTI3MjQte1xcbm1tL3Ztc2Nhbi5jOjI3MjU6XFx0cmV0dXJuIGFyY2hfaGFzX2h3X3B0ZV95b3VuZygpIFxcdTAwMjZcXHUwMDI2IGdldF9jYXAoTFJVX0dFTl9NTV9XQUxLKTtcXG5tbS92bXNjYW4uYy0yNzI2LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3Mjg9c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTI3Mjkte1xcbm1tL3Ztc2Nhbi5jOjI3MzA6XFx0cmV0dXJuIGFyY2hfaGFzX2h3X25vbmxlYWZfcG1kX3lvdW5nKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X2NhcChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xcbm1tL3Ztc2Nhbi5jLTI3MzEtfVxcbi0tXFxubW0vdm1zY2FuLmMtMjc0MS1cXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XFx0XFx0XFx0XFxcXFxcbm1tL3Ztc2Nhbi5jOjI3NDI6XFx0XFx0UkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWluX3NlcVtMUlVfR0VOX0FOT05dKSxcXHRcXFxcXFxubW0vdm1zY2FuLmM6Mjc0MzpcXHRcXHRSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFxcdFxcXFxcXG5tbS92bXNjYW4uYy0yNzQ0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MDA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE5LVxcbm1tL3Ztc2Nhbi5jOjI5MjA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MjEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMDI5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzA1Ny1cXG5tbS92bXNjYW4uYzozMDU4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDU5LVxcbi0tXFxubW0vdm1zY2FuLmM9MzI4OT1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDctXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jOjMzMDg6XFx0XFx0aWYgKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSlcXG5tbS92bXNjYW4uYy0zMzA5LVxcdFxcdFxcdHJldHVybiAtMTtcXG5tbS92bXNjYW4uYy0zMzEwLVxcbm1tL3Ztc2Nhbi5jOjMzMTE6XFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFxcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XFxubW0vdm1zY2FuLmM6MzMxMjpcXHRcXHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xcbm1tL3Ztc2Nhbi5jLTMzMTMtXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxubW0vdm1zY2FuLmMtMzMxNC1cXG5tbS92bXNjYW4uYzozMzE1OlxcdHJldHVybiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbm1tL3Ztc2Nhbi5jLTMzMTYtfVxcbi0tXFxubW0vdm1zY2FuLmM9MzMxOD1zdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxcbi0tXFxubW0vdm1zY2FuLmMtMzMyMi1cXG5tbS92bXNjYW4uYzozMzIzOlxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG5tbS92bXNjYW4uYy0zMzI0LVxcbm1tL3Ztc2Nhbi5jLTMzMjUtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjMzMjY6XFx0XFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxubW0vdm1zY2FuLmMtMzMyNy1cXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMzUtXFxubW0vdm1zY2FuLmM6MzMzNjpcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG5tbS92bXNjYW4uYzozMzM3OlxcdFxcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG5tbS92bXNjYW4uYy0zMzM4LVxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbi0tXFxubW0vdm1zY2FuLmM9NDAyOT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNjUtXFxubW0vdm1zY2FuLmM6NDA2NjpcXHRcXHRpZiAobWluX3NlcVtMUlVfR0VOX0FOT05dIFxcdTAwM2Ugc2VxIFxcdTAwMjZcXHUwMDI2IG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcXHUwMDNjIHNlcSlcXG5tbS92bXNjYW4uYzo0MDY3OlxcdFxcdFxcdG1pbl9zZXFbTFJVX0dFTl9BTk9OXSA9IHNlcTtcXG5tbS92bXNjYW4uYzo0MDY4OlxcdFxcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcXHUwMDNlIHNlcSBcXHUwMDI2XFx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzYyBzZXEpXFxubW0vdm1zY2FuLmM6NDA2OTpcXHRcXHRcXHRtaW5fc2VxW0xSVV9HRU5fRklMRV0gPSBzZXE7XFxubW0vdm1zY2FuLmMtNDA3MC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYz00MDgxPXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDExMy1cXHQgKiB0aGUgY3VycmVudCBtYXhfc2VxIG5lZWQgdG8gYmUgY292ZXJlZCwgc2luY2UgbWF4X3NlcSsxIGNhbiBvdmVybGFwXFxubW0vdm1zY2FuLmM6NDExNDpcXHQgKiB3aXRoIG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBpZiBzd2FwcGluZyBpcyBjb25zdHJhaW5lZC4gQW5kIGlmIHRoZXkgZG9cXG5tbS92bXNjYW4uYy00MTE1LVxcdCAqIG92ZXJsYXAsIGNvbGQvaG90IGludmVyc2lvbiBoYXBwZW5zLlxcbi0tXFxubW0vdm1zY2FuLmM9NDg5OD1zdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MDItXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYz0gTUlOX1NXQVBQSU5FU1MgKyAxKVxcbm1tL3Ztc2Nhbi5jOjQ5MDM6XFx0XFx0cmV0dXJuIExSVV9HRU5fRklMRTtcXG5tbS92bXNjYW4uYy00OTA0LVxcbm1tL3Ztc2Nhbi5jLTQ5MDUtXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzZT0gTUFYX1NXQVBQSU5FU1MpXFxubW0vdm1zY2FuLmM6NDkwNjpcXHRcXHRyZXR1cm4gTFJVX0dFTl9BTk9OO1xcbm1tL3Ztc2Nhbi5jLTQ5MDctXFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MTAtXFx0ICovXFxubW0vdm1zY2FuLmM6NDkxMTpcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxubW0vdm1zY2FuLmM6NDkxMjpcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG5tbS92bXNjYW4uYy00OTEzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTQzND1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01NDUwLVxcdGlmIChlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jOjU0NTE6XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xcbm1tL3Ztc2Nhbi5jLTU0NTItXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjU0NTM6XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG5tbS92bXNjYW4uYy01NDU0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTUxNT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTUxOC1cXG5tbS92bXNjYW4uYzo1NTE5OlxcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXFxubW0vdm1zY2FuLmM6NTUyMDpcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xcbm1tL3Ztc2Nhbi5jLTU1MjEtXFxubW0vdm1zY2FuLmMtNTUyMi1cXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXFxubW0vdm1zY2FuLmM6NTUyMzpcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xcbm1tL3Ztc2Nhbi5jLTU1MjQtXFxubW0vdm1zY2FuLmMtNTUyNS1cXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxcbm1tL3Ztc2Nhbi5jOjU1MjY6XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcXG5tbS92bXNjYW4uYy01NTI3LVxcbi0tXFxubW0vdm1zY2FuLmM9NTUzMj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NTQ0LVxcbm1tL3Ztc2Nhbi5jOjU1NDU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSsrKSB7XFxubW0vdm1zY2FuLmMtNTU0Ni1cXHRcXHRib29sIGVuYWJsZWQgPSBjYXBzIFxcdTAwMjYgQklUKGkpO1xcbm1tL3Ztc2Nhbi5jLTU1NDctXFxubW0vdm1zY2FuLmM6NTU0ODpcXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmMtNTU0OS1cXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMDk9c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuLS1cXG5tbS92bXNjYW4uYy02MDExLVxcdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyArIDEgXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbm1tL3Ztc2Nhbi5jOjYwMTI6XFx0QlVJTERfQlVHX09OKEJJVChMUlVfR0VOX1dJRFRIKSBcXHUwMDNjPSBNQVhfTlJfR0VOUyk7XFxubW0vdm1zY2FuLmMtNjAxMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMjQ9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTYwMjUtXFxubW0vdm1zY2FuLmM6NjAyNjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy02MDI3LVxcbi0tXFxubW0vdm1zY2FuLmM9NjAzOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA0Mi1cXG5tbS92bXNjYW4uYzo2MDQzOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwNDQtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yNTAtXFxubW0vd29ya2luZ3NldC5jOjI1MTpcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9XSURUSCArIExSVV9SRUZTX1dJRFRIIFxcdTAwM2VcXG5tbS93b3JraW5nc2V0LmMtMjUyLVxcdFxcdCAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MDk6NTEuNzM0MDQyMjEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA1OTM4MjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBMUlVfR0VOIGFuZCB2bXNjYW4uYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IG9mIGBMUlVfR0VOYCB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gbW9yZSBkZWVwbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtbS9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgTFJVX0dFTmAgZGVmaW5pdGlvbi4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVudGFuZ2xlZCB3aXRoIGl0IOKAkyB3aGF0IHByZXJlcXVpc2l0ZXMgZXhpc3QsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgaXRzIHBsYWNlIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiB0aGluZ3MuXG5cbkZyb20gdGhlcmUsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLiBJIGhhdmUgYSByb3VnaCBhcmVhIGluIG1pbmQsIHJvdWdobHkgbGluZXMgMjcwMC00MDAwLiBJdCdzIGEgYnJvYWQgcmFuZ2UsIEkga25vdywgYnV0IGl0IHNob3VsZCBjb250YWluIHNvbWUgb2YgdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSeKAmW0gbG9va2luZyBmb3IgdGhlIHBsYWNlcyB3aGVyZSBgaW5jX21pbl9zZXFgIG9yIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzIGFyZSBiZWluZyBtYWRlLiBUcmFjaW5nIHRoZXNlIGNhbGxzIHNob3VsZCBleHBvc2UgaG93IHRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgYmVpbmcgaW5jcmVtZW50ZWQgYW5kIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCB0byBhZmZlY3QgcGFnZSByZWNsYWltLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGdlbmVyYXRpb25hbCBMUlUgaW1wbGVtZW50YXRpb24gYW5kIHdoZXJlIGl0J3MgdHJ1bHkgbWFraW5nIGFuIGltcGFjdCBvbiBwYWdlIHNjYW5uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjU2Ljc5MzQyNzA0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cXG4xNDAxOlxcdFxcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cXG4xNDAyOlxcdFxcbjE0MDM6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDA0OlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwNTpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDA3OlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDA4OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDk6XFx0XFx0aGVscFxcbjE0MTA6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDExOlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MTI6XFx0XFxuMTQxMzpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQxNDpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDE1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTY6XFx0XFx0aGVscFxcbjE0MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxODpcXHRcXG4xNDE5OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQyMDpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQyMTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDIyOlxcdFxcdGhlbHBcXG4xNDIzOlxcdFxcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXFxuMTQyNDpcXHRcXHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXFxuMTQyNTpcXHRcXG4xNDI2OlxcdFxcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXFxuMTQyNzpcXHRcXG4xNDI4OlxcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbjE0Mjk6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0MzA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbjE0MzE6XFx0IyB9XFxuMTQzMjpcXHRcXG4xNDMzOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbjE0MzQ6XFx0ICAgICAgIGRlZl9ib29sIG5cXG4xNDM1OlxcdFxcbjE0MzY6XFx0Y29uZmlnIFBFUl9WTUFfTE9DS1xcbjE0Mzc6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0Mzg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxuMTQzOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjA5OjU2Ljc5MzUyNTcwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTQxNDc3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE11bHRpLUdlbiBMUlUgQ29uZmlndXJhdGlvbiBhbmQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtdWx0aS1nZW4gTFJVIGNvZGUuIEZpcnN0IHRoaW5ncyBmaXJzdDogYENPTkZJR19MUlVfR0VOYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc3dpdGNoLiBJZiB0aGF0J3MgZW5hYmxlZCwgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNlZW1zIHRvIGJlIHNldHRpbmcgdXAgdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eSByaWdodCBvdXQgb2YgdGhlIGdhdGUsIG5vIG1hbnVhbCBzeXNmcyBmaWRkbGluZyBuZWVkZWQuIFRoYXQncyBnb29kIHRvIGtub3csIHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBgaW5jX21pbl9zZXFgIGFuZCBvdGhlciBNR0xSVS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gV2hlcmUgYXJlIHRoZXkgZGVmaW5lZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoZXJlIGFyZSB0aGV5IGJlaW5nICpjYWxsZWQqPyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGhpZXJhcmNoeSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LiBTbywgSSdsbCBzdGFydCB3aXRoIGBtbS92bXNjYW4uY2AgYmVjYXVzZSBpdCdzIGEgZ29vZCBiZXQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFscy4gSeKAmWxsIGxvY2F0ZSBgaW5jX21pbl9zZXFgIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHRoZW4gbWV0aWN1bG91c2x5IHdvcmsgbXkgd2F5IHVwIHRoZSBjYWxsIHN0YWNrLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZ2VuLUxSVSBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgYW5kIHdoYXQgdGhlIHN5c3RlbSBpcyByZWx5aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEwOjA3LjMzNTAwNTM0OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc4Mjg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmNfbWluX3NlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zOTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NDYtXFxubW0vdm1zY2FuLmM6Mzk0NzpzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy0zOTQ4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMjgtXFxubW0vdm1zY2FuLmM6NDAyOTpzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00MDMwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwODE9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTAyLVxcbm1tL3Ztc2Nhbi5jOjQxMDM6XFx0XFx0aWYgKGluY19taW5fc2VxKGxydXZlYywgdHlwZSwgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNDEwNC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NTE9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00OTcwLVxcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NzE6XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNDk3Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NzgtXFx0aWYgKHNjYW5uZWQpXFxubW0vdm1zY2FuLmM6NDk3OTpcXHRcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy00OTgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDowNy4zODY3OTUwNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjczMDU2NTc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB3aXRoaW4gdGhlIFZNIHNjYW5uaW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc2VxdWVuY2UgbnVtYmVycyBhcmUgaW5jcmVtZW50ZWQuIEkgc2VlIHRoYXQgYGluY19taW5fc2VxYCBpcyBjYWxsZWQgZnJvbSBgaW5jX21heF9zZXFgIGFuZCBgdHJ5X3RvX2luY19taW5fc2VxYCwgYm90aCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgKmVsc2UqIGlzIHRyaWdnZXJpbmcgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUgYnJvYWRlciBlbnRyeSBwb2ludHMgaW50byB0aGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIGFyZSBpbml0aWF0ZWQuXG5cbkkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZS4gSSdsbCBicm9hZGVuIG15IHNlYXJjaC4gSSB3aWxsIGludmVzdGlnYXRlIGNhbGxlcnMgb2YgYGxydV9nZW5fc2hyaW5rX25vZGVgIOKAkyBvciBhbnkgb3RoZXIgb2J2aW91cyBlbnRyeSBwb2ludHMgaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZSDigJMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRob3NlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBCeSB0cmFjaW5nIHRob3NlIGNhbGxzLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDoyMC4xMTczNjMxMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDUyMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTI4ND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMDQtXFxubW0vdm1zY2FuLmM6NTMwNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUzMDYte1xcbi0tXFxubW0vdm1zY2FuLmM9NjAzMz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzctXFxubW0vdm1zY2FuLmM6NjAzODpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwMzkte1xcbi0tXFxubW0vdm1zY2FuLmM9NjMxNT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMjItXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG5tbS92bXNjYW4uYzo2MzIzOlxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MzI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDoyMC4xNjI4MjIzNDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1NTg4MTkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTUdMUlUgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBgc2hyaW5rX25vZGVgIOKAkyB0aGF0J3MgdGhlIGtleSBmdW5jdGlvbiBjYWxsZWQgZHVyaW5nIHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IHdoZW4ga3N3YXBkIG9yIGRpcmVjdCByZWNsYWltIGFyZSBydW5uaW5nLiBSaWdodCwgZ290IGl0LiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGFyZWFzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGF0dGFjayB2ZWN0b3JzIHRvIGxvb2sgYXQuIEFyZSB0aGVyZSBhbnkgZXhwb3J0ZWQgc3ltYm9scywgc3lzZnMgZW50cnlwb2ludHMsIG9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCB0aGF0IGFyZW4ndCBjb25zaWRlcmVkIFwiaG90IHBhdGhzXCIgdGhhdCBtaWdodCBiZSByaXBlIGZvciBmdXp6aW5nPyBUaG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5OZXh0LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IGRlYnVnZnMsIHN5c2ZzLCBvciBwcm9jZnMgaW50ZXJmYWNlcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBNR0xSVSBvciBMUlUgZ2VuZXJhdGlvbiBpbiBnZW5lcmFsLiBUaG9zZSB0eXBlcyBvZiBpbnRlcmZhY2VzIGFyZSBvZnRlbiBvdmVybG9va2VkIGFuZCBjYW4gZXhwb3NlIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIHRlcm0gYGxydV9nZW5gIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB0aGUgTFJVIGdlbmVyYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTA6MzEuNzIxNjQ2MzI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY5MDcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcyNyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04NTktICovXFxubW0vdm1zY2FuLmM6ODYwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjEte1xcbi0tXFxubW0vdm1zY2FuLmMtODgxLSNlbHNlXFxubW0vdm1zY2FuLmM6ODgyOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04ODMte1xcbi0tXFxubW0vdm1zY2FuLmM9ODg4PXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtOTEyLVxcbm1tL3Ztc2Nhbi5jOjkxMzpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy05MTQtXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYy05MTYtXFxubW0vdm1zY2FuLmM6OTE3OlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MTgtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MjMwMD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzMDYtXFxubW0vdm1zY2FuLmM6MjMwNzpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjMwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0yNzE0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jLTI3MTUtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNzE2OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MTc6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjcxOC0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MjA6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNzIxLSNlbmRpZlxcbi0tXFxubW0vdm1zY2FuLmM9MjgwOD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgzNy0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODM4OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODM5LSAqXFxuLS1cXG5tbS92bXNjYW4uYz0yODU1PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NjQtXFxubW0vdm1zY2FuLmM6Mjg2NTpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4NjYtXFx0XFx0XFx0ICAgICAgdm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4ODAtXFxubW0vdm1zY2FuLmM6Mjg4MTpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg4Mi1cXHRcXHRcXHRcXHR2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OS1cXG5tbS92bXNjYW4uYzoyOTAwOnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTI5MDEte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMS1cXG5tbS92bXNjYW4uYzoyOTIyOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjkyMy17XFxubW0vdm1zY2FuLmM6MjkyNDpcXHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xcbm1tL3Ztc2Nhbi5jLTI5MjUtXFx0XFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxcbi0tXFxubW0vdm1zY2FuLmMtMjkzNy1cXG5tbS92bXNjYW4uYzoyOTM4OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTM5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDItXFxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDctXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI5NDg6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk0OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjEtXFxubW0vdm1zY2FuLmM6Mjk2Mjp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjMte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk2NS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYzoyOTY2OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjk2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTc3OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5NzgtXFxuLS1cXG5tbS92bXNjYW4uYy0yOTg4LVxcbm1tL3Ztc2Nhbi5jOjI5ODk6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTkwLXtcXG5tbS92bXNjYW4uYy0yOTkxLVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk5MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xcbm1tL3Ztc2Nhbi5jLTI5OTMtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzozMDA3OlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwMDgtXFxuLS1cXG5tbS92bXNjYW4uYy0zMDI4LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMzAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1Mi1cXG5tbS92bXNjYW4uYzozMDUzOlxcdGxydV9nZW5fZGVsX21tKG1tKTtcXG5tbS92bXNjYW4uYzozMDU0OlxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG5tbS92bXNjYW4uYy0zMDU1LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTktXFxubW0vdm1zY2FuLmM6MzA2MDpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTMwNjEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA2NC1cXG5tbS92bXNjYW4uYzozMDY1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0zMDY2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjktXFxubW0vdm1zY2FuLmM6MzA3MDpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMDcxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNzYtXFxubW0vdm1zY2FuLmM6MzA3NzpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXFxubW0vdm1zY2FuLmMtMzA3OC17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDgxLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXFx1MDAzZWxydXZlYztcXG5tbS92bXNjYW4uYzozMDgyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwODMtXFxuLS1cXG5tbS92bXNjYW4uYy0zMTAxLVxcbm1tL3Ztc2Nhbi5jOjMxMDI6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxcbm1tL3Ztc2Nhbi5jLTMxMDMte1xcbi0tXFxubW0vdm1zY2FuLmMtMzEwOC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMTA5OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6MzExMDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zMTExLVxcbi0tXFxubW0vdm1zY2FuLmM9MzE2Nj1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMTY5LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMxNzA6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMTcxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMxNzItXFxuLS1cXG5tbS92bXNjYW4uYz0zMjE4PXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi0tXFxubW0vdm1zY2FuLmMtMzIyMS1cXHRpbnQgaTtcXG5tbS92bXNjYW4uYzozMjIyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIyMy1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjM3PXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxcbi0tXFxubW0vdm1zY2FuLmMtMzIzOS1cXHRpbnQgaGlzdCwgdGllcjtcXG5tbS92bXNjYW4uYzozMjQwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzI0MS1cXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXFx1MDAzZSAxO1xcbi0tXFxubW0vdm1zY2FuLmM9MzI4OT1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDYtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjMzMDc6XFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jLTMzMDgtXFx0XFx0aWYgKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzNDY9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNDgtXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxubW0vdm1zY2FuLmM6MzM0OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jOjMzNTA6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzM1MS1cXHRib29sIGdlbl9pbmNyZWFzZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy0zMzU0LVxcdGlmIChnZW5faW5jcmVhc2VkKVxcbm1tL3Ztc2Nhbi5jOjMzNTU6XFx0XFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG5tbS92bXNjYW4uYy0zMzU2LVxcdHJldHVybiBuZXdfZ2VuO1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1OC1cXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMzM2MC1cXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzc0LVxcbm1tL3Ztc2Nhbi5jOjMzNzU6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNzYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM3OC1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMzNzk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzgwLVxcbi0tXFxubW0vdm1zY2FuLmMtMzM5My1cXG5tbS92bXNjYW4uYzozMzk0OlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikpXFxubW0vdm1zY2FuLmMtMzM5NS1cXHRcXHRcXHRscnUgKz0gTFJVX0FDVElWRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM0MDI9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzQwNS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXFx1MDAzZXZtYTtcXG5tbS92bXNjYW4uYzozNDA2OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM0MDctXFxuLS1cXG5tbS92bXNjYW4uYz0zNTQwPXN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTQ3LVxcbm1tL3Ztc2Nhbi5jOjM1NDg6c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vdm1zY2FuLmMtMzU0OS1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NjQtXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM1NjU6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNTY2LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM1NzI9c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zNTgyLVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxubW0vdm1zY2FuLmM6MzU4MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zNTg0LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzU4Ni1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjM1ODc6XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XFxubW0vdm1zY2FuLmMtMzU4OC1cXHR1bnNpZ25lZCBpbnQgbnI7XFxuLS1cXG5tbS92bXNjYW4uYz0zNjYzPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY3MC1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM2NzE6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzY3Mi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NzQtXFx0REVGSU5FX01BWF9TRVEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozNjc1OlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTM2NzYtXFxuLS1cXG5tbS92bXNjYW4uYz0zNzUxPXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzc2MC1cXHR1bnNpZ25lZCBsb25nIGZpcnN0ID0gLTE7XFxubW0vdm1zY2FuLmM6Mzc2MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYzozNzYyOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTM3NjMtXFxuLS1cXG5tbS92bXNjYW4uYz0zODI0PXN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zODMwLVxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG5tbS92bXNjYW4uYzozODMxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM4MzItXFxuLS1cXG5tbS92bXNjYW4uYy0zODY1LVxcbm1tL3Ztc2Nhbi5jOjM4NjY6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zODY3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MDAtXFxubW0vdm1zY2FuLmM6MzkwMTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG5tbS92bXNjYW4uYy0zOTAyLXtcXG5tbS92bXNjYW4uYzozOTAzOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MDQtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTIxPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG5tbS92bXNjYW4uYy0zOTIyLXtcXG5tbS92bXNjYW4uYzozOTIzOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVxcdTAwM2VyZWNsYWltX3N0YXRlLVxcdTAwM2VtbV93YWxrO1xcbm1tL3Ztc2Nhbi5jLTM5MjQtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTQ3PXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk1MC1cXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcXG5tbS92bXNjYW4uYzozOTUxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzk1Mi1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmM6Mzk1MzpcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYy0zOTU0LVxcdGludCB0YXJnZXRfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xcbi0tXFxubW0vdm1zY2FuLmMtMzk2NC1cXHRWTV9XQVJOX09OX09OQ0UoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUyk7XFxubW0vdm1zY2FuLmM6Mzk2NTpcXHRWTV9XQVJOX09OX09OQ0UobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBvbGRfZ2VuKSAhPVxcbm1tL3Ztc2Nhbi5jOjM5NjY6XFx0XFx0XFx0bHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCB0YXJnZXRfZ2VuKSk7XFxubW0vdm1zY2FuLmMtMzk2Ny1cXHQvKiBwcmV2ZW50IGNvbGQvaG90IGludmVyc2lvbiBpZiB0aGUgdHlwZSBpcyBldmljdGFibGUgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMjk9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDMyLVxcdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XFxubW0vdm1zY2FuLmM6NDAzMzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwMzQtXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNDAtXFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG5tbS92bXNjYW4uYzo0MDQxOlxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDA0Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNjEtXFxubW0vdm1zY2FuLmM6NDA2MjpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xcbm1tL3Ztc2Nhbi5jLTQwNjMtXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAyNlxcdTAwMjYgc3dhcHBpbmVzcyBcXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xcbi0tXFxubW0vdm1zY2FuLmM9NDA4MT1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwODUtXFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NDA4NjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwODctcmVzdGFydDpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxMTYtXFx0ICovXFxubW0vdm1zY2FuLmM6NDExNzpcXHRwcmV2ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgLSAxKTtcXG5tbS92bXNjYW4uYzo0MTE4OlxcdG5leHQgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWF4X3NlcSArIDEpO1xcbm1tL3Ztc2Nhbi5jLTQxMTktXFxuLS1cXG5tbS92bXNjYW4uYz00MTQ2PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDE0OS1cXHRib29sIHN1Y2Nlc3M7XFxubW0vdm1zY2FuLmM6NDE1MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQxNTEtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjQxNTI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MTUzOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQxNTQtXFxuLS1cXG5tbS92bXNjYW4uYy00MTY1LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDE2NjpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQxNjctXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MjMwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDIzMy1cXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xcbm1tL3Ztc2Nhbi5jOjQyMzQ6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00MjM1LVxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy00MjM5LVxcdFxcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFxcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XFxubW0vdm1zY2FuLmM6NDI0MDpcXHRcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxubW0vdm1zY2FuLmMtNDI0MS1cXHRcXHRcXHRmb3IgKHpvbmUgPSAwOyB6b25lIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXFxuLS1cXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDI3NS1cXG5tbS92bXNjYW4uYzo0Mjc2OlxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykpO1xcbm1tL3Ztc2Nhbi5jLTQyNzctXFx0YmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4udGltZXN0YW1wc1tnZW5dKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyODItLyogdG8gcHJvdGVjdCB0aGUgd29ya2luZyBzZXQgb2YgdGhlIGxhc3QgTiBqaWZmaWVzICovXFxubW0vdm1zY2FuLmM6NDI4MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBscnVfZ2VuX21pbl90dGwgX19yZWFkX21vc3RseTtcXG5tbS92bXNjYW4uYy00Mjg0LVxcbm1tL3Ztc2Nhbi5jOjQyODU6c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00Mjg2LXtcXG5tbS92bXNjYW4uYy00Mjg3LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5tbS92bXNjYW4uYzo0Mjg4OlxcdHVuc2lnbmVkIGxvbmcgbWluX3R0bCA9IFJFQURfT05DRShscnVfZ2VuX21pbl90dGwpO1xcbm1tL3Ztc2Nhbi5jLTQyODktXFx0Ym9vbCByZWNsYWltYWJsZSA9ICFtaW5fdHRsO1xcbi0tXFxubW0vdm1zY2FuLmMtNDMzMS0gKi9cXG5tbS92bXNjYW4uYzo0MzMyOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MzMzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzctXFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxubW0vdm1zY2FuLmM6NDMzODpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQzMzktXFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzNDctXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjQzNDg6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbm1tL3Ztc2Nhbi5jLTQzNDktXFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xcbi0tXFxubW0vdm1zY2FuLmMtNDM4Ny1cXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWF4X3NlcSk7XFxubW0vdm1zY2FuLmM6NDM4ODpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTQzODktXFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0NTA9ZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy00NDU3LVxcbm1tL3Ztc2Nhbi5jOjQ0NTg6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxubW0vdm1zY2FuLmMtNDQ1OS17XFxuLS1cXG5tbS92bXNjYW4uYy00NTA1LVxcbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUwNy17XFxuLS1cXG5tbS92bXNjYW4uYy00NTMwLVxcbm1tL3Ztc2Nhbi5jOjQ1MzE6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUzNy1cXG5tbS92bXNjYW4uYzo0NTM4OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX09MRCk7XFxubW0vdm1zY2FuLmMtNDUzOS1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy00NTQxLVxcbm1tL3Ztc2Nhbi5jOjQ1NDI6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1NDMte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU2Ny1cXG5tbS92bXNjYW4uYzo0NTY4OnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1Njkte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU3My1cXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXFxubW0vdm1zY2FuLmM6NDU3NDpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9IRUFEKTtcXG5tbS92bXNjYW4uYy00NTc1LX1cXG5tbS92bXNjYW4uYy00NTc2LVxcbm1tL3Ztc2Nhbi5jOjQ1Nzc6Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTc4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1OTA9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00NTkyLXtcXG5tbS92bXNjYW4uYzo0NTkzOlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6NDU5NDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy00NTk1LVxcdGludCBzd2FwcGluZXNzID0gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjMtICovXFxubW0vdm1zY2FuLmM6NDYyNDp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NjI1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NTAtICogICAgZ2VuZXJhdGlvbnMgb24gYW4gTFJVIGxpc3QuXFxubW0vdm1zY2FuLmM6NDY1MTogKiA0LiBJbiBscnVfZ2VuX2RlbF9mb2xpbygpLCB0aGUgZ2VuZXJhdGlvbiB0byB3aGljaCB0aGUgZm9saW8gYmVsb25ncyBpc1xcbm1tL3Ztc2Nhbi5jLTQ2NTItICogICAgZm91bmQgYmFzZWQgb24gdGhlIGdlbmVyYXRpb24gaW5mb3JtYXRpb24gaW4gZm9saW8tXFx1MDAzZWZsYWdzLCBhbmQgdGhlXFxuLS1cXG5tbS92bXNjYW4uYy00NjU0LSAqICAgIHRoZSBscnUgc2l6ZSBjb3JyZWN0bHkgZHVyaW5nIHJlcGFyZW50aW5nLCBvdGhlcndpc2UgdGhlIGxydSBzaXplIG1heVxcbm1tL3Ztc2Nhbi5jOjQ2NTU6ICogICAgYmUgdXBkYXRlZCBpbmNvcnJlY3RseSBpbiBscnVfZ2VuX2RlbF9mb2xpbygpLlxcbm1tL3Ztc2Nhbi5jLTQ2NTYtICpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NjQtICovXFxubW0vdm1zY2FuLmM6NDY2NTpzdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ2NjYtXFx0XFx0XFx0XFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXFxubW0vdm1zY2FuLmMtNDY2Ny17XFxubW0vdm1zY2FuLmM6NDY2ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqY2hpbGRfbHJ1Z2VuLCAqcGFyZW50X2xydWdlbjtcXG5tbS92bXNjYW4uYy00NjY5LVxcdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xcbi0tXFxubW0vdm1zY2FuLmMtNDY3NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ2V0X25yX2dlbnMoY2hpbGRfbHJ1dmVjLCB0eXBlKTsgaSsrKSB7XFxubW0vdm1zY2FuLmM6NDY3NjpcXHRcXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShjaGlsZF9scnVnZW4tXFx1MDAzZW1heF9zZXEgLSBpKTtcXG5tbS92bXNjYW4uYy00Njc3LVxcdFxcdGxvbmcgbnJfcGFnZXMgPSBjaGlsZF9scnVnZW4tXFx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV07XFxubW0vdm1zY2FuLmM6NDY3ODpcXHRcXHRpbnQgY2hpbGRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xcbm1tL3Ztc2Nhbi5jOjQ2Nzk6XFx0XFx0aW50IHBhcmVudF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xcbm1tL3Ztc2Nhbi5jLTQ2ODAtXFxuLS1cXG5tbS92bXNjYW4uYy00Njg4LVxcbm1tL3Ztc2Nhbi5jOjQ2ODk6XFx0XFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSAhPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pKSB7XFxubW0vdm1zY2FuLmMtNDY5MC1cXHRcXHRcXHRfX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSArIGNoaWxkX2xydV9hY3RpdmUsIHpvbmUsIC1ucl9wYWdlcyk7XFxuLS1cXG5tbS92bXNjYW4uYy00Njk1LVxcbm1tL3Ztc2Nhbi5jOjQ2OTY6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS92bXNjYW4uYy00Njk3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3MDctXFx0XFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKylcXG5tbS92bXNjYW4uYzo0NzA4OlxcdFxcdFxcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XFxubW0vdm1zY2FuLmMtNDcwOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3MzA9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDczOS1cXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcXG5tbS92bXNjYW4uYzo0NzQwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDc0MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NDgtXFx0LyogcHJvbW90ZWQgKi9cXG5tbS92bXNjYW4uYzo0NzQ5OlxcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XFxubW0vdm1zY2FuLmMtNDc1MC1cXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZscnVnZW4tXFx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3Nzk9c3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDc5Ni1cXG5tbS92bXNjYW4uYzo0Nzk3OlxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcXG5tbS92bXNjYW4uYy00Nzk4LVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9NDgwMz1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDgxNC1cXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XFxubW0vdm1zY2FuLmM6NDgxNTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ4MTYtXFxuLS1cXG5tbS92bXNjYW4uYy00ODIyLVxcbm1tL3Ztc2Nhbi5jOjQ4MjM6XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTQ4MjQtXFxuLS1cXG5tbS92bXNjYW4uYz00OTUxPXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDk1OS1cXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxubW0vdm1zY2FuLmM6NDk2MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQ5NjEtXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTAtXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG5tbS92bXNjYW4uYzo1MDExOlxcdFxcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcXG5tbS92bXNjYW4uYy01MDEyLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE3Mz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxODAtXFxubW0vdm1zY2FuLmM6NTE4MTpcXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbm1tL3Ztc2Nhbi5jLTUxODItXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMTQ9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MjIwLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo1MjIxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XFxubW0vdm1zY2FuLmMtNTIyMi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy01MjM0LVxcdFxcdGlmIChvcCkge1xcbm1tL3Ztc2Nhbi5jOjUyMzU6XFx0XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XFxubW0vdm1zY2FuLmMtNTIzNi1cXHRcXHRcXHRvcCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MjQ4LVxcdFxcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxubW0vdm1zY2FuLmM6NTI0OTpcXHRcXHRcXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTUyNTAtXFx0XFx0XFx0bWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtNTI2Ni1cXHRpZiAob3ApXFxubW0vdm1zY2FuLmM6NTI2NzpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MjY4LVxcbi0tXFxubW0vdm1zY2FuLmMtNTI3My1cXG5tbS92bXNjYW4uYzo1Mjc0OlxcdC8qIHJlc3RhcnQgaWYgcmFjZWQgd2l0aCBscnVfZ2VuX3JvdGF0ZV9tZW1jZygpICovXFxubW0vdm1zY2FuLmMtNTI3NS1cXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI4My1cXG5tbS92bXNjYW4uYzo1Mjg0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyODUte1xcbi0tXFxubW0vdm1zY2FuLmMtNTI5Ny1cXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmM6NTI5ODpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxubW0vdm1zY2FuLmMtNTI5OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMDQtXFxubW0vdm1zY2FuLmM6NTMwNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUzMDYte1xcbi0tXFxubW0vdm1zY2FuLmM9NTM1MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNTM1Mi17XFxubW0vdm1zY2FuLmM6NTM1MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTUzNTQtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEwOjMxLjc2OTM0MzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NDE3Njc1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtbS92bXNjYW4uY2AgY29kZSByZWxhdGVkIHRvIGRlYnVnZnMgYW5kIHN5c2ZzIGludGVyYWN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSB0aG9zZSBjb25uZWN0ZWQgdG8gdGhlIGRlYnVnIGFuZCBzeXN0ZW0gZmlsZSBzeXN0ZW1zLlxuXG5UbyBtYWtlIHRoaXMgZWZmaWNpZW50LCBJJ2xsIGZvY3VzIG15IHNlYXJjaCB3aXRoaW4gdGhlIGxpa2VseSBhcmVhIHdoZXJlIHN1Y2ggY29kZSB3b3VsZCByZXNpZGUuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBhcm91bmQgbGluZXMgNTUwMCB0byA2MDAwLiBUaGF0IHJhbmdlIG9mdGVuIGhvbGRzIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgc3lzdGVtIGlzIGV4cG9zZWQgZm9yIGRlYnVnZ2luZyBvciBtYW5hZ2VtZW50LiBJdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBgdm1zY2FuYCBleHBvc2VzIGFueSBpbnRlcm5hbCBzdGF0ZSBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTA6MzYuMjExMTE0OTQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NTAwOlxcdHN0YXRpYyBzc2l6ZV90IG1pbl90dGxfbXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG41NTAxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG41NTAyOlxcdHtcXG41NTAzOlxcdFxcdHVuc2lnbmVkIGludCBtc2VjcztcXG41NTA0OlxcdFxcbjU1MDU6XFx0XFx0aWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2bXNlY3MpKVxcbjU1MDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTUwNzpcXHRcXG41NTA4OlxcdFxcdFdSSVRFX09OQ0UobHJ1X2dlbl9taW5fdHRsLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7XFxuNTUwOTpcXHRcXG41NTEwOlxcdFxcdHJldHVybiBsZW47XFxuNTUxMTpcXHR9XFxuNTUxMjpcXHRcXG41NTEzOlxcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9taW5fdHRsX2F0dHIgPSBfX0FUVFJfUlcobWluX3R0bF9tcyk7XFxuNTUxNDpcXHRcXG41NTE1OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuNTUxNjpcXHR7XFxuNTUxNzpcXHRcXHR1bnNpZ25lZCBpbnQgY2FwcyA9IDA7XFxuNTUxODpcXHRcXG41NTE5OlxcdFxcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXFxuNTUyMDpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xcbjU1MjE6XFx0XFxuNTUyMjpcXHRcXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXFxuNTUyMzpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xcbjU1MjQ6XFx0XFxuNTUyNTpcXHRcXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxcbjU1MjY6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcXG41NTI3OlxcdFxcbjU1Mjg6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMHglMDR4XFxcXG5cXFwiLCBjYXBzKTtcXG41NTI5OlxcdH1cXG41NTMwOlxcdFxcbjU1MzE6XFx0Lyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xcbjU1MzI6XFx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjU1MzM6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuNTUzNDpcXHR7XFxuNTUzNTpcXHRcXHRpbnQgaTtcXG41NTM2OlxcdFxcdHVuc2lnbmVkIGludCBjYXBzO1xcbjU1Mzc6XFx0XFxuNTUzODpcXHRcXHRpZiAodG9sb3dlcigqYnVmKSA9PSAnbicpXFxuNTUzOTpcXHRcXHRcXHRjYXBzID0gMDtcXG41NTQwOlxcdFxcdGVsc2UgaWYgKHRvbG93ZXIoKmJ1ZikgPT0gJ3knKVxcbjU1NDE6XFx0XFx0XFx0Y2FwcyA9IC0xO1xcbjU1NDI6XFx0XFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZjYXBzKSlcXG41NTQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU1NDQ6XFx0XFxuNTU0NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpKyspIHtcXG41NTQ2OlxcdFxcdFxcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXFx1MDAyNiBCSVQoaSk7XFxuNTU0NzpcXHRcXG41NTQ4OlxcdFxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG41NTQ5OlxcdFxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbjU1NTA6XFx0XFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG41NTUxOlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU1NTI6XFx0XFx0XFx0ZWxzZVxcbjU1NTM6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU1NTQ6XFx0XFx0fVxcbjU1NTU6XFx0XFxuNTU1NjpcXHRcXHRyZXR1cm4gbGVuO1xcbjU1NTc6XFx0fVxcbjU1NTg6XFx0XFxuNTU1OTpcXHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xcbjU1NjA6XFx0XFxuNTU2MTpcXHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbjU1NjI6XFx0XFx0XFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXFxuNTU2MzpcXHRcXHRcXHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcXG41NTY0OlxcdFxcdE5VTExcXG41NTY1OlxcdH07XFxuNTU2NjpcXHRcXG41NTY3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcXG41NTY4OlxcdFxcdC5uYW1lID0gXFxcImxydV9nZW5cXFwiLFxcbjU1Njk6XFx0XFx0LmF0dHJzID0gbHJ1X2dlbl9hdHRycyxcXG41NTcwOlxcdH07XFxuNTU3MTpcXHRcXG41NTcyOlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG41NTczOlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxcbjU1NzQ6XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG41NTc1OlxcdFxcbjU1NzY6XFx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXFxuNTU3NzpcXHR7XFxuNTU3ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTU3OTpcXHRcXHRsb2ZmX3QgbnJfdG9fc2tpcCA9ICpwb3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEwOjM2LjIxMTU2MDQxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTYzMTAyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGRlYnVnZnMgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGluZm9ybWF0aW9uIHdpbGwgbGlrZWx5IHJlc2lkZSB3aXRoaW4gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMsIHNvIEknbGwgc3RhcnQgd2l0aCB0aGUgYG1tYCBkaXJlY3RvcnkuIE5vdywgd2hlcmUgd291bGQgdGhlIHZtIHNjYW5uaW5nIGRldGFpbHMgYmU/ICpBaCwgeWVzLCBgdm1zY2FuLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGUuKiBMZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmVzIDU1NzUgdGhyb3VnaCA2MDEwIHdpdGhpbiB0aGF0IGZpbGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgcmVnaXN0cmF0aW9ucyBvciBzb21lIGluZGljYXRpb24gb2YgaG93IHRoZXNlIGludGVyZmFjZXMgYXJlIGV4cG9zZWQuIEZyb20gdGhvc2UgbGluZXMgSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHZtc2FuIGNvZGUuIEl0J3MgYSB0YXJnZXRlZCBzZWFyY2gsIEkgaG9wZSB0byBmaW5kIHNvbWUgaW50ZXJmYWNlIHJlZ2lzdHJhdGlvbnMgdGhlcmUsIG90aGVyd2lzZSBJJ2xsIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzU1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDo0MC4zNzQ2Njc1OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU1ODA6XFx0XFxuNTU4MTpcXHRcXHRtLVxcdTAwM2Vwcml2YXRlID0ga3ZtYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbjU1ODI6XFx0XFx0aWYgKCFtLVxcdTAwM2Vwcml2YXRlKVxcbjU1ODM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNTU4NDpcXHRcXG41NTg1OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjU1ODY6XFx0XFx0ZG8ge1xcbjU1ODc6XFx0XFx0XFx0aW50IG5pZDtcXG41NTg4OlxcdFxcbjU1ODk6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuNTU5MDpcXHRcXHRcXHRcXHRpZiAoIW5yX3RvX3NraXAtLSlcXG41NTkxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbjU1OTI6XFx0XFx0XFx0fVxcbjU1OTM6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU1OTQ6XFx0XFxuNTU5NTpcXHRcXHRyZXR1cm4gTlVMTDtcXG41NTk2OlxcdH1cXG41NTk3OlxcdFxcbjU1OTg6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTU5OTpcXHR7XFxuNTYwMDpcXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHYpKVxcbjU2MDE6XFx0XFx0XFx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKE5VTEwsIGxydXZlY19tZW1jZyh2KSk7XFxuNTYwMjpcXHRcXG41NjAzOlxcdFxcdGt2ZnJlZShtLVxcdTAwM2Vwcml2YXRlKTtcXG41NjA0OlxcdFxcdG0tXFx1MDAzZXByaXZhdGUgPSBOVUxMO1xcbjU2MDU6XFx0fVxcbjU2MDY6XFx0XFxuNTYwNzpcXHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjU2MDg6XFx0e1xcbjU2MDk6XFx0XFx0aW50IG5pZCA9IGxydXZlY19wZ2RhdCh2KS1cXHUwMDNlbm9kZV9pZDtcXG41NjEwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh2KTtcXG41NjExOlxcdFxcbjU2MTI6XFx0XFx0KysqcG9zO1xcbjU2MTM6XFx0XFxuNTYxNDpcXHRcXHRuaWQgPSBuZXh0X21lbW9yeV9ub2RlKG5pZCk7XFxuNTYxNTpcXHRcXHRpZiAobmlkID09IE1BWF9OVU1OT0RFUykge1xcbjU2MTY6XFx0XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpO1xcbjU2MTc6XFx0XFx0XFx0aWYgKCFtZW1jZylcXG41NjE4OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjU2MTk6XFx0XFxuNTYyMDpcXHRcXHRcXHRuaWQgPSBmaXJzdF9tZW1vcnlfbm9kZTtcXG41NjIxOlxcdFxcdH1cXG41NjIyOlxcdFxcbjU2MjM6XFx0XFx0cmV0dXJuIGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTYyNDpcXHR9XFxuNTYyNTpcXHRcXG41NjI2OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3Nob3dfZnVsbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG41NjI3OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBtYXhfc2VxLCB1bnNpZ25lZCBsb25nICptaW5fc2VxLFxcbjU2Mjg6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNlcSlcXG41NjI5OlxcdHtcXG41NjMwOlxcdFxcdGludCBpO1xcbjU2MzE6XFx0XFx0aW50IHR5cGUsIHRpZXI7XFxuNTYzMjpcXHRcXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKHNlcSk7XFxuNTYzMzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjU2MzQ6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuNTYzNTpcXHRcXG41NjM2OlxcdFxcdGZvciAodGllciA9IDA7IHRpZXIgXFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXIrKykge1xcbjU2Mzc6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICAgICAgICAgICAgJTEwZFxcXCIsIHRpZXIpO1xcbjU2Mzg6XFx0XFx0XFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUrKykge1xcbjU2Mzk6XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcyA9IFxcXCJ4eHhcXFwiO1xcbjU2NDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuWzNdID0ge307XFxuNTY0MTpcXHRcXG41NjQyOlxcdFxcdFxcdFxcdGlmIChzZXEgPT0gbWF4X3NlcSkge1xcbjU2NDM6XFx0XFx0XFx0XFx0XFx0cyA9IFxcXCJSVHhcXFwiO1xcbjU2NDQ6XFx0XFx0XFx0XFx0XFx0blswXSA9IFJFQURfT05DRShscnVnZW4tXFx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1bdGllcl0pO1xcbjU2NDU6XFx0XFx0XFx0XFx0XFx0blsxXSA9IFJFQURfT05DRShscnVnZW4tXFx1MDAzZWF2Z190b3RhbFt0eXBlXVt0aWVyXSk7XFxuNTY0NjpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHNlcSA9PSBtaW5fc2VxW3R5cGVdIHx8IE5SX0hJU1RfR0VOUyBcXHUwMDNlIDEpIHtcXG41NjQ3OlxcdFxcdFxcdFxcdFxcdHMgPSBcXFwicmVwXFxcIjtcXG41NjQ4OlxcdFxcdFxcdFxcdFxcdG5bMF0gPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZscnVnZW4tXFx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XFxuNTY0OTpcXHRcXHRcXHRcXHRcXHRuWzFdID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcXG41NjUwOlxcdFxcdFxcdFxcdFxcdG5bMl0gPSBSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0pO1xcbjU2NTE6XFx0XFx0XFx0XFx0fVxcbjU2NTI6XFx0XFxuNTY1MzpcXHRcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMzsgaSsrKVxcbjU2NTQ6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICUxMGx1JWNcXFwiLCBuW2ldLCBzW2ldKTtcXG41NjU1OlxcdFxcdFxcdH1cXG41NjU2OlxcdFxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbjU2NTc6XFx0XFx0fVxcbjU2NTg6XFx0XFxuNTY1OTpcXHRcXHRpZiAoIW1tX3N0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMDo0MC4zNzUwNTAzNjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1ODIyNzE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEZWJ1Z2ZzIFdyaXRlIEhhbmRsZXJzIGZvciBgbHJ1X2dlbmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBkZWJ1Z2ZzYCBpbnRlcmZhY2UgYW5kIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGUgaGFuZGxlcnMgYXZhaWxhYmxlIGZvciB0aGUgYGxydV9nZW5gIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBtb2RpZmlhYmxlIG9yIGNvbmZpZ3VyYWJsZSB0aHJvdWdoIHRoYXQgZGVidWcgaW50ZXJmYWNlLiBNeSB0aGlua2luZyBpcyB0byBkaXJlY3RseSBleGFtaW5lIHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB3cml0ZSBvcGVyYXRpb25zIHRvIGBscnVfZ2VuYC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEknbGwgcmVhZCBmcm9tIGxpbmUgNTc1MCB0byA2MDIwLCB0byBwaW5wb2ludCB0aG9zZSBjcml0aWNhbCB3cml0ZSBoYW5kbGVyIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodCBuZWVkZWQgb24gd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGV4cG9zZWQgdG8gbWUgdmlhIGRlYnVnZnMsIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGVmZmVjdHMgYXJlIG9uIHRoZSBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTE6MDguOTU3MzI0NjMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU3NTE6XFx0XFxuNTc1MjpcXHRcXHRyZXR1cm4gdHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZm9yY2Vfc2NhbikgPyAwIDogLUVFWElTVDtcXG41NzUzOlxcdH1cXG41NzU0OlxcdFxcbjU3NTU6XFx0c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNTc1NjpcXHRcXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbjU3NTc6XFx0e1xcbjU3NTg6XFx0XFx0aW50IG5yX2JhdGNoO1xcbjU3NTk6XFx0XFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG41NzYwOlxcdFxcbjU3NjE6XFx0XFx0aWYgKHNlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2UgbWF4X3NlcSlcXG41NzYyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU3NjM6XFx0XFxuNTc2NDpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcXG41NzY1OlxcdFxcbjU3NjY6XFx0XFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjU3Njc6XFx0XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG41NzY4OlxcdFxcbjU3Njk6XFx0XFx0XFx0aWYgKHNlcSBcXHUwMDNjIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKVxcbjU3NzA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTc3MTpcXHRcXG41NzcyOlxcdFxcdFxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2U9IG5yX3RvX3JlY2xhaW0pXFxuNTc3MzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG41Nzc0OlxcdFxcbjU3NzU6XFx0XFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbjU3NzY6XFx0XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbjU3Nzc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTc3ODpcXHRcXG41Nzc5OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU3ODA6XFx0XFx0fVxcbjU3ODE6XFx0XFxuNTc4MjpcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbjU3ODM6XFx0fVxcbjU3ODQ6XFx0XFxuNTc4NTpcXHRzdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuNTc4NjpcXHRcXHRcXHQgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MsIHVuc2lnbmVkIGxvbmcgb3B0KVxcbjU3ODc6XFx0e1xcbjU3ODg6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjU3ODk6XFx0XFx0aW50IGVyciA9IC1FSU5WQUw7XFxuNTc5MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbjU3OTE6XFx0XFxuNTc5MjpcXHRcXHRpZiAobmlkIFxcdTAwM2MgMCB8fCBuaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTIHx8ICFub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpKVxcbjU3OTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTc5NDpcXHRcXG41Nzk1OlxcdFxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuNTc5NjpcXHRcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQobWVtY2dfaWQpO1xcbjU3OTc6XFx0XFx0XFx0aWYgKCFtZW1jZylcXG41Nzk4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU3OTk6XFx0XFx0fVxcbjU4MDA6XFx0XFxuNTgwMTpcXHRcXHRpZiAobWVtY2dfaWQgIT0gbWVtX2Nncm91cF9pZChtZW1jZykpXFxuNTgwMjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTgwMzpcXHRcXG41ODA0OlxcdFxcdHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnO1xcbjU4MDU6XFx0XFx0bHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG41ODA2OlxcdFxcbjU4MDc6XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUylcXG41ODA4OlxcdFxcdFxcdHN3YXBwaW5lc3MgPSBnZXRfc3dhcHBpbmVzcyhscnV2ZWMsIHNjKTtcXG41ODA5OlxcdFxcdGVsc2UgaWYgKHN3YXBwaW5lc3MgXFx1MDAzZSBTV0FQUElORVNTX0FOT05fT05MWSlcXG41ODEwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG41ODExOlxcdFxcbjU4MTI6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG41ODEzOlxcdFxcdGNhc2UgJysnOlxcbjU4MTQ6XFx0XFx0XFx0ZXJyID0gcnVuX2FnaW5nKGxydXZlYywgc2VxLCBzd2FwcGluZXNzLCBvcHQpO1xcbjU4MTU6XFx0XFx0XFx0YnJlYWs7XFxuNTgxNjpcXHRcXHRjYXNlICctJzpcXG41ODE3OlxcdFxcdFxcdGVyciA9IHJ1bl9ldmljdGlvbihscnV2ZWMsIHNlcSwgc2MsIHN3YXBwaW5lc3MsIG9wdCk7XFxuNTgxODpcXHRcXHRcXHRicmVhaztcXG41ODE5OlxcdFxcdH1cXG41ODIwOlxcdGRvbmU6XFxuNTgyMTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuNTgyMjpcXHRcXG41ODIzOlxcdFxcdHJldHVybiBlcnI7XFxuNTgyNDpcXHR9XFxuNTgyNTpcXHRcXG41ODI2OlxcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG41ODI3OlxcdHN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxcbjU4Mjg6XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbjU4Mjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMTowOC45NTc2MTMwODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIyOTU5MTE1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IE1HTFJVIExpc3QgTWFuYWdlbWVudCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWJ1Z2ZzIGNvbW1hbmRzIHRoYXQgdHJpZ2dlciBhZ2luZyBvciBldmljdGlvbiwgYW5kIHRoYXQsIGluIHR1cm4sIGZ1bm5lbHMgaW50byB0aGUgY29yZSBzZXF1ZW5jZSBpbmNyZW1lbnQgYW5kIGZvbGlvIGV2aWN0aW9uIGxvZ2ljLiBUaGUgZmxvdyBpcyBjbGVhcjogY29tbWFuZHMgZnJvbSBkZWJ1Z2ZzLCB3aGljaCwgaW4gdHVybiwgdHJpZ2dlcnMgYWdpbmcvZXZpY3Rpb24sIHRyaWdnZXJzIHRoZSBzZXF1ZW5jZSBpbmNyZW1lbnQgYW5kL29yIGZvbGlvIGV2aWN0aW9uLiBCb3RoIG5vcm1hbCBwYWdlIHJlY2xhbWF0aW9uIGFuZCB0aGUgZGVidWdmcyBwYXRocyBzZWVtIHRvIGhpdCBzaW1pbGFyIGNvZGUgcGF0aHM6IGBzaHJpbmtfbm9kZWAgLVx1MDAzZSBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgLVx1MDAzZSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgLVx1MDAzZSBgZXZpY3RfZm9saW9zYCBvciBgdHJ5X3RvX2luY19tYXhfc2VxYC5cblxuTm93LCB0aGlzIHNwZWNpZmljIHBhdGNoOiBUaGUgaW5pdGlhbCBjaGFuZ2UgaXMgdGhlIGBwcmVmZXRjaHdfcHJldl9scnVfZm9saW9gIG1hY3JvIHR1cm5lZCBpbnRvIGFuIGlubGluZSBmdW5jdGlvbiwgYW5kIGEgbmV3IGBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW9gLiBUaGF0J3MgYSByZWZhY3RvciwgbWFraW5nIHRoZSBjb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuIEFsc28sIHRoZXJlJ3MgYSBuZXcgaGVscGVyLCBgX19mb2xpb19pbmNfZ2VuYCwgdGhhdCBhYnN0cmFjdHMgdGhlIGNvcmUgZ2VuZXJhdGlvbiBpbmNyZW1lbnQgbG9naWMuIFRoZSBuZXcgYGZsdXNoX2xydV9iYXRjaGAgaGVscGVyIGlzIGEgbmljZSB0b3VjaDsgdGhpcyBjbGVhcmx5IGFpbXMgdG8gb3B0aW1pemUgbGlzdCBtYW5pcHVsYXRpb25zIGZvciBwZXJmb3JtYW5jZS5cblxuVGhlIGJpZyBjaGFuZ2UgaXMgd2l0aGluIGBpbmNfbWluX3NlcWAuIEluc3RlYWQgb2YgaW5kaXZpZHVhbGx5IG1vdmluZyBlYWNoIGZvbGlvLCBpdCdzIG5vdyBiYXRjaGluZyB0aGUgbW92ZXMhIEl0IGl0ZXJhdGVzIHRoZSBsaXN0LCBwcmVmZXRjaGVzIHRoZSBuZXh0IGVudHJ5LCBpbmNyZW1lbnRzIHRoZSBnZW5lcmF0aW9uLCBhbmQgKnRoZW4qIGRvZXMgdGhlIGZvbGlvIG1vdmUuIEl0IGtlZXBzIHRyYWNrIG9mIGEgYGJhdGNoX2VuZGAsIGFjY3VtdWxhdGluZyBmb2xpb3MgdG8gYmUgbW92ZWQuIElmIHRoZSBnZW5lcmF0aW9uIGluY3JlYXNlcyAoYGdlbl9pbmNyZWFzZWRgIGlzIHRydWUpLCBpdCB1cGRhdGVzIGEgZGVsdGEsIGFjY3VtdWxhdGVzIHRoZSBiYXRjaCwgYW5kIHVwZGF0ZXMgcHJvdGVjdGVkIHRpZXIgc3RhdHMuIElmIHRoZSBnZW5lcmF0aW9uIGRvZXNuJ3QgaW5jcmVhc2UgKHByb21vdGlvbiksIGl0IGZsdXNoZXMgdGhlIGJhdGNoIGFuZCB0aGVuIG1vdmVzIHRoZSBjdXJyZW50IGZvbGlvLiBBZnRlciB0aGUgbG9vcCwgdGhlIHJlbWFpbmluZyBiYXRjaCBpcyBmbHVzaGVkLiBUaGVyZSBhcmUgYWxzbyBuZXcgYFZNX1dBUk5fT05fT05DRWAgY2hlY2tzIGFkZGVkIHRvIGVuc3VyZSBzYW5pdHkgYXJvdW5kIHRoZSBudW1iZXIgb2YgZ2VuZXJhdGlvbnMgYW5kIGFjdGl2ZSBMUlUgc3RhdGUuIFRoZSBiYXRjaGluZyBpcyBzbWFydC5cblxuT2theSwgaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHRoZSB2ZXJ5IGNvcmUgb2YgTUdMUlUncyBhZ2luZyBhbmQgZXZpY3Rpb24gYWxnb3JpdGhtcywgaW4gdGhlIGNyaXRpY2FsIGBtbS92bXNjYW4uY2AuIEl0J3MgbWFuaXB1bGF0aW5nIGxpc3RzIHVzaW5nIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBsaXN0X3NwbGljZV90YWlsX2luaXRgIGFuZCB0cmFja2luZyBhIGdlbmVyYXRpb24sIGFuZCBiYXRjaGluZyBhY2NvdW50aW5nLiBUaGlzIGtpbmQgb2YgbG9naWMgaXMgcHJpbWUgZm9yIGZpbmRpbmcgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCBkdXJpbmcgbWVtb3J5IHByZXNzdXJlLCBMUlUgYWdpbmcsIHBhZ2UgcmVjbGFpbSwgb3IgZGVidWdnaW5nLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZz10cnVlLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgaW4gYG1tL3Ztc2Nhbi5jYCBvciByZWxhdGVkIGFyZSBnb29kIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBJIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyAoYmVjYXVzZSB0aG9zZSBoZWxwZXJzIGFyZSB1c3VhbGx5IGlubGluZWQsIHNvIHRoZSBmdXp6ZXIgd291bGRuJ3QgdGFyZ2V0IHRoZSBzeW1ib2xzIGRpcmVjdGx5KS4gTGV0J3MgbG9vayBmb3IgZnVuY3Rpb25zIGluIHRoYXQgYXJlYSByZWxhdGVkIHRvIE1HTFJVIG9yIHZtc2NhbiB0aGF0IGFyZW4ndCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjExOjQxLjI1MzUyNzU1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MDIzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4OTEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL3Ztc2Nhbi5jPTc2PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTg0LSNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG5tbS92bXNjYW4uYzoxODU6c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTE4Ni1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxcbi0tXFxubW0vdm1zY2FuLmMtMTk1LVxcbm1tL3Ztc2Nhbi5jOjE5NjpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMTk3LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDYtI2Vsc2VcXG5tbS92bXNjYW4uYzoyMDc6c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTIwOC1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxcbi0tXFxubW0vdm1zY2FuLmMtMjExLVxcbm1tL3Ztc2Nhbi5jOjIxMjpzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMjEzLVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuLS1cXG5tbS92bXNjYW4uYz0yMjE9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMjItXFxubW0vdm1zY2FuLmM6MjIzOnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTIyNC17XFxuLS1cXG5tbS92bXNjYW4uYy0yMzItLyogUmV0dXJucyB0cnVlIGZvciByZWNsYWltIHRocm91Z2ggY2dyb3VwIGxpbWl0cyBvciBjZ3JvdXAgaW50ZXJmYWNlcy4gKi9cXG5tbS92bXNjYW4uYzoyMzM6c3RhdGljIGJvb2wgY2dyb3VwX3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjM0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI0MS0gKi9cXG5tbS92bXNjYW4uYzoyNDI6c3RhdGljIGJvb2wgcm9vdF9yZWNsYWltKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTI0My17XFxuLS1cXG5tbS92bXNjYW4uYy0yNTktICovXFxubW0vdm1zY2FuLmM6MjYwOnN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjYxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MC0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MTpzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy0yNzIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjc1LVxcbm1tL3Ztc2Nhbi5jOjI3NjpzdGF0aWMgYm9vbCByb290X3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjc3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MC1cXG5tbS92bXNjYW4uYzoyODE6c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy0yODIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjg2LVxcbm1tL3Ztc2Nhbi5jOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMjg4LVxcdFxcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuLS1cXG5tbS92bXNjYW4uYy0yOTItXFxubW0vdm1zY2FuLmM6MjkzOnN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbm1tL3Ztc2Nhbi5jLTI5NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcnMpXFxuLS1cXG5tbS92bXNjYW4uYy0zMDgtICovXFxubW0vdm1zY2FuLmM6MzA5OnN0YXRpYyB2b2lkIGZsdXNoX3JlY2xhaW1fc3RhdGUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMzEwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NC1cXG5tbS92bXNjYW4uYzozNDU6c3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG5tbS92bXNjYW4uYy0zNDYtXFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NC1cXG5tbS92bXNjYW4uYzozNjU6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTM2Ni1cXHRcXHRcXHRcXHRcXHQgIGludCBuaWQsXFxuLS1cXG5tbS92bXNjYW4uYy0zOTQtICovXFxubW0vdm1zY2FuLmM6Mzk1OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5tbS92bXNjYW4uYy0zOTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDEzLSAqL1xcbm1tL3Ztc2Nhbi5jOjQxNDp1bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXFxubW0vdm1zY2FuLmMtNDE1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyOC1cXG5tbS92bXNjYW4uYzo0Mjk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZHJvcF9zbGFiX25vZGUoaW50IG5pZClcXG5tbS92bXNjYW4uYy00MzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDQxLVxcbm1tL3Ztc2Nhbi5jOjQ0Mjp2b2lkIGRyb3Bfc2xhYih2b2lkKVxcbm1tL3Ztc2Nhbi5jLTQ0My17XFxuLS1cXG5tbS92bXNjYW4uYy00NjYtXFxubW0vdm1zY2FuLmM6NDY3OnN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00Njgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDkzLSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NDpzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfZXJyb3Ioc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vdm1zY2FuLmMtNDk1LVxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBlcnJvcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMi1cXG5tbS92bXNjYW4uYzo1MDM6c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vdm1zY2FuLmMtNTA0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMC1cXG5tbS92bXNjYW4uYzo1MzE6dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcXG5tbS92bXNjYW4uYy01MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA0LSAqL1xcbm1tL3Ztc2Nhbi5jOjYwNTp2b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTYwNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgbnJfdGhyb3R0bGVkKVxcbi0tXFxubW0vdm1zY2FuLmM9NjI3PXR5cGVkZWYgZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy02NDAtICovXFxubW0vdm1zY2FuLmM6NjQxOnN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vdm1zY2FuLmMtNjQyLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy03MDEtICovXFxubW0vdm1zY2FuLmM6NzAyOnN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy03MDMtXFx0XFx0XFx0ICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtODE3LSAqL1xcbm1tL3Ztc2Nhbi5jOjgxODpsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3Ztc2Nhbi5jLTgxOS17XFxuLS1cXG5tbS92bXNjYW4uYy04NDAtICovXFxubW0vdm1zY2FuLmM6ODQxOnZvaWQgZm9saW9fcHV0YmFja19scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy04NDIte1xcbi0tXFxubW0vdm1zY2FuLmM9ODQ3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04NTktICovXFxubW0vdm1zY2FuLmM6ODYwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjEte1xcbi0tXFxubW0vdm1zY2FuLmMtODgxLSNlbHNlXFxubW0vdm1zY2FuLmM6ODgyOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04ODMte1xcbi0tXFxubW0vdm1zY2FuLmMtODg3LVxcbm1tL3Ztc2Nhbi5jOjg4ODpzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy04ODktXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk1NC0vKiBDaGVjayBpZiBhIGZvbGlvIGlzIGRpcnR5IG9yIHVuZGVyIHdyaXRlYmFjayAqL1xcbm1tL3Ztc2Nhbi5jOjk1NTpzdGF0aWMgdm9pZCBmb2xpb19jaGVja19kaXJ0eV93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy05NTYtXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgKmRpcnR5LCBib29sICp3cml0ZWJhY2spXFxuLS1cXG5tbS92bXNjYW4uYy05ODUtXFxubW0vdm1zY2FuLmM6OTg2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG5tbS92bXNjYW4uYy05ODctXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vdm1zY2FuLmMtMTAxNi0gKi9cXG5tbS92bXNjYW4uYzoxMDE3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGVtb3RlX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZGVtb3RlX2ZvbGlvcyxcXG5tbS92bXNjYW4uYy0xMDE4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy0xMDU5LVxcbm1tL3Ztc2Nhbi5jOjEwNjA6c3RhdGljIGJvb2wgbWF5X2VudGVyX2ZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKVxcbm1tL3Ztc2Nhbi5jLTEwNjEte1xcbi0tXFxubW0vdm1zY2FuLmMtMTA3Ny0gKi9cXG5tbS92bXNjYW4uYzoxMDc4OnN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS92bXNjYW4uYy0xMDc5LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMTYwOC1cXG5tbS92bXNjYW4uYzoxNjA5OnVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS92bXNjYW4uYy0xNjEwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0xNjYzLSAqL1xcbm1tL3Ztc2Nhbi5jOjE2NjQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTE2NjUtXFx0XFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgKm5yX3pvbmVfdGFrZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0xNjk4LSAqL1xcbm1tL3Ztc2Nhbi5jOjE2OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0xNzAwLVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTgxNS0gKi9cXG5tbS92bXNjYW4uYzoxODE2OmJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy0xODE3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4NDEtICovXFxubW0vdm1zY2FuLmM6MTg0MjpzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG5tbS92bXNjYW4uYy0xODQzLVxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMTg4NS0gKi9cXG5tbS92bXNjYW4uYzoxODg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9mb2xpb3NfdG9fbHJ1KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vdm1zY2FuLmMtMTg4Ny17XFxuLS1cXG5tbS92bXNjYW4uYy0xOTU1LSAqL1xcbm1tL3Ztc2Nhbi5jOjE5NTY6c3RhdGljIGludCBjdXJyZW50X21heV90aHJvdHRsZSh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTE5NTcte1xcbi0tXFxubW0vdm1zY2FuLmMtMTk2MC1cXG5tbS92bXNjYW4uYzoxOTYxOnN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbm1tL3Ztc2Nhbi5jLTE5NjItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtMjAwMi0gKi9cXG5tbS92bXNjYW4uYzoyMDAzOnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMDA0LVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yMDg0LSAqL1xcbm1tL3Ztc2Nhbi5jOjIwODU6c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMDg2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yMTczLVxcbm1tL3Ztc2Nhbi5jOjIxNzQ6c3RhdGljIHVuc2lnbmVkIGludCByZWNsYWltX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS92bXNjYW4uYy0yMTc1LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy0yMTk4LVxcbm1tL3Ztc2Nhbi5jOjIxOTk6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxubW0vdm1zY2FuLmMtMjIwMC17XFxuLS1cXG5tbS92bXNjYW4uYy0yMjMxLVxcbm1tL3Ztc2Nhbi5jOjIyMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMjMzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjI3My0gKi9cXG5tbS92bXNjYW4uYzoyMjc0OnN0YXRpYyBib29sIGluYWN0aXZlX2lzX2xvdyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgaW5hY3RpdmVfbHJ1KVxcbm1tL3Ztc2Nhbi5jLTIyNzUte1xcbi0tXFxubW0vdm1zY2FuLmM9MjI5Mz1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjk5LVxcbm1tL3Ztc2Nhbi5jOjIzMDA6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjMwMS17XFxuLS1cXG5tbS92bXNjYW4uYy0yNDYzLVxcbm1tL3Ztc2Nhbi5jOjI0NjQ6c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9wcmVzc3VyZV9iYWxhbmNlKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI0NjUtXFx0XFx0XFx0aW50IHN3YXBwaW5lc3MsIHU2NCAqZnJhY3Rpb24sIHU2NCAqZGVub21pbmF0b3IpXFxuLS1cXG5tbS92bXNjYW4uYy0yNTAwLVxcbm1tL3Ztc2Nhbi5jOjI1MDE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYXBwbHlfcHJvcG9ydGlvbmFsX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTI1MDItXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgc2NhbilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI1NjktICovXFxubW0vdm1zY2FuLmM6MjU3MDpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI1NzEtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjk5LSAqL1xcbm1tL3Ztc2Nhbi5jOjI3MDA6c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy0yNzAxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MTMtXFxubW0vdm1zY2FuLmM6MjcxNDpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYy0yNzE1LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmM6MjcxNjpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzE3LSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI3MTgtI2Vsc2VcXG5tbS92bXNjYW4uYzoyNzE5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNzIwLSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxuLS1cXG5tbS92bXNjYW4uYy0yNzIyLVxcbm1tL3Ztc2Nhbi5jOjI3MjM6c3RhdGljIGJvb2wgc2hvdWxkX3dhbGtfbW11KHZvaWQpXFxubW0vdm1zY2FuLmMtMjcyNC17XFxuLS1cXG5tbS92bXNjYW4uYy0yNzI3LVxcbm1tL3Ztc2Nhbi5jOjI3Mjg6c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTI3Mjkte1xcbi0tXFxubW0vdm1zY2FuLmMtMjc2My1cXG5tbS92bXNjYW4uYzoyNzY0OnN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy0yNzY1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3ODMtXFxubW0vdm1zY2FuLmM6Mjc4NDpzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjc4NS17XFxuLS1cXG5tbS92bXNjYW4uYy0yODAyLVxcbm1tL3Ztc2Nhbi5jOjI4MDM6c3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTI4MDQte1xcbi0tXFxubW0vdm1zY2FuLmMtMjgwNy1cXG5tbS92bXNjYW4uYzoyODA4OnN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtMjgwOS17XFxuLS1cXG5tbS92bXNjYW4uYy0yODQ5LVxcbm1tL3Ztc2Nhbi5jOjI4NTA6c3RhdGljIGlubGluZSBpbnQgZmlsdGVyX2dlbl9mcm9tX3NlcSh1bnNpZ25lZCBsb25nIHNlcSlcXG5tbS92bXNjYW4uYy0yODUxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NTQtXFxubW0vdm1zY2FuLmM6Mjg1NTpzdGF0aWMgdm9pZCBnZXRfaXRlbV9rZXkodm9pZCAqaXRlbSwgaW50ICprZXkpXFxubW0vdm1zY2FuLmMtMjg1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy0yODY0LVxcbm1tL3Ztc2Nhbi5jOjI4NjU6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcXG5tbS92bXNjYW4uYy0yODY2LVxcdFxcdFxcdCAgICAgIHZvaWQgKml0ZW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODgwLVxcbm1tL3Ztc2Nhbi5jOjI4ODE6c3RhdGljIHZvaWQgdXBkYXRlX2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4ODItXFx0XFx0XFx0XFx0dm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTktXFxubW0vdm1zY2FuLmM6MjkwMDpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5tbS92bXNjYW4uYy0yOTAxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjEtXFxubW0vdm1zY2FuLmM6MjkyMjpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTI5MjMte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkzNy1cXG5tbS92bXNjYW4uYzoyOTM4OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTM5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDItXFxubW0vdm1zY2FuLmM6Mjk0MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjEtXFxubW0vdm1zY2FuLmM6Mjk2Mjp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NjMte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk4OC1cXG5tbS92bXNjYW4uYzoyOTg5OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk5MC17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDI4LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDI5OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMzAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1OS1cXG5tbS92bXNjYW4uYzozMDYwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMzA2MS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDY0LVxcbm1tL3Ztc2Nhbi5jOjMwNjU6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTMwNjYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA2OS1cXG5tbS92bXNjYW4uYzozMDcwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMwNzEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA3Ni1cXG5tbS92bXNjYW4uYzozMDc3OnN0YXRpYyB2b2lkIHJlc2V0X21tX3N0YXRzKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdClcXG5tbS92bXNjYW4uYy0zMDc4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMxMDEtXFxubW0vdm1zY2FuLmM6MzEwMjpzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Qoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IG1tX3N0cnVjdCAqKml0ZXIpXFxubW0vdm1zY2FuLmMtMzEwMy17XFxuLS1cXG5tbS92bXNjYW4uYy0zMTY1LVxcbm1tL3Ztc2Nhbi5jOjMxNjY6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0X25vd2FsayhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTMxNjcte1xcbi0tXFxubW0vdm1zY2FuLmM9MzIxMj1zdHJ1Y3QgY3RybF9wb3Mge1xcbi0tXFxubW0vdm1zY2FuLmMtMzIxNy1cXG5tbS92bXNjYW4uYzozMjE4OnN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbm1tL3Ztc2Nhbi5jLTMyMTktXFx0XFx0XFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyMzYtXFxubW0vdm1zY2FuLmM6MzIzNzpzdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3ZlcilcXG5tbS92bXNjYW4uYy0zMjM4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyNzItXFxubW0vdm1zY2FuLmM6MzI3MzpzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbm1tL3Ztc2Nhbi5jLTMyNzQte1xcbi0tXFxubW0vdm1zY2FuLmMtMzI4OC0vKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG5tbS92bXNjYW4uYzozMjg5OnN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTMyOTAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzMxNy1cXG5tbS92bXNjYW4uYzozMzE4OnN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxubW0vdm1zY2FuLmMtMzMxOS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMzQ1LS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXFxubW0vdm1zY2FuLmM6MzM0NjpzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3Ztc2Nhbi5jLTMzNDcte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1OC1cXG5tbS92bXNjYW4uYzozMzU5OnN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmMtMzM2MC1cXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzc0LVxcbm1tL3Ztc2Nhbi5jOjMzNzU6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNzYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzQwMS1cXG5tbS92bXNjYW4uYzozNDAyOnN0YXRpYyBpbnQgc2hvdWxkX3NraXBfdm1hKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG5tbS92bXNjYW4uYy0zNDAzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NDctICovXFxubW0vdm1zY2FuLmM6MzQ0ODpzdGF0aWMgYm9vbCBnZXRfbmV4dF92bWEodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtbV93YWxrICphcmdzLFxcbm1tL3Ztc2Nhbi5jLTM0NDktXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnZtX3N0YXJ0LCB1bnNpZ25lZCBsb25nICp2bV9lbmQpXFxuLS1cXG5tbS92bXNjYW4uYy0zNDczLVxcbm1tL3Ztc2Nhbi5jOjM0NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3B0ZV9wZm4ocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL3Ztc2Nhbi5jLTM0NzUtXFx0XFx0XFx0XFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy0zNDk4LVxcbm1tL3Ztc2Nhbi5jOjM0OTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3BtZF9wZm4ocG1kX3QgcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL3Ztc2Nhbi5jLTM1MDAtXFx0XFx0XFx0XFx0IHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTIwLVxcbm1tL3Ztc2Nhbi5jOjM1MjE6c3RhdGljIHN0cnVjdCBmb2xpbyAqZ2V0X3Bmbl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTM1MjItXFx0XFx0XFx0XFx0ICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1MzktXFxubW0vdm1zY2FuLmM6MzU0MDpzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbm1tL3Ztc2Nhbi5jLTM1NDEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzU0Ny1cXG5tbS92bXNjYW4uYzozNTQ4OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3Ztc2Nhbi5jLTM1NDktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTcxLVxcbm1tL3Ztc2Nhbi5jOjM1NzI6c3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzU3My1cXHRcXHRcXHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2NjItXFxubW0vdm1zY2FuLmM6MzY2MzpzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS92bXNjYW4uYy0zNjY0LVxcdFxcdFxcdFxcdCAgc3RydWN0IG1tX3dhbGsgKmFyZ3MsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyAqZmlyc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0zNzUwLVxcbm1tL3Ztc2Nhbi5jOjM3NTE6c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzc1Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MjMtXFxubW0vdm1zY2FuLmM6MzgyNDpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3Ztc2Nhbi5jLTM4MjUtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4NjUtXFxubW0vdm1zY2FuLmM6Mzg2NjpzdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTM4Njcte1xcbi0tXFxubW0vdm1zY2FuLmMtMzkwMC1cXG5tbS92bXNjYW4uYzozOTAxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxcbm1tL3Ztc2Nhbi5jLTM5MDIte1xcbi0tXFxubW0vdm1zY2FuLmMtMzkyMC1cXG5tbS92bXNjYW4uYzozOTIxOnN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG5tbS92bXNjYW4uYy0zOTIyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MzMtXFxubW0vdm1zY2FuLmM6MzkzNDpzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXFxubW0vdm1zY2FuLmMtMzkzNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTQ2LVxcbm1tL3Ztc2Nhbi5jOjM5NDc6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtMzk0OC17XFxuLS1cXG5tbS92bXNjYW4uYy00MDI4LVxcbm1tL3Ztc2Nhbi5jOjQwMjk6c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtNDAzMC17XFxuLS1cXG5tbS92bXNjYW4uYy00MDgwLVxcbm1tL3Ztc2Nhbi5jOjQwODE6c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtNDA4Mi17XFxuLS1cXG5tbS92bXNjYW4uYy00MTQ1LVxcbm1tL3Ztc2Nhbi5jOjQxNDY6c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtNDE0Ny1cXHRcXHRcXHQgICAgICAgaW50IHN3YXBwaW5lc3MsIGJvb2wgZm9yY2Vfc2NhbilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMDMtXFxubW0vdm1zY2FuLmM6NDIwNDpzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00MjA1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMjktXFxubW0vdm1zY2FuLmM6NDIzMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYy00MjMxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyNDgtXFxubW0vdm1zY2FuLmM6NDI0OTpzdGF0aWMgYm9vbCBscnV2ZWNfaXNfc2l6YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQyNTAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDI2MC1cXG5tbS92bXNjYW4uYzo0MjYxOnN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTQyNjItXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG1pbl90dGwpXFxuLS1cXG5tbS92bXNjYW4uYz00MjgzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTQyODQtXFxubW0vdm1zY2FuLmM6NDI4NTpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQyODYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDMzMS0gKi9cXG5tbS92bXNjYW4uYzo0MzMyOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MzMzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0NTA9ZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy00NDU3LVxcbm1tL3Ztc2Nhbi5jOjQ0NTg6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxubW0vdm1zY2FuLmMtNDQ1OS17XFxuLS1cXG5tbS92bXNjYW4uYy00NTA1LVxcbm1tL3Ztc2Nhbi5jOjQ1MDY6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDUwNy17XFxuLS1cXG5tbS92bXNjYW4uYy00NTMwLVxcbm1tL3Ztc2Nhbi5jOjQ1MzE6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU0MS1cXG5tbS92bXNjYW4uYzo0NTQyOnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjctXFxubW0vdm1zY2FuLmM6NDU2ODp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTY5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NzYtXFxubW0vdm1zY2FuLmM6NDU3Nzpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1Nzgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU4OS1cXG5tbS92bXNjYW4uYzo0NTkwOnN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTQ1OTEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYyMy0gKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTE6MTE6NDEuMzA2MTM3ODE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTY3NzQ3MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgbHJ1X2dlbl9zZXFfd3JpdGVgIGFuZCBpdHMgQ29ubmVjdGlvbnMqKlxuXG5Pa2F5LCBzbyBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgc3RhdGljIGZpbGUgb3BlcmF0aW9uIGhhbmRsZXIg4oCTIEkgZ2V0IHRoYXQuIEJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgVk0gc2Nhbm5pbmcgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRoYXQgYXJlIHNvbWVob3cgcmVsYXRlZCB0byBgbHJ1X2dlbmAgb3IsIG1vcmUgYnJvYWRseSwgdGhlIFZNIHNjYW4gaXRzZWxmLiBJIHN1c3BlY3QgdGhlcmUncyBhIGNvbm5lY3Rpb24sIGFuZCBJIG5lZWQgdG8gbWFwIGl0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbi4gSSdsbCBzY2FuIHRocm91Z2ggaXQgYW5kIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGNhbGwgb3IgYmUgY2FsbGVkIGJ5IHRoaXMgc3RhdGljIGhhbmRsZXIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGUgcmVsYXRpb25zaGlwIGlzIGxpa2VseSB0aGVyZSBhbmQgSSB3aWxsIGZpbmQgdGhlIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY1NSwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjE0LjQ3Mzg4ODIyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NzEwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgW2EtekEtWjAtOV9dK3xedW5zaWduZWQgbG9uZyBbYS16QS1aMC05X10rfF5pbnQgW2EtekEtWjAtOV9dK3xeYm9vbCBbYS16QS1aMC05X10rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIxMj1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy0yMjAtICovXFxubW0vdm1zY2FuLmM6MjIxOmludCB2bV9zd2FwcGluZXNzID0gNjA7XFxubW0vdm1zY2FuLmMtMjIyLVxcbi0tXFxubW0vdm1zY2FuLmM9MzY1PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NC0gKi9cXG5tbS92bXNjYW4uYzozOTU6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3Ztc2Nhbi5jLTM5Ni17XFxuLS1cXG5tbS92bXNjYW4uYy00MTMtICovXFxubW0vdm1zY2FuLmM6NDE0OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcXG5tbS92bXNjYW4uYy00MTUte1xcbi0tXFxubW0vdm1zY2FuLmM9NDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRyb3Bfc2xhYl9ub2RlKGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NDEtXFxubW0vdm1zY2FuLmM6NDQyOnZvaWQgZHJvcF9zbGFiKHZvaWQpXFxubW0vdm1zY2FuLmMtNDQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMz1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMC1cXG5tbS92bXNjYW4uYzo1MzE6dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcXG5tbS92bXNjYW4uYy01MzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNjA0LSAqL1xcbm1tL3Ztc2Nhbi5jOjYwNTp2b2lkIF9fYWNjdF9yZWNsYWltX3dyaXRlYmFjayhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTYwNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgbnJfdGhyb3R0bGVkKVxcbi0tXFxubW0vdm1zY2FuLmM9ODE4PWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy04NDAtICovXFxubW0vdm1zY2FuLmM6ODQxOnZvaWQgZm9saW9fcHV0YmFja19scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy04NDIte1xcbi0tXFxubW0vdm1zY2FuLmM9MTY5OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTgxNS0gKi9cXG5tbS92bXNjYW4uYzoxODE2OmJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS92bXNjYW4uYy0xODE3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIxNzQ9c3RhdGljIHVuc2lnbmVkIGludCByZWNsYWltX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIxOTgtXFxubW0vdm1zY2FuLmM6MjE5OTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS92bXNjYW4uYy0yMjAwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5NDM9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTYxLVxcbm1tL3Ztc2Nhbi5jOjI5NjI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTYzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5ODgtXFxubW0vdm1zY2FuLmM6Mjk4OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5OTAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyOC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmM6MzAyOTp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0zMDMwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyODU9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzMzEtICovXFxubW0vdm1zY2FuLmM6NDMzMjpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDMzMy17XFxuLS1cXG5tbS92bXNjYW4uYz00NDU4PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDUwNS1cXG5tbS92bXNjYW4uYzo0NTA2OnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ1MDcte1xcbi0tXFxubW0vdm1zY2FuLmMtNDUzMC1cXG5tbS92bXNjYW4uYzo0NTMxOnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NTMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NDEtXFxubW0vdm1zY2FuLmM6NDU0Mjp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDU0My17XFxuLS1cXG5tbS92bXNjYW4uYy00NTY3LVxcbm1tL3Ztc2Nhbi5jOjQ1Njg6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDU2OS17XFxuLS1cXG5tbS92bXNjYW4uYy00NTc2LVxcbm1tL3Ztc2Nhbi5jOjQ1Nzc6Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NTc4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1OTA9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19tYXhfc2VxX25vd2FsayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00NjIzLSAqL1xcbm1tL3Ztc2Nhbi5jOjQ2MjQ6dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyNS17XFxuLS1cXG5tbS92bXNjYW4uYz00NjY1PXN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00Njk1LVxcbm1tL3Ztc2Nhbi5jOjQ2OTY6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS92bXNjYW4uYy00Njk3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yb19mb3BzID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNTkzNC1cXG5tbS92bXNjYW4uYzo1OTM1OnZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxubW0vdm1zY2FuLmMtNTkzNi17XFxuLS1cXG5tbS92bXNjYW4uYy01OTQ2LVxcbm1tL3Ztc2Nhbi5jOjU5NDc6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy01OTQ4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NjgtXFxubW0vdm1zY2FuLmM6NTk2OTp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNTk3MC17XFxuLS1cXG5tbS92bXNjYW4uYy01OTc5LVxcbm1tL3Ztc2Nhbi5jOjU5ODA6dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTU5ODEte1xcbi0tXFxubW0vdm1zY2FuLmM9Njc2NT1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NDQtXFxubW0vdm1zY2FuLmM6Njg0NTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02ODQ2LVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4OTAtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY4OTE6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODkyLVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5MzAtXFxubW0vdm1zY2FuLmM6NjkzMTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY5MzItXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NzEtI2Vsc2VcXG5tbS92bXNjYW4uYzo2OTcyOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjk3My1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9NzU2OD1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzY0OC0gKi9cXG5tbS92bXNjYW4uYzo3NjQ5OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzY1MC1cXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NjkzLVxcbm1tL3Ztc2Nhbi5jOjc2OTQ6dm9pZCBrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdCwgZW51bSBrc3dhcGRfY2xlYXJfaG9wZWxlc3NfcmVhc29uIHJlYXNvbilcXG5tbS92bXNjYW4uYy03Njk1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3MDYtICovXFxubW0vdm1zY2FuLmM6NzcwNzp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03NzA4LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NzE0LVxcbm1tL3Ztc2Nhbi5jOjc3MTU6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTc3MTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNzcyOC0gKi9cXG5tbS92bXNjYW4uYzo3NzI5OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc3MzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNzc2MS0gKi9cXG5tbS92bXNjYW4uYzo3NzYyOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcXG5tbS92bXNjYW4uYy03NzYzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3ODUtICovXFxubW0vdm1zY2FuLmM6Nzc4Njp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc3ODcte1xcbi0tXFxubW0vdm1zY2FuLmM9NzgzMj1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NDAtICovXFxubW0vdm1zY2FuLmM6Nzg0MTppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcXG5tbS92bXNjYW4uYy03ODQyLVxcbi0tXFxubW0vdm1zY2FuLmMtNzg1My0gKi9cXG5tbS92bXNjYW4uYzo3ODU0OmludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvID0gMTtcXG5tbS92bXNjYW4uYy03ODU1LVxcbi0tXFxubW0vdm1zY2FuLmMtNzg1OS0gKi9cXG5tbS92bXNjYW4uYzo3ODYwOmludCBzeXNjdGxfbWluX3NsYWJfcmF0aW8gPSA1O1xcbm1tL3Ztc2Nhbi5jLTc4NjEtXFxuLS1cXG5tbS92bXNjYW4uYz03OTA5PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy03OTUxLVxcbm1tL3Ztc2Nhbi5jOjc5NTI6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bXNjYW4uYy03OTUzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMjg9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtODAzMy1cXG5tbS92bXNjYW4uYzo4MDM0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy04MDM1LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNDgtICovXFxubW0vdm1zY2FuLmM6ODE0OTp2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbm1tL3Ztc2Nhbi5jLTgxNTAte1xcbi0tXFxubW0vdm1zY2FuLmM9ODE5Nz1zdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XFxubW0vdm1zY2FuLmM6ODE5ODppbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbm1tL3Ztc2Nhbi5jLTgxOTkte1xcbi0tXFxubW0vdm1zY2FuLmMtODIwMi1cXG5tbS92bXNjYW4uYzo4MjAzOnZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxubW0vdm1zY2FuLmMtODIwNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjE0LjUyNDc2NjQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyODk1ODg3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IHdpdGggTFJVIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhbWF0aW9uOiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtYXhfbHJ1X2dlbl9tZW1jZ2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2dgLCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gU2VlbXMgbGlrZSBhIHdob2xlIGVjb3N5c3RlbSBvZiByZWNsYW1hdGlvbiBzdHJhdGVnaWVzIGlzIGF0IHBsYXkgaGVyZSwgY2VudGVyZWQgYXJvdW5kIHRoaXMgTFJVIGdlbmVyYXRpb24gY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYmVoaW5kIHRoaXMuIERpZ2dpbmcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUsIEkgc2VlIHRoZSBjb3JlIGBjb25maWcgTFJVX0dFTmAgZGVmaW5lZCwgYWxvbmcgd2l0aCBgY29uZmlnIExSVV9HRU5fRU5BQkxFRGAgd2hpY2ggaW1wbGllcyB0aGlzIGlzIGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQuIGBjb25maWcgTFJVX0dFTl9TVEFUU2AgaXMgaW50ZXJlc3RpbmcsIGZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZy4uLiB0aGF0J3MgYWx3YXlzIGhlbHBmdWwuIEFuZCBmaW5hbGx5LCBgY29uZmlnIExSVV9HRU5fV0FMS1NfTU1VYCBpcyBhIHBvaW50IG9mIGNvbmNlcm4gLSB0aGUgTU1VIGludGVyYWN0aW9uIGNhbiBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBsb29raW5nIGF0IHRoZSBhcmNoaXRlY3R1cmUuXG5cbkZpbmFsbHksIEknbSBqdXN0IGN1cmlvdXMgLSBpcyBgQVJDSF9IQVNfUFJFRkVUQ0hXYCBldmVuIGEgY29uZmlnPyBJIHNob3VsZCBncmVwIHRoZSBLY29uZmlnIHRvIGJlIHN1cmUsIGluIGNhc2UgdGhpcyBpbXBhY3RzIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzQ1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjIyLjgxNDM1ODI3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0ODM0NDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19QUkVGRVRDSFdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zNT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTQ0LSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hcXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjQ1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00Ni1cXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTExMT1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTE4LSNpZiBfX0xJTlVYX0FSTV9BUkNIX18gXFx1MDAzZT0gNyBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTVApXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTE5OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTIwLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zOTY9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKnB0cilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNDAwLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NDAxOiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00MDItc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICpwdHIpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xOTk9dW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMjE1LVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIxNjojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIxNy0jZGVmaW5lIHByZWZldGNodyh4KSBfX2J1aWx0aW5fcHJlZmV0Y2goKHgpLCAxLCAxKVxcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTM2MT11bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzg4LVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozODk6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzkwLSNkZWZpbmUgcHJlZmV0Y2h3KHgpIF9fYnVpbHRpbl9wcmVmZXRjaCgoeCksIDEsIDEpXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oPTIzPXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICphZGRyKVxcbi0tXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJlZmV0Y2guaC0zNC0jaWZkZWYgQ09ORklHX1BBMjBcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oOjM1OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJlZmV0Y2guaC0zNi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9Mzk0PWludCB2YWxpZGF0ZV9zcF9zaXplKHVuc2lnbmVkIGxvbmcgc3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC00MDAtI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDo0MDE6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNDAyLVxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xNjk9c3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTE3My1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjE3NDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTc1LXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeClcXG4tLVxcbmFyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmg9MTgxPWV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oLTE4OS0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIXFxuYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaDoxOTA6I2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFdcXG5hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oLTE5MS1cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0Lmg9MTc5PXVuc2lnbmVkIGxvbmcgX19nZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgtMTg5LSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oOjE5MDojZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgtMTkxLVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9NjI0PWV4dGVybiBjaGFyXFx0XFx0XFx0aWdub3JlX2ZwdV9pcnE7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC02MjYtI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVCAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6NjI3OiNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtNjI4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oPTE4PXN0cnVjdCBwYWdlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oLTQxLVxcbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaDo0MjojaWZuZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xcbmluY2x1ZGUvbGludXgvcHJlZmV0Y2guaC00My0jZGVmaW5lIHByZWZldGNodyh4KSBfX2J1aWx0aW5fcHJlZmV0Y2goeCwxKVxcbi0tXFxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xODMtXFxubW0vdm1zY2FuLmM6MTg0OiNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG5tbS92bXNjYW4uYy0xODUtc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMjoyNC42NjI3MTA0OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2OTAyOTc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1HTFJVIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNR0xSVSBwYXRjaCwgYW5kIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIG5vdGluZyB0aGUgZGVmaW5pdGlvbiBvZiBgQVJDSF9IQVNfUFJFRkVUQ0hXYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBwcmVmZXRjaGluZyBvcHRpbWl6YXRpb25zLCBhbmQgd2hlcmUgdGhhdCBsaXZlcyAoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXJzKS4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgb2YgY291cnNlLCBhbmQgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBgTUVNQ0dgIHBsYXlzIGEgcm9sZSBpbiBtZW1jZyBMUlUgZ2VuIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBMUlVfR0VOYDsgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIE1NVSwgYW5kIGl0J3MgY29udGluZ2VudCBvbiBiaXQgYXZhaWxhYmlsaXR5IHdpdGhpbiBgZm9saW8tXHUwMDNlZmxhZ3NgIGFuZCB0aGVuIGVpdGhlciBgNjRCSVRgIG9yIHRoZSBTUEFSU0VNRU0gY29uZmlndXJhdGlvbi4gVGhlIHByZXNlbmNlIG9mIGBMUlVfR0VOX0VOQUJMRURgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgZGVwZW5kaW5nIG9ubHkgb24gYExSVV9HRU5gLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQncyBjbGVhciB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBtb2RpZmljYXRpb25zLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gc2VlaW5nIGFyZSB0aGluZ3MgbGlrZSBgaW5jX21pbl9zZXFgLCBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgZmx1c2hfbHJ1X2JhdGNoYCwgYHByZWZldGNod19wcmV2X2xydV9mb2xpb2AsIGFuZCBgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvYC4gSSBzZWUgdGhhdCB0aGUgY29yZSBMUlUgZ2VuIGZ1bmN0aW9ucyBsaWtlIGBfX2ZvbGlvX2luY19nZW5gLCBgZm9saW9faW5jX2dlbmAsIGBmbHVzaF9scnVfYmF0Y2hgLCBhbmQgYGluY19taW5fc2VxYCBhcmUgYWxsIHN0YXRpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gU28gSSB3aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBJIHNlZSB0aGUgZnVuY3Rpb25zIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYG1heF9scnVfZ2VuX21lbWNnYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi5cblxuVG8gd3JhcCB0aGlzIHVwLCBJIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBnb2luZyB0byB0YWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCBiZWNhdXNlIGl0J3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBNR0xSVSBmb2xpbyBtYW5hZ2VtZW50IGFuZCBMUlUgbGlzdCBtYW5pcHVsYXRpb24gd2l0aGluIGBtbS92bXNjYW4uY2AuIEl0J3MgcmVmYWN0b3JpbmcgYGluY19taW5fc2VxYCB0byBiYXRjaCBMUlUgbGlzdCBtYW5pcHVsYXRpb25zLCB3aGljaCBjYW4gaGF2ZSBpbnRlcmVzdGluZyBlZmZlY3RzLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBgW1wiTFJVX0dFTlwiLCBcIkxSVV9HRU5fRU5BQkxFRFwiXWAuIEZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgW1widXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLCBcIm1heF9scnVfZ2VuX21lbWNnXCIsIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIiwgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsIFwic2hyaW5rX2FsbF9tZW1vcnlcIl1gLiBXaXRoIGFsbCBvZiB0aGlzIGluIGhhbmQsIEkgY2FuIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNTksIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjM3LjM1MzAxMjExMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzA2MTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtYXhfbHJ1X2dlbl9tZW1jZ1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgYWdpbmcgYW5kIGxpc3QgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYy4gU3BlY2lmaWNhbGx5LCBpbmNfbWluX3NlcSBhbmQgZm9saW9faW5jX2dlbiBhcmUgdXBkYXRlZCB0byBiYXRjaCBsaXN0IHNwbGljaW5nICh2aWEgZmx1c2hfbHJ1X2JhdGNoKSBhbmQgZ2VuZXJhdGlvbiBhY2NvdW50aW5nLCBjaGFuZ2luZyBob3cgZm9saW9zIGFyZSBtb3ZlZCBhbmQgdXBkYXRlZCBkdXJpbmcgTFJVIGFnaW5nIGFuZCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1heF9scnVfZ2VuX21lbWNnXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBhZ2luZyBhbmQgbGlzdCBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jLiBTcGVjaWZpY2FsbHksIGluY19taW5fc2VxIGFuZCBmb2xpb19pbmNfZ2VuIGFyZSB1cGRhdGVkIHRvIGJhdGNoIGxpc3Qgc3BsaWNpbmcgKHZpYSBmbHVzaF9scnVfYmF0Y2gpIGFuZCBnZW5lcmF0aW9uIGFjY291bnRpbmcsIGNoYW5naW5nIGhvdyBmb2xpb3MgYXJlIG1vdmVkIGFuZCB1cGRhdGVkIGR1cmluZyBMUlUgYWdpbmcgYW5kIG1lbW9yeSByZWNsYWltLiBUaGlzIGlzIGNvcmUgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEyOjM3LjQzMzMyNzgxNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzMjI4MzcxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMjozNy40MzM4NjE5NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjMyMjI5NzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIChzdHJ1Y3QgZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQsIGFuZCBnZW5lcmF0aW9uIGNvdW50ZXJzL2ZsYWdzKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBnZW5faW5jcmVhc2VkLCBkZWx0YSwgYmF0Y2hfZW5kLCBhbmQgdGhlIG1vdmFibGUgbGlzdCBoZWFkKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN5c2NhbGwvaW9jdGwvc29ja2V0IGJvdW5kYXJpZXMsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbGlua2VkIGxpc3QgY29ycnVwdGlvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgYWNjb3VudGluZyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBDT05GSUdfREVCVUdfTElTVCwgYW5kIGtlcm5lbCBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZDYyOGExMGI5OGY1Zjg0ZmIyNDExZWYzNmViYjliY2RkZmJjN2RlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMTowOTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjc5ZGVmYmI0NGM2ZTQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xODIsMTcgKzE4MiwzNyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiB9O1xuIFxuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpXHRcdFx0XFxcbi1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKChfZm9saW8pLVx1MDAzZWxydS5wcmV2ICE9IF9iYXNlKSB7XHRcdFx0XFxcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKnByZXY7XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjYoX2ZvbGlvLVx1MDAzZWxydSkpO1x0XHRcXFxuLVx0XHRcdHByZWZldGNodyhcdTAwMjZwcmV2LVx1MDAzZV9maWVsZCk7XHRcdFx0XFxcbi1cdFx0fVx0XHRcdFx0XHRcdFx0XFxcbi1cdH0gd2hpbGUgKDApXG4rc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKVxuK3tcbitcdGlmIChmb2xpby1cdTAwM2VscnUucHJldiAhPSBiYXNlKSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqcHJldjtcbitcbitcdFx0cHJldiA9IGxydV90b19mb2xpbyhcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRwcmVmZXRjaHcoXHUwMDI2cHJldi1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfbmV4dF9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbit7XG4rXHRpZiAoZm9saW8tXHUwMDNlbHJ1Lm5leHQgIT0gYmFzZSkge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4rXG4rXHRcdG5leHQgPSBsaXN0X2VudHJ5KGZvbGlvLVx1MDAzZWxydS5uZXh0LCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdHByZWZldGNodyhcdTAwMjZuZXh0LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4gI2Vsc2Vcbi0jZGVmaW5lIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhfZm9saW8sIF9iYXNlLCBfZmllbGQpIGRvIHsgfSB3aGlsZSAoMClcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X25leHRfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTE2OTUsNyArMTcxNSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XG4tXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XG4rXHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjKTtcbiBcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG5AQCAtMzI5NSwyMSArMzMxNSwyMSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gfVxuIFxuLS8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG4tc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuLVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuIFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdGludCBuZXdfZ2VuO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4gXG4gXHRkbyB7XG4gXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4rXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4rXHRcdFx0aWYgKGluY3JlYXNlZClcbitcdFx0XHRcdCppbmNyZWFzZWQgPSBmYWxzZTtcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0fVxuIFxuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuQEAgLTMzMTcsOCArMzMzNywyMiBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0aWYgKGluY3JlYXNlZClcbitcdFx0KmluY3JlYXNlZCA9IHRydWU7XG4rXHRyZXR1cm4gbmV3X2dlbjtcbit9XG4rXG4rLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbitzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK1x0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0Ym9vbCBnZW5faW5jcmVhc2VkO1xuIFxuK1x0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRpZiAoZ2VuX2luY3JlYXNlZClcbitcdFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcdHJldHVybiBuZXdfZ2VuO1xuIH1cbiBcbkBAIC0zODk3LDYgKzM5MzEsMTkgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuIFx0XHRrZnJlZSh3YWxrKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2xydV9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgbGlzdF9oZWFkICoqYmF0Y2hfZW5kLFxuK1x0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0KVxuK3tcbitcdExJU1RfSEVBRChtb3ZhYmxlKTtcbitcbitcdGlmICghKmJhdGNoX2VuZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bGlzdF9jdXRfcG9zaXRpb24oXHUwMDI2bW92YWJsZSwgaGVhZCwgKmJhdGNoX2VuZCk7XG4rXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXHUwMDI2bW92YWJsZSwgZHN0KTtcbitcdCpiYXRjaF9lbmQgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4gXHRpbnQgem9uZTtcbkBAIC0zOTA0LDYgKzM5NTEsNyBAQCBzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0aW50IHRhcmdldF9nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4gXHQvKiBGb3IgZmlsZSB0eXBlLCBza2lwIHRoZSBjaGVjayBpZiBzd2FwcGluZXNzIGlzIGFub24gb25seSAqL1xuIFx0aWYgKHR5cGUgXHUwMDI2XHUwMDI2IChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSlcbkBAIC0zOTEzLDM1ICszOTYxLDYzIEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuIFx0aWYgKCF0eXBlIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzcylcbiBcdFx0Z290byBkb25lO1xuIFxuK1x0Vk1fV0FSTl9PTl9PTkNFKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgb2xkX2dlbikgIT1cbitcdFx0XHRscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIHRhcmdldF9nZW4pKTtcbiBcdC8qIHByZXZlbnQgY29sZC9ob3QgaW52ZXJzaW9uIGlmIHRoZSB0eXBlIGlzIGV2aWN0YWJsZSAqL1xuIFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspIHtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0X2xpc3QgPSBcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tvbGRfZ2VuXVt0eXBlXVt6b25lXTtcbitcdFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gaGVhZC1cdTAwM2VuZXh0O1xuK1x0XHRzdHJ1Y3QgbGlzdF9oZWFkICpiYXRjaF9lbmQgPSBOVUxMO1xuK1x0XHRsb25nIGRlbHRhID0gMDtcbiBcbi1cdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0d2hpbGUgKHBvcyAhPSBoZWFkKSB7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0XHRpbnQgcmVmcyA9IGZvbGlvX2xydV9yZWZzKGZvbGlvKTtcbiBcdFx0XHRib29sIHdvcmtpbmdzZXQgPSBmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGJvb2wgZ2VuX2luY3JlYXNlZDtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAhPSB0eXBlLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTtcbiBcbi1cdFx0XHRuZXdfZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbbmV3X2dlbl1bdHlwZV1bem9uZV0pO1xuK1x0XHRcdHByZWZldGNod19uZXh0X2xydV9mb2xpbyhmb2xpbywgaGVhZCk7XG4rXHRcdFx0cG9zID0gcG9zLVx1MDAzZW5leHQ7XG4rXHRcdFx0bmV3X2dlbiA9IF9fZm9saW9faW5jX2dlbihmb2xpbywgb2xkX2dlbiwgXHUwMDI2Z2VuX2luY3JlYXNlZCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBJZiBnZW5faW5jcmVhc2VkIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHJvbW90aW9uLiBQdXQgZm9saW9zXG4rXHRcdFx0ICogYXQgdGhlIGhlYWQgb2YgdGhlIHByb21vdGVkIGdlbi4gT3RoZXJ3aXNlLCBwdXQgdGhlbSBhdFxuK1x0XHRcdCAqIHRoZSB0YWlsIG9mIHRoZSBzZWNvbmQtb2xkZXN0IGdlbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoZ2VuX2luY3JlYXNlZCkge1xuK1x0XHRcdFx0ZGVsdGEgKz0gbnJfcGFnZXM7XG4rXHRcdFx0XHRiYXRjaF9lbmQgPSBcdTAwMjZmb2xpby1cdTAwM2VscnU7XG4gXG4tXHRcdFx0LyogZG9uJ3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVkICovXG4tXHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4tXHRcdFx0XHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbi1cdFx0XHRcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdFx0XHRcdC8qIGRvbid0IGNvdW50IHRoZSB3b3JraW5nc2V0IGJlaW5nIGxhemlseSBwcm9tb3RlZCAqL1xuK1x0XHRcdFx0aWYgKHJlZnMgKyB3b3JraW5nc2V0ICE9IEJJVChMUlVfUkVGU19XSURUSCkgKyAxKSB7XG4rXHRcdFx0XHRcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xuIFxuLVx0XHRcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdLFxuLVx0XHRcdFx0XHQgICBscnVnZW4tXHUwMDNlcHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXJdICsgZGVsdGEpO1xuK1x0XHRcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sXG4rXHRcdFx0XHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZXByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSArIG5yX3BhZ2VzKTtcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Zmx1c2hfbHJ1X2JhdGNoKGhlYWQsIFx1MDAyNmJhdGNoX2VuZCwgdGFyZ2V0X2xpc3QpO1xuK1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tuZXdfZ2VuXVt0eXBlXVt6b25lXSk7XG4gXHRcdFx0fVxuLVxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRmbHVzaF9scnVfYmF0Y2goaGVhZCwgXHUwMDI2YmF0Y2hfZW5kLCB0YXJnZXRfbGlzdCk7XG4rXG4rXHRcdFdSSVRFX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW29sZF9nZW5dW3R5cGVdW3pvbmVdLFxuK1x0XHRcdCAgIGxydWdlbi1cdTAwM2Vucl9wYWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtIGRlbHRhKTtcbitcdFx0V1JJVEVfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbdGFyZ2V0X2dlbl1bdHlwZV1bem9uZV0sXG4rXHRcdFx0ICAgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW3RhcmdldF9nZW5dW3R5cGVdW3pvbmVdICsgZGVsdGEpO1xuK1x0XHRpZiAoIXJlbWFpbmluZylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gZG9uZTpcbiBcdHJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMToxMjozNy40MzM4NjYzMjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIzMjIyNjg0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBtbS92bXNjYW4uYyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCB0byBgbW0vdm1zY2FuLmNgIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gZmlyZSB1cCB0aGUgS01TQU4gZnV6emluZyBlbmdpbmUgb3IgaWYgS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBmdXp6aW5nIHNldHVwIHdpbGwgZG8gdGhlIHRyaWNrLlxuXG5GaXJzdCwgSSdtIHNlZWluZyBhIHJlZmFjdG9yaW5nIHdpdGggY2hhbmdlcyBhcm91bmQgcHJlZmV0Y2hpbmcgYW5kIHRoZSBMUlUgbGlzdCBtYW5pcHVsYXRpb24uIFNwZWNpZmljYWxseSwgaW5saW5pbmcgYHByZWZldGNod2AgaGVscGVycywgdXBkYXRpbmcgY2FsbHMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AsIHNwbGl0dGluZyBgZm9saW9faW5jX2dlbmAsIGFuZCBiYXRjaGluZyBmb2xpbyBtb3ZlcyB3aXRoIGBmbHVzaF9scnVfYmF0Y2hgIGluIHRoZSBtdWx0aS1nZW4gTFJVIChNR0xSVSkgY29kZS4gV2UncmUgZGVhbGluZyB3aXRoIGxpc3QgbWFuaXB1bGF0aW9uIChgc3RydWN0IGxpc3RfaGVhZGAsIGBmb2xpby1cdTAwM2VscnVgKSwgZm9saW8gZmxhZ3MvZ2VuZXJhdGlvbiB0cmFja2luZyAoYGZvbGlvLVx1MDAzZWZsYWdzLmZgLCBgY21weGNoZ2ApLCBmb2xpbyBhY2NvdW50aW5nIChgbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzYCwgYGxydWdlbi1cdTAwM2Vwcm90ZWN0ZWRgKSwgYW5kIG1lbW9yeSBwcmVmZXRjaGluZyAoYHByZWZldGNod2ApLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mbyBsZWFrcz8gTGV0J3MgY2hlY2sgYWdhaW5zdCBvdXIgS01TQU4gY3JpdGVyaWEuXG5cbjEuICAqKlVzZXItc3BhY2UgaW50ZXJhY3Rpb24/KiogTm8sIG5vdGhpbmcgaGVyZSBpcyB0b3VjaGluZyB1c2VyIHNwYWNlIHZpYSBjb3B5IG9wZXJhdGlvbnMsIHB1dCBvcGVyYXRpb25zLCBuZXRsaW5rLCBpb2N0bHMsIG9yIGFueXRoaW5nIHNpbWlsYXIuIE5vIHdvcnJpZXMgdGhlcmUuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogV2UgaGF2ZSBhIGBib29sIGdlbl9pbmNyZWFzZWRgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gYF9fZm9saW9faW5jX2dlbmAsIGJ1dCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZC4gYGJhdGNoX2VuZGAsIGBwb3NgLCBhbmQgYGRlbHRhYCBhcmUgYWxsIGluaXRpYWxpemVkIGFzIHdlbGwuIFNvLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IGhlcmUgZWl0aGVyLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24/KiogTm8gbmV3IGFsbG9jYXRpb25zLCBzbyB0aGF0J3MgYSBub24taXNzdWUuXG40LiAgKipCb3VuZHMgY2hlY2tzIGFuZCB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vIGNvbmNlcm5zIHdpdGggdGhhdCBoZXJlLlxuXG5TbywgZnJvbSBteSBhc3Nlc3NtZW50LCB0aGVyZSBhcmVuJ3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgaW5mbyBsZWFrcyB0aGF0IG5lY2Vzc2l0YXRlIEtNU0FOLlxuXG5XaGF0IGFib3V0IG90aGVyIGJ1Z3MgdGhhdCBtaWdodCBjcmVlcCBpbj8gTGlzdCBjb3JydXB0aW9uLCBwYWdlIGZsYWcgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBhY2NvdW50aW5nIGltYmFsYW5jZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgYXJlIGFsbCBwb3RlbnRpYWwuIEhvd2V2ZXIsIEtBU0FOIGFuZCBvdXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgbGlrZSBDT05GSUdcXF9ERUJVR1xcX0xJU1QgYW5kIFZNXFxfV0FSTlxcX09OXFxfT05DRSwgYXJlIHdlbGwtc3VpdGVkIHRvIGNhdGNoIHRoZXNlIGlzc3Vlcy4gV2UgY2FuIGFsc28gdXNlIGRhdGEtcmFjZSBkZXRlY3RvcnMuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBsaXN0X2N1dF9wb3NpdGlvbmAgYW5kIGBmbHVzaF9scnVfYmF0Y2hgLCBhcyB0aGV5IGludm9sdmUgbGlzdCBtYW5pcHVsYXRpb24uIEFmdGVyIGEgYnJpZWYgcmV2aWV3LCBpdCBpcyBjbGVhciB0aGF0IHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5TbywgSSB0aGluayB3ZSdyZSBnb29kIHRvIHByb2NlZWQgd2l0aCBzdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTi4gV2UgZG9uJ3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGZvciB0aGlzIHBhdGNoLiBJJ2xsIGdvIGFoZWFkIGFuZCBpbnZva2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDYsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDExOjEzOjI5Ljc1NjEzODk1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhbWF0aW9uIG1lY2hhbmlzbSBpbiBtbS92bXNjYW4uYy4gSXQgb3B0aW1pemVzIHRoZSBnZW5lcmF0aW9uIGluY3JlbWVudCBwYXRoIGFuZCBiYXRjaC1tb3ZlcyBmb2xpb3MgYmV0d2VlbiBMUlUgZ2VuZXJhdGlvbiBsaXN0cyB1c2luZyBsaXN0X2N1dF9wb3NpdGlvbi9saXN0X3NwbGljZV90YWlsX2luaXQsIHJlZmFjdG9ycyBmb2xpb19pbmNfZ2VuIC8gX19mb2xpb19pbmNfZ2VuLCBhbmQgdXBkYXRlcyBwcmVmZXRjaCBoZWxwZXJzLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIChzdHJ1Y3QgZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQsIGFuZCBnZW5lcmF0aW9uIGNvdW50ZXJzL2ZsYWdzKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBnZW5faW5jcmVhc2VkLCBkZWx0YSwgYmF0Y2hfZW5kLCBhbmQgdGhlIG1vdmFibGUgbGlzdCBoZWFkKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIHN5c2NhbGwvaW9jdGwvc29ja2V0IGJvdW5kYXJpZXMsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbGlua2VkIGxpc3QgY29ycnVwdGlvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgYWNjb3VudGluZyBlcnJvcnMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBDT05GSUdfREVCVUdfTElTVCwgYW5kIGtlcm5lbCBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFtYXRpb24gbWVjaGFuaXNtIGluIG1tL3Ztc2Nhbi5jLiBJdCBvcHRpbWl6ZXMgdGhlIGdlbmVyYXRpb24gaW5jcmVtZW50IHBhdGggYW5kIGJhdGNoLW1vdmVzIGZvbGlvcyBiZXR3ZWVuIExSVSBnZW5lcmF0aW9uIGxpc3RzIHVzaW5nIGxpc3RfY3V0X3Bvc2l0aW9uL2xpc3Rfc3BsaWNlX3RhaWxfaW5pdCwgcmVmYWN0b3JzIGZvbGlvX2luY19nZW4gLyBfX2ZvbGlvX2luY19nZW4sIGFuZCB1cGRhdGVzIHByZWZldGNoIGhlbHBlcnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgKHN0cnVjdCBmb2xpbywgc3RydWN0IGxpc3RfaGVhZCwgYW5kIGdlbmVyYXRpb24gY291bnRlcnMvZmxhZ3MpLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGdlbl9pbmNyZWFzZWQsIGRlbHRhLCBiYXRjaF9lbmQsIGFuZCB0aGUgbW92YWJsZSBsaXN0IGhlYWQpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3Mgc3lzY2FsbC9pb2N0bC9zb2NrZXQgYm91bmRhcmllcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsaW5rZWQgbGlzdCBjb3JydXB0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBhY2NvdW50aW5nIGVycm9ycywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIENPTkZJR19ERUJVR19MSVNULCBhbmQga2VybmVsIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[1] Phase: Succeeded StartedAt: 2026-09-02 11:13:41 +0000 UTC FinishedAt: 2026-09-02 11:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 11:13:41 +0000 UTC FinishedAt: 2026-09-02 11:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2] Phase: Succeeded StartedAt: 2026-09-02 11:13:41 +0000 UTC FinishedAt: 2026-09-02 14:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 11:13:41 +0000 UTC FinishedAt: 2026-09-02 14:54:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 11:13:41 +0000 UTC FinishedAt: 2026-09-02 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 11:13:41 +0000 UTC FinishedAt: 2026-09-02 11:13:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow9bpkc/series-workflow9bpkc-convert-artifact-3400802455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 11:13:51 +0000 UTC FinishedAt: 2026-09-02 11:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 11:13:51 +0000 UTC FinishedAt: 2026-09-02 11:29:59 +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:*9a48c68c-ad39-46be-a455-d5442e5f7d1c,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-workflow9bpkc/series-workflow9bpkc-convert-artifact-3400802455/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": "c830793c-e89a-49c3-9f92-fa3463d5987e", "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-workflow9bpkc/series-workflow9bpkc-build-action-2464603629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 11:13:51 +0000 UTC FinishedAt: 2026-09-02 11:29:49 +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:*9a48c68c-ad39-46be-a455-d5442e5f7d1c,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-workflow9bpkc/series-workflow9bpkc-convert-artifact-3400802455/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": "c830793c-e89a-49c3-9f92-fa3463d5987e", "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-workflow9bpkc/series-workflow9bpkc-build-action-2464603629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 11:29:59 +0000 UTC FinishedAt: 2026-09-02 11:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 11:29:59 +0000 UTC FinishedAt: 2026-09-02 11:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 11:29:59 +0000 UTC FinishedAt: 2026-09-02 11:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 11:29:59 +0000 UTC FinishedAt: 2026-09-02 11:30:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow9bpkc/series-workflow9bpkc-convert-artifact-2562645190/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 11:30:10 +0000 UTC FinishedAt: 2026-09-02 11:32:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 11:30:10 +0000 UTC FinishedAt: 2026-09-02 11:31:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c830793c-e89a-49c3-9f92-fa3463d5987e,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-workflow9bpkc/series-workflow9bpkc-build-action-2464603629/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-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 11:32:01 +0000 UTC FinishedAt: 2026-09-02 11:32:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 11:32:01 +0000 UTC FinishedAt: 2026-09-02 11:32:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 11:32:01 +0000 UTC FinishedAt: 2026-09-02 11:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 11:32:01 +0000 UTC FinishedAt: 2026-09-02 11:47:54 +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:*9a48c68c-ad39-46be-a455-d5442e5f7d1c,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-workflow9bpkc/series-workflow9bpkc-convert-artifact-2562645190/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": "71669a1d-64c5-4df2-934d-d39147da2500", "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-workflow9bpkc/series-workflow9bpkc-build-action-3425394698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 11:32:01 +0000 UTC FinishedAt: 2026-09-02 11:47:44 +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:*9a48c68c-ad39-46be-a455-d5442e5f7d1c,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-workflow9bpkc/series-workflow9bpkc-convert-artifact-2562645190/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": "71669a1d-64c5-4df2-934d-d39147da2500", "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-workflow9bpkc/series-workflow9bpkc-build-action-3425394698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 11:47:54 +0000 UTC FinishedAt: 2026-09-02 11:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 11:47:54 +0000 UTC FinishedAt: 2026-09-02 11:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 11:47:54 +0000 UTC FinishedAt: 2026-09-02 11:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 11:47:54 +0000 UTC FinishedAt: 2026-09-02 11:49:33 +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:*71669a1d-64c5-4df2-934d-d39147da2500,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-workflow9bpkc/series-workflow9bpkc-build-action-3425394698/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-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 11:49:43 +0000 UTC FinishedAt: 2026-09-02 14:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 11:49:43 +0000 UTC FinishedAt: 2026-09-02 14:54:27 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},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:*c830793c-e89a-49c3-9f92-fa3463d5987e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*71669a1d-64c5-4df2-934d-d39147da2500,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-workflow9bpkc/series-workflow9bpkc-build-action-2464603629/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-workflow9bpkc/series-workflow9bpkc-build-action-3425394698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 11:49:43 +0000 UTC FinishedAt: 2026-09-02 11:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 11:49:43 +0000 UTC FinishedAt: 2026-09-02 11:49:48 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},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-workflow9bpkc/series-workflow9bpkc-convert-artifact-1380608651/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 11:49:43 +0000 UTC FinishedAt: 2026-09-02 11:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 11:49:43 +0000 UTC FinishedAt: 2026-09-02 11:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 11:49:43 +0000 UTC FinishedAt: 2026-09-02 11:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 11:49:53 +0000 UTC FinishedAt: 2026-09-02 14:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bpkc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["user_proactive_reclaim","max_lru_gen_memcg","try_to_free_pages","try_to_free_mem_cgroup_pages","shrink_all_memory"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"6853fd39-7d06-4e57-bea7-c803137ce3c3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 11:49:53 +0000 UTC FinishedAt: 2026-09-02 14:54:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c830793c-e89a-49c3-9f92-fa3463d5987e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*71669a1d-64c5-4df2-934d-d39147da2500,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-workflow9bpkc/series-workflow9bpkc-build-action-2464603629/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-workflow9bpkc/series-workflow9bpkc-build-action-3425394698/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-workflow9bpkc/series-workflow9bpkc-convert-artifact-1380608651/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,}