Name: series-workflow7nw9g Phase: Succeeded StartedAt: 2026-08-27 20:50:21 +0000 UTC FinishedAt: 2026-08-28 01:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[0] Phase: Succeeded StartedAt: 2026-08-27 20:50:21 +0000 UTC FinishedAt: 2026-08-27 21:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 20:50:21 +0000 UTC FinishedAt: 2026-08-27 21:58:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_TABLES", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_CONNTRACK", "NF_NAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_TABLES", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_CONNTRACK", "NF_NAT" ], "series_id": "57793d8d-a2e1-40f3-aed9-097b32bcff66" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfnl_hook_dump", "nfnl_hook_dump_nat", "nfnl_hook_get", "nf_nat_register_fn", "nf_nat_unregister_fn", "nf_register_net_hook", "nf_unregister_net_hook" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9OQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZm5sX2hvb2tfZHVtcCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZHVtcF9uYXQmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2dldCYjMzQ7LAogICAgJiMzNDtuZl9uYXRfcmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfbmF0X3VucmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfcmVnaXN0ZXJfbmV0X2hvb2smIzM0OywKICAgICYjMzQ7bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbmV0bGluayBkdW1waW5nIG9mIG5ldGZpbHRlciBob29rcyBieSByZXBsYWNpbmcgcG9pbnRlci1iYXNlZCBjb25zaXN0ZW5jeSBjaGVja3Mgd2l0aCBzZXF1ZW5jZSBjb3VudGVycyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIGluIGBzdHJ1Y3QgbmV0bnNfbmZgKS5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcbi0gQWxsIGFkZGVkIGZpZWxkcyBhbmQgbG9jYWwgdmFyaWFibGVzIChgaG9va19iYXNlX3NlcWAsIGBuYXRfaG9va19iYXNlX3NlcWAsIGBiYXNlX3NlcWAsIGBlcnJgLCBgaWAsIGV0Yy4pIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChgbmV0ZmlsdGVyX25ldF9pbml0YCBzZXRzIGJhc2Ugc2VxdWVuY2VzIHRvIDEsIGFuZCBkdW1wIGNhbGxiYWNrcyBwcm9wZXJseSBpbml0aWFsaXplIHN0YWNrIHZhcmlhYmxlcyBhbmQgbmV0bGluayBjYWxsYmFjayBhcmdzKS5cbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgc2xpY2VzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBudW1iZXIgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGFuZCBlbnN1cmUgY29uc2lzdGVuY3kgZHVyaW5nIG5ldGxpbmsgZHVtcHMgb2YgbmV0ZmlsdGVyIGJhc2UgaG9va3MgYW5kIE5BVCBob29rcyB2aWEgbmZuZXRsaW5rX2hvb2suIEl0IGFsdGVycyBsb2NrbGVzcyBpdGVyYXRpb24sIHBhZ2luYXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgZHVtcCBjYWxsYmFja3MsIHdoaWNoIGlzIHVzZXItcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTozNzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5pbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5AQCAtMzMsNSAmIzQzOzMzLDcgQEAgc3RydWN0IG5ldG5zX25mIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpXG4gXHR1bnNpZ25lZCBpbnQgZGVmcmFnX2lwdjZfdXNlcnM7XG4gI2VuZGlmXG4mIzQzO1x0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5hdF9ob29rX2Jhc2Vfc2VxO1xuIH07XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuQEAgLTM4Niw2ICYjNDM7Mzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5mX3N0YXRpY19rZXlfZGVjKGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCBpbnQgcGYpXG4gI2VuZGlmXG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCYjNDM7JiM0MztiYXNlX3NlcSA9PSAwKVxuJiM0MztcdFx0O1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbiB7XG5AQCAtNDI4LDYgJiM0Mzs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRuZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpO1xuIFxuIFx0aWYgKCFJU19FUlIobmV3X2hvb2tzKSkge1xuJiM0MztcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XG4gXHR9XG5AQCAtNTA2LDYgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcbiAjZW5kaWZcbiBcdFx0bmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7XG4mIzQzO1x0XHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXCYjMzQ7LCBwZiwgcmVnLVx1MDAzZWhvb2tudW0pO1xuIFx0fVxuQEAgLTc4NCw2ICYjNDM7Nzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuICNlbmRpZlxuJiM0MztcdG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcbiYjNDM7XHRuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMClcbiYjNDM7XHRcdDtcbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7bmF0LWZvbGxvdy1tYXN0ZXJcJiMzNDssXG4gXHQuZXhwZWN0Zm5cdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXG5AQCAtMTI0NSw4ICYjNDM7MTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0fVxuIFxuIFx0cmV0ID0gbmZfaG9va19lbnRyaWVzX2luc2VydF9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuLVx0aWYgKHJldCA9PSAwKVxuJiM0MztcdGlmIChyZXQgPT0gMCkge1xuJiM0MztcdFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTI4NCw2ICYjNDM7MTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0cHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjtcbiBcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbiYjNDM7XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXG4gXHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG4gXHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbmluZGV4IDk1MDA1ZTlhNjA2NjguLjMxMDEzYzMyMTA5OTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuQEAgLTU0LDcgJiM0Mzs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7XG4gXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xuLVx0dW5zaWduZWQgbG9uZyBoZWFkdjtcbiBcdHU4IGhvb2s7XG4gfTtcbiBcbkBAIC0zMzgsMjcgJiM0MzszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGVcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4tXHRcdFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiB7XG4gXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiYjNDM7XHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzO1xuLVx0aW50IGksIGVycjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMV07XG4mIzQzO1x0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmFzZV9zZXE7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gXG4mIzQzO1x0YmFzZV9zZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4mIzQzO1xuJiM0MztcdGUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiBcdGlmICghZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sXG4tXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSwgc2VxKTtcbiYjNDM7XHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4mIzQzO1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuJiM0MztcdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuJiM0MztcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdH1cbi1cdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVycikge1xuJiM0MztcdFx0aSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdGNiLVx1MDAzZWFyZ3NbMV0gPSBpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2ItXHUwMDNlYXJnc1syXSBcdTAwMjZcdTAwMjYgYmFzZV9zZXEgIT0gY2ItXHUwMDNlYXJnc1syXSkge1xuJiM0MztcdFx0Y2ItXHUwMDNlc2VxJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVyciA9IC1FSU5UUjtcbiYjNDM7XHR9XG4mIzQzO1x0Y2ItXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbkBAIC0zNzMsMzUgJiM0MzszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4gXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMF07XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gXG4gXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbi1cdGlmICghZSlcbiYjNDM7XHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4tXHRpZiAoSVNfRVJSKGUpKSB7XG4tXHRcdGNiLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbi1cbi1cdGlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC1cdTAwM2VoZWFkdiB8fCBpIFx1MDAzZT0gZS1cdTAwM2VudW1faG9va19lbnRyaWVzKVxuLVx0XHRjYi1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuLVxuIFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbiBcdGZvciAoOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChvcHNbaV0tXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXG4tXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSxcbi1cdFx0XHRcdFx0XHQgb3BzW2ldLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjdXItXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbiYjNDM7XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xuJiM0MztcdFx0ZWxzZSB7XG4mIzQzO1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXG4mIzQzO1x0XHRcdFx0XHRcdCBjdXItXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiBcdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gZG9uZTpcbi1cdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4mIzQzO1x0aWYgKG5sc2tiLVx1MDAzZWxlbiBcdTAwM2UgMClcbiYjNDM7XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbkBAIC00NDIsMTAgJiM0Mzs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdHJzY3B5KGN0eC1cdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVx1MDAzZWRldm5hbWUpKTtcbi1cdGN0eC1cdTAwM2VoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7XG4gXHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4tXG4tXHRjYi1cdTAwM2VzZXEgPSAxO1xuIFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiBcbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE3bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9OQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZm5sX2hvb2tfZHVtcCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZHVtcF9uYXQmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2dldCYjMzQ7LAogICAgJiMzNDtuZl9uYXRfcmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfbmF0X3VucmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfcmVnaXN0ZXJfbmV0X2hvb2smIzM0OywKICAgICYjMzQ7bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIG51bWJlciB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBjb25zaXN0ZW5jeSBkdXJpbmcgbmV0bGluayBkdW1wcyBvZiBuZXRmaWx0ZXIgYmFzZSBob29rcyBhbmQgTkFUIGhvb2tzIHZpYSBuZm5ldGxpbmtfaG9vay4gSXQgYWx0ZXJzIGxvY2tsZXNzIGl0ZXJhdGlvbiwgcGFnaW5hdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nIGFjcm9zcyBkdW1wIGNhbGxiYWNrcywgd2hpY2ggaXMgdXNlci1yZWFjaGFibGUgdmlhIG5mbmV0bGluayBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA5MzE3MzlkZjllYzYxODNkYTA2ZmJhOTc4MmEyNTQyYmM0OTMyNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDIxOjM3OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaAppbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaApAQCAtMzMsNSAmIzQzOzMzLDcgQEAgc3RydWN0IG5ldG5zX25mIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9ERUZSQUdfSVBWNikKIAl1bnNpZ25lZCBpbnQgZGVmcmFnX2lwdjZfdXNlcnM7CiAjZW5kaWYKJiM0MzsJdW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7CiYjNDM7CXVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9jb3JlLmMKQEAgLTM4Niw2ICYjNDM7Mzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5mX3N0YXRpY19rZXlfZGVjKGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCBpbnQgcGYpCiAjZW5kaWYKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCYjNDM7JiM0MztiYXNlX3NlcSA9PSAwKQomIzQzOwkJOwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO25ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKQogewpAQCAtNDI4LDYgJiM0Mzs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJbmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTsKIAogCWlmICghSVNfRVJSKG5ld19ob29rcykpIHsKJiM0MzsJCWJ1bXBfaG9va19iYXNlX3NlcShuZXQpOwogCQlob29rc192YWxpZGF0ZShuZXdfaG9va3MpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpOwogCX0KQEAgLTUwNiw2ICYjNDM7NTE2LDcgQEAgc3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCQkJbmV0X2RlY19lZ3Jlc3NfcXVldWUoKTsKICNlbmRpZgogCQluZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTsKJiM0MzsJCWJ1bXBfaG9va19iYXNlX3NlcShuZXQpOwogCX0gZWxzZSB7CiAJCVdBUk5fT05DRSgxLCAmIzM0O2hvb2sgbm90IGZvdW5kLCBwZiAlZCBudW0gJWQmIzM0OywgcGYsIHJlZy0mZ3Q7aG9va251bSk7CiAJfQpAQCAtNzg0LDYgJiM0Mzs3OTUsOCBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmV0ZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogI2VuZGlmCiYjNDM7CW5ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSA9IDE7CiYjNDM7CW5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIHZvaWQgYnVtcF9uYXRfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CXdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMCkKJiM0MzsJCTsKJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7CiAJLm5hbWUJCT0gJiMzNDtuYXQtZm9sbG93LW1hc3RlciYjMzQ7LAogCS5leHBlY3Rmbgk9IG5mX25hdF9mb2xsb3dfbWFzdGVyLApAQCAtMTI0NSw4ICYjNDM7MTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAogCX0KIAogCXJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KCZhbXA7cHJpdi0mZ3Q7ZW50cmllcywgb3BzKTsKLQlpZiAocmV0ID09IDApCiYjNDM7CWlmIChyZXQgPT0gMCkgewomIzQzOwkJYnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpOwogCQluYXRfcHJvdG9fbmV0LSZndDt1c2VycyYjNDM7JiM0Mzs7CiYjNDM7CX0KIAogCW11dGV4X3VubG9jaygmYW1wO25mX25hdF9wcm90b19tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTEyODQsNiAmIzQzOzEyOTUsNyBAQCB2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAogCQlnb3RvIHVubG9jazsKIAlwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2OwogCW5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KCZhbXA7cHJpdi0mZ3Q7ZW50cmllcywgb3BzKTsKJiM0MzsJYnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpOwogCiAJaWYgKG5hdF9wcm90b19uZXQtJmd0O3VzZXJzID09IDApIHsKIAkJbmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCmluZGV4IDk1MDA1ZTlhNjA2NjguLjMxMDEzYzMyMTA5OTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKQEAgLTU0LDcgJiM0Mzs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgewogCWNoYXIgZGV2bmFtZVtJRk5BTVNJWl07Ci0JdW5zaWduZWQgbG9uZyBoZWFkdjsKIAl1OCBob29rOwogfTsKIApAQCAtMzM4LDI3ICYjNDM7MzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlCiB9CiAKIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKLQkJCSAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgZmFtaWx5KQogewogCXN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdiAqcHJpdiA9IG9wcy0mZ3Q7cHJpdjsKLQlzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtJmd0O2VudHJpZXMpOwomIzQzOwlzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItJmd0O2RhdGE7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLSZndDtzayk7CiAJc3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wczsKLQlpbnQgaSwgZXJyOwomIzQzOwl1bnNpZ25lZCBpbnQgaSA9IGNiLSZndDthcmdzWzFdOwomIzQzOwlzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplOwomIzQzOwl1bnNpZ25lZCBpbnQgYmFzZV9zZXE7CiYjNDM7CWludCBlcnIgPSAwOwogCiYjNDM7CWJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO25ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwllID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtJmd0O2VudHJpZXMpOwogCWlmICghZSkKIAkJcmV0dXJuIDA7CiAKIAluYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSwKLQkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwgc2VxKTsKJiM0MzsJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsCiYjNDM7CQkJCQkgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLAomIzQzOwkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKJiM0MzsJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCQlicmVhazsKJiM0MzsKIAl9Ci0JcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghZXJyKSB7CiYjNDM7CQlpID0gMDsKJiM0MzsJfQomIzQzOwljYi0mZ3Q7YXJnc1sxXSA9IGk7CiYjNDM7CiYjNDM7CWlmIChjYi0mZ3Q7YXJnc1syXSAmYW1wOyZhbXA7IGJhc2Vfc2VxICE9IGNiLSZndDthcmdzWzJdKSB7CiYjNDM7CQljYi0mZ3Q7c2VxJiM0MzsmIzQzOzsKJiM0MzsJCWVyciA9IC1FSU5UUjsKJiM0MzsJfQomIzQzOwljYi0mZ3Q7YXJnc1syXSA9IGJhc2Vfc2VxOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYiwKQEAgLTM3MywzNSAmIzQzOzM5MywzMSBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYiwKIAl1bnNpZ25lZCBpbnQgaSA9IGNiLSZndDthcmdzWzBdOwogCiAJcmN1X3JlYWRfbG9jaygpOwomIzQzOwljYi0mZ3Q7c2VxID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO25ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSk7CiAKIAllID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC0mZ3Q7aG9vaywgbmV0LCBjdHgtJmd0O2Rldm5hbWUpOwotCWlmICghZSkKJiM0MzsJaWYgKCFlIHx8IElTX0VSUihlKSkKIAkJZ290byBkb25lOwogCi0JaWYgKElTX0VSUihlKSkgewotCQljYi0mZ3Q7c2VxJiM0MzsmIzQzOzsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC0mZ3Q7aGVhZHYgfHwgaSAmZ3Q7PSBlLSZndDtudW1faG9va19lbnRyaWVzKQotCQljYi0mZ3Q7c2VxJiM0MzsmIzQzOzsKLQogCW9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7CiAKIAlmb3IgKDsgaSAmbHQ7IGUtJmd0O251bV9ob29rX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChvcHNbaV0tJmd0O2hvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpCi0JCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksCi0JCQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKLQkJZWxzZQotCQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSwKLQkJCQkJCSBvcHNbaV0tJmd0O3ByaW9yaXR5LCBmYW1pbHksCiYjNDM7CQljb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pOwomIzQzOwomIzQzOwkJaWYgKGN1ci0mZ3Q7aG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVCkKJiM0MzsJCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7CiYjNDM7CQllbHNlIHsKJiM0MzsJCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLAomIzQzOwkJCQkJCSBjdXItJmd0O3ByaW9yaXR5LCBmYW1pbHksCiAJCQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKJiM0MzsJCX0KIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAogZG9uZToKLQlubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpOwomIzQzOwlpZiAobmxza2ItJmd0O2xlbiAmZ3Q7IDApCiYjNDM7CQlubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWNiLSZndDthcmdzWzBdID0gaTsKIAlyZXR1cm4gbmxza2ItJmd0O2xlbjsKQEAgLTQ0MiwxMCAmIzQzOzQ1OCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXN0cnNjcHkoY3R4LSZndDtkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LSZndDtkZXZuYW1lKSk7Ci0JY3R4LSZndDtoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7CiAJY3R4LSZndDtob29rID0gaG9va251bTsKLQotCWNiLSZndDtzZXEgPSAxOwogCWNiLSZndDtkYXRhID0gY3R4OwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gTXkgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0byBsb29rIGF0IHRoZSB0b3VjaGVkIGZpbGVzLiBBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgc2VlaW5nOiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLCBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgd2hhdCYjMzk7cyB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2luZyo/IEFoLCBpdCBhcHBlYXJzIHRvIGJlIHRyYWNraW5nIHNlcXVlbmNlIG51bWJlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIG5ldGZpbHRlciBhbmQgTkFUIGhvb2tzLiBJbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpbiBgbmZuZXRsaW5rX2hvb2suY2AsIGBuZm5sX2hvb2tfZHVtcGAgYW5kIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGFyZSB1c2luZyBgY2ItJmd0O3NlcWAgYW5kIGBiYXNlX3NlcWAgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2hlbiBkdW1waW5nIG5ldGZpbHRlciBob29rcyBvdmVyIG5ldGxpbmsuIFBsdXMsIGl0IHNlZW1zIHRvIGJlIGZpeGluZyBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGl0ZXJhdGluZyBhbmQgcmVzdW1pbmcgYWNyb3NzIG5ldGxpbmsgZHVtcHMgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCByYWNlcywgd2hpY2ggSSYjMzk7dmUgc2VlbiBiZSBhIGdvb2Qgc3BvdCBmb3IgZnV6emluZy4KCk15IG5leHQgbW92ZSBpcyBhbHdheXMgdG8gZXhhbWluZSB0aGUgY29kZSBhbmQgYEtjb25maWdgIG9wdGlvbnMgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgc3Vic3lzdGVtIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBwcm9iYWJseSByZWFjaCBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBjb250ZXh0IGFuZCBlbnRyeSBwb2ludHMgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX05FVExJTktfSE9PSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjoKCioqRmluZGluZyB0aGUgU291cmNlIG9mIHRoZSBIb29rKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgbmZuZXRsaW5rX2hvb2suY2AgZmlsZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGZvciBhbnl0aGluZyBuZXR3b3JrIGZpbHRlcmluZyByZWxhdGVkLiBCdXQgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVzdCBzdGFydCBwb2tpbmcgYXJvdW5kLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgaXQgc3lzdGVtYXRpY2FsbHkuCgpXaGVyZSB3b3VsZCBJIG5vcm1hbGx5IGxvb2s/IE1ha2VmaWxlISBZZWFoLCB0aGF0JiMzOTtzIGl0LiBUaGF0IGlzIHRoZSBwbGFjZSB3aGVyZSBhbGwgdGhlIG90aGVyIG9iamVjdHMgYXJlIGRlZmluZWQuCkl0JiMzOTtzIGxpa2VseSBsaXN0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBIb3BlZnVsbHksIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGluY2x1c2lvbiwgYnV0IGV2ZW4gaWYgaXQmIzM5O3MgcmVmZXJlbmNlZCB0aHJvdWdoIHNvbWUgaW5kaXJlY3QgZGVwZW5kZW5jeSwgdGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgYnVpbGQgcHJvY2Vzcy4gQWxyaWdodCwgbGV0JiMzOTtzIGdldCB0byBpdC4gVGltZSB0byBncmVwIHRocm91Z2ggdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19PU0YpICYjNDM7PSBuZm5ldGxpbmtfb3NmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICYjNDM7PSBuZm5ldGxpbmtfaG9vay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTMyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTIyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz01MTE9TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0hPT0spO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxMi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MTM6c3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2hvb2tfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxNC17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxNy1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MTg6c3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19ob29rX2V4aXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MjItXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NTIzOm1vZHVsZV9pbml0KG5mbmV0bGlua19ob29rX2luaXQpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjUyNDptb2R1bGVfZXhpdChuZm5ldGxpbmtfaG9va19leGl0KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MjUtXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTUyNz1NT0RVTEVfQVVUSE9SKFwmIzM0O0Zsb3JpYW4gV2VzdHBoYWwgXHUwMDNjZndAc3RybGVuLmRlXHUwMDNlXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1Mjg6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBvZiBteSBvd24gaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIERpdmUgZm9yIE5ldGZpbHRlciBOZXRsaW5rIEhvb2tzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOZXRmaWx0ZXIgTmV0bGluayBIb29rIGZ1bmN0aW9uYWxpdHkuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0tgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRhcmdldCwgdGhlIGtleSBJIG5lZWQgdG8gdHVybiB0byB1bmxvY2sgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgY2FwYWJpbGl0aWVzLiBCdXQsIGl0JiMzOTtzIG5ldmVyIGp1c3QgdGhhdCBzaW1wbGUsIGlzIGl0PwoKSSBrbm93IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl04oCZcyBlbmFibGVkIGRpcmVjdGx5LCBzbyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGVzPyBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIHVuZGVybHlpbmcgY29tcG9uZW50cyAqbXVzdCogYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiBzZWUgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LYCBhcyBhbiBvcHRpb24sIGxldCBhbG9uZSBlbmFibGUgaXQgbXlzZWxmPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBLY29uZmlnIGhpZXJhcmNoeSwgdW5kZXJzdGFuZGluZyB0aGUgbG9naWNhbCBnYXRlcyBhbmQgZ3VhcmRyYWlscyB0aGF0IGNvbnRyb2wgdGhlIHZpc2liaWxpdHkgYW5kIGF2YWlsYWJpbGl0eSBvZiB0aGlzIHNwZWNpZmljIGNvbmZpZyBvcHRpb24uIFRoaXMgaXMgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnN0cmFpbnRzKiBhbmQgdGhlICpwYXRod2F5cyouIEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgZW5hYmxpbmcgdHJlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTMzPWNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgYXJvdW5kIGxpbmUgMzYuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV0ZmlsdGVyIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gSeKAmW0gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZm9yIHNvbWUgb2YgdGhlIGZpbHRlcmluZyBydWxlcyBpcyBkZWZpbmVkLiBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyBhIHNwZWNpZmljIG5ldHdvcmsgcGFja2V0IGlzIHByb2Nlc3NlZCBhbmQgd2hpY2ggcnVsZXMgaXQgZ29lcyB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMjg6XHRcdGJvb2xcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcbiAgMzE6XHRcdGJvb2xcbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4gIDM0Olx0XHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgMzk6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gIDQwOlx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNDE6XHRcdGhlbHBcbiAgNDI6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA0MzpcdFx0ICB0byBsaXN0IHRoZSBiYXNlIG5ldGZpbHRlciBob29rcyB2aWEgTkZORVRMSU5LLlxuICA0NDpcdFx0ICBUaGlzIGlzIGhlbHBmdWwgZm9yIGRlYnVnZ2luZy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxuICA0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GQUNDVCBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDQ5Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA1MjpcdFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxuICA1MzpcdFxuICA1NDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuICA1NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDU2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICA1NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDU4Olx0XHRoZWxwXG4gIDU5Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNjA6XHRcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG4gIDYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA2NDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBORl9OQVQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGVhc3kgdG8gZ2V0IGNhdWdodCB1cCBpbiB0aGUgaGlnaC1sZXZlbCBzdHVmZiwgYnV0IHRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGVzcGVjaWFsbHkgd2l0aCBOQVQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb21waWxhdGlvbiBwYXRoIGZvciBgbmZfbmF0X3JlZ2lzdGVyX2ZuYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhhdCBmdW5jdGlvbiBiYWNrIHRvIHdoZXJlIGl0JiMzOTtzIGNvbXBpbGVkLCB3aGljaCBJIHN0cm9uZ2x5IHN1c3BlY3Qgd2lsbCBiZSBpbiBgbmZfbmF0X2NvcmUuY2AuIEtub3dpbmcgdGhlIGJ1aWxkIHByb2Nlc3Mgd2lsbCByZWFsbHkgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGFuZCBsaW5rZWQuIE5vIHN0b25lIHVudHVybmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9uYXRfY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFApICYjNDM7PSBuZl9jb25udHJhY2tfdGZ0cC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTU1LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1NjpuZl9uYXQteVx0Oj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfcHJvdG8ubyBuZl9uYXRfaGVscGVyLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTctXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE4Ny0jaWZuZGVmIE1PRFVMRVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjExODg6XHQvKiBJZiBuZl9uYXRfY29yZSBpcyBidWlsdC1pbiBhbmQgbmZfbmF0X2luaXQoKSBmYWlscywgZGVwZW5kZW50XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE4OS1cdCAqIG1vZHVsZXMgbGlrZSBuZnRfY2hhaW5fbmF0LmtvIG1heSBzdGlsbCBjYWxsIHRoaXMgZnVuY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5IGFuZCBzcGVjaWZpY2FsbHkgbGluZSA1NiBpbiB0aGUgYE1ha2VmaWxlYC4gVGhhdCBsaW5lIGlzIHRoZSB0YXJnZXQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSBrbm93IEkmIzM5O20gaW50ZXJlc3RlZCBpbiBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyB0aGUgTWFrZWZpbGUgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gbGlrZWx5IGxvb2tpbmcgZm9yIGhvdyBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNvbXBvbmVudCB3aXRoaW4gbmV0ZmlsdGVyIGlzIGNvbXBpbGVkLCBsaW5rZWQsIG9yIGluY2x1ZGVkLiBQZXJoYXBzIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGFkZCBhIG5ldyBydWxlLCBkZWJ1ZyBhIHByb2JsZW0sIG9yIHVuZGVyc3RhbmQgc29tZSBidWlsZC10aW1lIGZsYWcuIExpbmUgNTYgaXMgdGhlIGNyaXRpY2FsIHBvaW50IGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBzdGFydCB0byBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBuZXRmaWx0ZXImIzM5O3MgaW5uZXIgd29ya2luZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICYjNDM7PSBuZl9jb25udHJhY2tfc25tcC5vXG4gIDUxOlx0b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19QUFRQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3BwdHAub1xuICA1MjpcdG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSkgJiM0Mzs9IG5mX2Nvbm50cmFja19zYW5lLm9cbiAgNTM6XHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19zaXAub1xuICA1NDpcdG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja190ZnRwLm9cbiAgNTU6XHRcbiAgNTY6XHRuZl9uYXQteVx0Oj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfcHJvdG8ubyBuZl9uYXRfaGVscGVyLm9cbiAgNTc6XHRcbiAgNTg6XHRvYmotJChDT05GSUdfTkZfTE9HX1NZU0xPRykgJiM0Mzs9IG5mX2xvZ19zeXNsb2cub1xuICA1OTpcdFxuICA2MDpcdG9iai0kKENPTkZJR19ORl9OQVQpICYjNDM7PSBuZl9uYXQub1xuICA2MTpcdG5mX25hdC0kKENPTkZJR19ORl9OQVRfUkVESVJFQ1QpICYjNDM7PSBuZl9uYXRfcmVkaXJlY3Qub1xuICA2MjpcdG5mX25hdC0kKENPTkZJR19ORl9OQVRfTUFTUVVFUkFERSkgJiM0Mzs9IG5mX25hdF9tYXNxdWVyYWRlLm9cbiAgNjM6XHRuZl9uYXQtJChDT05GSUdfTkZfTkFUX09WUykgJiM0Mzs9IG5mX25hdF9vdnMub1xuICA2NDpcdFxuICA2NTpcdGlmZXEgKCQoQ09ORklHX05GX05BVCksbSlcbiAgNjY6XHRuZl9uYXQtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgJiM0Mzs9IG5mX25hdF9icGYub1xuICA2NzpcdGVsc2UgaWZlcSAoJChDT05GSUdfTkZfTkFUKSx5KVxuICA2ODpcdG5mX25hdC0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX25hdF9icGYub1xuICA2OTpcdGVuZGlmXG4gIDcwOlx0XG4gIDcxOlx0IyBOQVQgaGVscGVyc1xuICA3MjpcdG9iai0kKENPTkZJR19ORl9OQVRfQU1BTkRBKSAmIzQzOz0gbmZfbmF0X2FtYW5kYS5vXG4gIDczOlx0b2JqLSQoQ09ORklHX05GX05BVF9GVFApICYjNDM7PSBuZl9uYXRfZnRwLm9cbiAgNzQ6XHRvYmotJChDT05GSUdfTkZfTkFUX0lSQykgJiM0Mzs9IG5mX25hdF9pcmMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgSG9vayBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgTmV0ZmlsdGVyIGhvb2tzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgdGhlIE5ldGxpbmsgaW50ZXJmYWNlLiBSaWdodCwgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgcmVnaXN0cmF0aW9uIGFuZCBkaXNwYXRjaGluZyBtZWNoYW5pc21zLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHRoZSBvdmVyYWxsIGZsb3cgb2YgaG93IE5ldGxpbmsgbWVzc2FnZXMgZ2V0IHByb2Nlc3NlZCBhbmQgdWx0aW1hdGVseSBwYXNzZWQgdG8gdGhlIHJlZ2lzdGVyZWQgaG9vayBmdW5jdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBuZXRsaW5rIG1lc3NhZ2UgaGFuZGxlcnMsIHRoZSBob29rIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zLCBhbmQgaG93IHRoZSBwYXlsb2FkIGlzIGFjdHVhbGx5IHBhc3NlZCB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgbGF5ZXJzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBmb3IgbGF0ZXIuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBjb2RlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHRnb3RvIGRvbmU7XG4gNDAxOlx0XG4gNDAyOlx0XHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA0MDU6XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuIDQwODpcdFx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiA0MDk6XHRcdFx0ZWxzZSB7XG4gNDEwOlx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbiA0MTE6XHRcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gNDEyOlx0XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDQxMzpcdFx0XHR9XG4gNDE0Olx0XHRcdGlmIChlcnIpXG4gNDE1Olx0XHRcdFx0YnJlYWs7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0ZG9uZTpcbiA0MTk6XHRcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4gNDIwOlx0XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gNDIxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA0MjI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIDQyMzpcdFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDI3Olx0e1xuIDQyODpcdFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbiA0Mjk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXHUwMDNlZGF0YTtcbiA0MzA6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xuIDQzMTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbiA0MzI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiA0MzM6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcJiMzNDtcJiMzNDs7XG4gNDM0Olx0XHRjb25zdCB2b2lkICpoZWFkO1xuIDQzNTpcdFx0dTMyIGhvb2tudW07XG4gNDM2Olx0XG4gNDM3Olx0XHRob29rbnVtID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYVtORk5MQV9IT09LX0hPT0tOVU1dKSk7XG4gNDM4Olx0XHRpZiAoaG9va251bSBcdTAwM2UgMjU1KVxuIDQzOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDA6XHRcbiA0NDE6XHRcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19ORVRERVYpIHtcbiA0NDI6XHRcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19ERVZdKVxuIDQ0MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0XHRubGFfc3Ryc2NweShuYW1lLCBubGFbTkZOTEFfSE9PS19ERVZdLCBzaXplb2YobmFtZSkpO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdFxuIDQ0ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDQ0OTpcdFx0LyogTm90IGRlcmVmZXJlbmNlZDsgZm9yIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgKi9cbiA0NTA6XHRcdGhlYWQgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgaG9va251bSwgbmV0LCBuYW1lKTtcbiA0NTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDQ1MjpcdFxuIDQ1MzpcdFx0aWYgKGhlYWQgXHUwMDI2XHUwMDI2IElTX0VSUihoZWFkKSlcbiA0NTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoaGVhZCk7XG4gNDU1Olx0XG4gNDU2Olx0XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiA0NTc6XHRcdGlmICghY3R4KVxuIDQ1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0NTk6XHRcbiA0NjA6XHRcdHN0cnNjcHkoY3R4LVx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXHUwMDNlZGV2bmFtZSkpO1xuIDQ2MTpcdFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuIDQ2MjpcdFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiA0NjM6XHRcbiA0NjQ6XHRcdHJldHVybiAwO1xuIDQ2NTpcdH1cbiA0NjY6XHRcbiA0Njc6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0b3Aoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDQ2ODpcdHtcbiA0Njk6XHRcdGtmcmVlKGNiLVx1MDAzZWRhdGEpO1xuIDQ3MDpcdFx0cmV0dXJuIDA7XG4gNDcxOlx0fVxuIDQ3MjpcdFxuIDQ3MzpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDQ3NDpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIDQ3NTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4gNDc2Olx0e1xuIDQ3NzpcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcbiA0Nzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDc5Olx0XG4gNDgwOlx0XHRpZiAoaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfZmxhZ3MgXHUwMDI2IE5MTV9GX0RVTVApIHtcbiA0ODE6XHRcdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG4gNDgyOlx0XHRcdFx0LnN0YXJ0ID0gbmZubF9ob29rX2R1bXBfc3RhcnQsXG4gNDgzOlx0XHRcdFx0LmRvbmUgPSBuZm5sX2hvb2tfZHVtcF9zdG9wLFxuIDQ4NDpcdFx0XHRcdC5kdW1wID0gbmZubF9ob29rX2R1bXAsXG4gNDg1Olx0XHRcdFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxuIDQ4NjpcdFx0XHRcdC5kYXRhID0gKHZvaWQgKilubGEsXG4gNDg3Olx0XHRcdH07XG4gNDg4Olx0XG4gNDg5Olx0XHRcdHJldHVybiBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KGluZm8tXHUwMDNlc2ssIHNrYiwgaW5mby1cdTAwM2VubGgsIFx1MDAyNmMpO1xuIDQ5MDpcdFx0fVxuIDQ5MTpcdFxuIDQ5MjpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDQ5MzpcdH1cbiA0OTQ6XHRcbiA0OTU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9ob29rX2NiW05GTkxfTVNHX0hPT0tfTUFYXSA9IHtcbiA0OTY6XHRcdFtORk5MX01TR19IT09LX0dFVF0gPSB7XG4gNDk3Olx0XHRcdC5jYWxsXHRcdD0gbmZubF9ob29rX2dldCxcbiA0OTg6XHRcdFx0LnR5cGVcdFx0PSBORk5MX0NCX1JDVSxcbiA0OTk6XHRcdFx0LmF0dHJfY291bnRcdD0gTkZOTEFfSE9PS19NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzEyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgcGFydGljdWxhciBjb2RlOgoKKipEaXZpbmcgaW50byBuZm5ldGxpbmtfaG9vay5jKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlc3Qgb2YgYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIG5ldGZpbHRlciBob29rcyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYXQgdGhlIG5ldGxpbmsgbGV2ZWwuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBoaWdoLWxldmVsIGNvbmNlcHRzLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgYmVpbmcgdXNlZD8gSG93IGFyZSB0aGUgaG9va3MgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgbmV0bGluayBjb21tdW5pY2F0aW9uIGxheWVyLiBJIHdhbnQgdG8gbG9vayBmb3IgZGV0YWlscyBvbiBob3cgdGhlIGhvb2sgZnVuY3Rpb25zIGFyZSBjaGFpbmVkIGFuZCBob3cgdGhlIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgYW5kIHRyYW5zbWl0dGVkLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGZsb3csIGZyb20gdGhlIGtlcm5lbCBtb2R1bGUmIzM5O3MgcGVyc3BlY3RpdmUuIEl0JiMzOTtzIHRpbWUgdG8gc2VlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9ob29rX2NiW05GTkxfTVNHX0hPT0tfTUFYXSA9IHtcbiA0OTY6XHRcdFtORk5MX01TR19IT09LX0dFVF0gPSB7XG4gNDk3Olx0XHRcdC5jYWxsXHRcdD0gbmZubF9ob29rX2dldCxcbiA0OTg6XHRcdFx0LnR5cGVcdFx0PSBORk5MX0NCX1JDVSxcbiA0OTk6XHRcdFx0LmF0dHJfY291bnRcdD0gTkZOTEFfSE9PS19NQVgsXG4gNTAwOlx0XHRcdC5wb2xpY3lcdFx0PSBuZm5sX2hvb2tfbmxhX3BvbGljeVxuIDUwMTpcdFx0fSxcbiA1MDI6XHR9O1xuIDUwMzpcdFxuIDUwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSBuZmhvb2tfc3Vic3lzID0ge1xuIDUwNTpcdFx0Lm5hbWVcdFx0XHRcdD0gXCYjMzQ7bmZob29rXCYjMzQ7LFxuIDUwNjpcdFx0LnN1YnN5c19pZFx0XHRcdD0gTkZOTF9TVUJTWVNfSE9PSyxcbiA1MDc6XHRcdC5jYl9jb3VudFx0XHRcdD0gTkZOTF9NU0dfSE9PS19NQVgsXG4gNTA4Olx0XHQuY2JcdFx0XHRcdD0gbmZubF9ob29rX2NiLFxuIDUwOTpcdH07XG4gNTEwOlx0XG4gNTExOlx0TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0hPT0spO1xuIDUxMjpcdFxuIDUxMzpcdHN0YXRpYyBpbnQgX19pbml0IG5mbmV0bGlua19ob29rX2luaXQodm9pZClcbiA1MTQ6XHR7XG4gNTE1Olx0XHRyZXR1cm4gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcdTAwMjZuZmhvb2tfc3Vic3lzKTtcbiA1MTY6XHR9XG4gNTE3Olx0XG4gNTE4Olx0c3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19ob29rX2V4aXQodm9pZClcbiA1MTk6XHR7XG4gNTIwOlx0XHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXHUwMDI2bmZob29rX3N1YnN5cyk7XG4gNTIxOlx0fVxuIDUyMjpcdFxuIDUyMzpcdG1vZHVsZV9pbml0KG5mbmV0bGlua19ob29rX2luaXQpO1xuIDUyNDpcdG1vZHVsZV9leGl0KG5mbmV0bGlua19ob29rX2V4aXQpO1xuIDUyNTpcdFxuIDUyNjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gNTI3Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtGbG9yaWFuIFdlc3RwaGFsIFx1MDAzY2Z3QHN0cmxlbi5kZVx1MDAzZVwmIzM0Oyk7XG4gNTI4Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LiBGaXJzdCwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4gSXQmIzM5O3MgdG91Y2hpbmcgbmV0ZmlsdGVyIGhvb2sgc2VxdWVuY2UgdHJhY2tpbmcsIGltcGxlbWVudGluZyBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gdXNpbmcgYFJFQURfT05DRWAsIGBzbXBfbG9hZF9hY3F1aXJlYCwgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAgZHVyaW5nIG5ldGxpbmsgZHVtcGluZyBvZiBob29rcywgYW5kIE5BVCBob29rcywgcGFnaW5hdGlvbi9hcmdzIGhhbmRsaW5nIGFjcm9zcyBkdW1wIGNhbGxzLCBhbmQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggYG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudGAuIENydWNpYWxseSwgdGhpcyBuZXRmaWx0ZXIgaG9vayBkdW1wIGlzIHVzZXItdHJpZ2dlcmFibGUgdmlhIHRoZSBgbmZuZXRsaW5rYCBzb2NrZXQgKEFGX05FVExJTksgd2l0aCB0aGUgTkVUTElOS19ORVRGSUxURVIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYE5GTkxfU1VCU1lTX0hPT0tgKS4gVGhpcyBraW5kIG9mIGFjY2VzcyBpcyByaWdodCB1cCBvdXIgYWxsZXkg4oCTIGNvcmUgbmV0ZmlsdGVyL25mbmV0bGluayBjb2RlLCByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gVGhhdCBhbG9uZSBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LgoKTm93LCB3aGljaCBzeW1ib2xzIHNob3VsZCBiZSBvdXIgZm9jdXM/IExldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IHBsYXllcnMuIFdlJiMzOTt2ZSBnb3QgYG5mbmxfaG9va19nZXRgLCBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYG5mX25hdF9yZWdpc3Rlcl9mbmAsIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAsIGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AsIGFuZCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuCgpIYW5nIG9uLCB3ZSBuZWVkIHRvIGNsYXJpZnkgd2hhdCB0aGUgKmVudHJ5cG9pbnRzKiBhcmUsIGFuZCB3aGF0IGlzbiYjMzk7dCBzdGF0aWMuIGBuZm5sX2hvb2tfZ2V0YCBpcyBzdGF0aWMsIHJlZmVyZW5jZWQgd2l0aGluIGBuZm5sX2hvb2tfY2JgLiBUaGF0JiMzOTtzIGxlc3MgaWRlYWwsIHRob3VnaCBzeXprYWxsZXIgY2FuIHN0aWxsIHdvcmsgd2l0aCBpdCBpZiBpdCYjMzk7cyBub3QgaW5saW5lZC4gYG5mX25hdF9yZWdpc3Rlcl9mbmAgYW5kIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIGZyb20gYG5mX25hdF9jb3JlLmNgLiBTYW1lIHdpdGggYG5mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgIGZvdW5kIGluIGBjb3JlLmNgLiBJbiBgbmZuZXRsaW5rX2hvb2suY2AsIHdlJiMzOTt2ZSBnb3QgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGFuZCBgbmZubF9ob29rX2dldGAuICBJZGVhbGx5LCB3ZSYjMzk7cmUgbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sLCBlc3BlY2lhbGx5IG5vbi1zdGF0aWMgb3IgZW50cnlwb2ludHMuIFRoZXNlIGFyZSBpZGVhbCBmb3Igc3l6a2FsbGVyIEtDT1YgYW5kIGZvY3VzIHN5bWJvbCB0YXJnZXRpbmcuIFRoaXMgcG9pbnRzIHVzIHJpZ2h0IGJhY2sgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYG5mbmxfaG9va19nZXRgLCBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYG5mX25hdF9yZWdpc3Rlcl9mbmAsIGFuZCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AgaXMgaW5kZWVkIGluIGBjb3JlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9jb3JlLmM9Mzg5PXN0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtMzk3LVxubmV0L25ldGZpbHRlci9jb3JlLmM6Mzk4OnN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTM5OS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmM9NTU5PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2MC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU2MTppbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2Mi17XG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTY2LVx0XHRpZiAocmVnLVx1MDAzZWhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKSB7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1Njc6XHRcdFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSU5FVCwgcmVnKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2OC1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU3MC1cdFx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU3MTpcdFx0XHRlcnIgPSBfX25mX3JlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY0LCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTcyLVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTc0LVxubmV0L25ldGZpbHRlci9jb3JlLmM6NTc1Olx0XHRcdGVyciA9IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lQVjYsIHJlZyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzYtXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU4MS1cdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1ODI6XHRcdGVyciA9IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCByZWctXHUwMDNlcGYsIHJlZyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01ODMtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTg4LX1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU4OTpFWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX25ldF9ob29rKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU5MC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU5MTppbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTItXHRcdFx0ICB1bnNpZ25lZCBpbnQgbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTk4Olx0XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFx1MDAyNnJlZ1tpXSk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTktXHRcdGlmIChlcnIpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNjA4LX1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjYwOTpFWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX25ldF9ob29rcyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yNDIyPWludCBpcF92c19yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGFmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0My1cdGlmICghKGlwdnMtXHUwMDNlaG9va3NfYWZtYXNrIFx1MDAyNiBhZm1hc2spKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0NDQ6XHRcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhpcHZzLVx1MDAzZW5ldCwgb3BzLCBjb3VudCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NDUtXHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYz0yMTA9aW50IGJwZl9uZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM6MjU3Olx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcdTAwMjZsaW5rLVx1MDAzZWhvb2tfb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0yNTgtXHRpZiAoZXJyKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz00NDM9c3RhdGljIGludCBuZl9jdF9uZXRuc19kb19nZXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0NjI6XHRcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYzLVx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDgwOlx0XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ4MS1cdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjUwNzpcdFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmZfY3RfYnJpZGdlX2luZm8tXHUwMDNlb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MDgtXHRcdFx0XHRcdCAgICBuZl9jdF9icmlkZ2VfaW5mby1cdTAwM2VvcHNfc2l6ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTIzNC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzoxMjM1Olx0XHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEyMzYtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYz03NzI9aW50IG5mX3N5bnByb3h5X2lwdjRfaW5pdChzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtNzc3LVx0aWYgKHNuZXQtXHUwMDNlaG9va19yZWY0ID09IDApIHtcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jOjc3ODpcdFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2NF9zeW5wcm94eV9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy03NzktXHRcdFx0XHRcdCAgICBBUlJBWV9TSVpFKGlwdjRfc3lucHJveHlfb3BzKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM9MTIwMz1uZl9zeW5wcm94eV9pcHY2X2luaXQoc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTEyMDgtXHRpZiAoc25ldC1cdTAwM2Vob29rX3JlZjYgPT0gMCkge1xubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM6MTIwOTpcdFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9zeW5wcm94eV9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy0xMjEwLVx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMxNj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNS1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFx1MDAyNmhvb2stXHUwMDNlb3BzX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyNjpcdFx0XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjctXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjU9c3RhdGljIGludCBuZl90YWJsZXNfcmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ1Olx0cmV0dXJuIG5mX3JlZ2lzdGVyX25ldF9ob29rKG5ldCwgXHUwMDI2YmFzZWNoYWluLVx1MDAzZW9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDYtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMDk9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX29wcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTAxOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwMjA6XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDIxLVx0aWYgKCFlcnIpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM9MzIyPXN0YXRpYyBpbnQgbmZ0X25ldGRldl9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jLTM1OS1cdFx0XHRpZiAoISh0YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RBQkxFX0ZfRE9STUFOVCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYzozNjA6XHRcdFx0ICAgIG5mX3JlZ2lzdGVyX25ldF9ob29rKGRldl9uZXQoZGV2KSwgb3BzKSkge1xubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmMtMzYxLVx0XHRcdFx0a2ZyZWUob3BzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTU1NT1zdHJ1Y3QgeHRfdGFibGUgKnh0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxMC1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNjExOlx0XHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBvcHMsIG51bV9vcHMpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2MTItXHRcdGlmIChyZXQgIT0gMCkge1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2MTMtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnh0W3RhYmxlLVx1MDAzZWFmXS5tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTYxNDpcdFx0XHQvKiBuZl9yZWdpc3Rlcl9uZXRfaG9va3MoKSBtaWdodCBoYXZlIHB1Ymxpc2hlZCBhXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxNS1cdFx0XHQgKiBiYXNlIGNoYWluIGJlZm9yZSBpbnRlcm5hbCBlcnJvciB1bndpbmQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktjb25maWcgRGVwZW5kZW5jeSBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGZvciBgTkVURklMVEVSX05FVExJTktfSE9PS2AgaXMgY29ycmVjdGx5IHNldCB1cC4gRmlyc3QsIGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgc2VlIGl0IGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAgYW5kIGBORl9UQUJMRVNgIGFuZCBhbHNvIHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYC4KCk5vdyBJIHNlZToKKiAgIGBDT05GSUdfTkVURklMVEVSYAoqICAgYENPTkZJR19ORl9OQVRgCiogICBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0tgCiogICBgQ09ORklHX05GX1RBQkxFU2AKClNvLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBwYXJlbnQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBgTkVURklMVEVSYCwgYE5GX05BVGAsIGFuZCBgTkZfVEFCTEVTYC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfTkFUYCB0byBtYXAgb3V0IHRoZSBmdWxsIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGluIG9yZGVyLCBvdGhlcndpc2UsIEkgbWlnaHQgaGF2ZSBzb21lIG5hc3R5IGJ1aWxkIGVycm9ycyBvciwgd29yc2UsIGZ1bmN0aW9uYWxpdHkgdGhhdCBkb2VzbiYjMzk7dCB3b3JrIGFzIGV4cGVjdGVkLiBUaW1lIHRvIHRyYWNlIHRoZSByYWJiaXQgaG9sZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cdGRlcGVuZHMgb24gSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY29uZmlnIE5GX05BVGAgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzLCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgYW5kIGRvdWJsZS1jaGVjayBob3cgYGNvbmZpZyBORl9OQVRgIGlzIGRlZmluZWQuIEkgd2FudCB0byBxdWlja2x5IHZlcmlmeSBpdHMgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCYjMzk7cyBzaXR1YXRlZCBpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suIElzIGl0IGEgY29yZSBtb2R1bGUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG90aGVyLCBtb3JlIGJhc2ljIE5BVCBjb21wb25lbnRzPyBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYW55IGNoYW5nZXMgSSBtaWdodCBiZSBjb25zaWRlcmluZy4gSSYjMzk7bSBhbHNvIGhvcGluZyB0aGUgaGVscCB0ZXh0IHdpbGwgcmVtaW5kIG1lIG9mIGFueSBvYnNjdXJlIG51YW5jZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzk4PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MDc6Y29uZmlnIE5GX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQwNy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGEgcmVsYXRlZCBibG9jayBvZiBvcHRpb25zLCBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIEtub3dpbmcgaG93IHRoaXMgaXMgbGFpZCBvdXQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIG9wdGlvbnMgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQgYW5kIG1hbmFnZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFueSBwcm9tcHRzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgbG9naWMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIGludmVzdGlnYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDU6XHRcdCAgdGhlIGVucXVldWVkIHZpYSBORk5FVExJTksuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIE5GX05BVFxuIDQwODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNDEwOlx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiA0MTE6XHRcdGhlbHBcbiA0MTI6XHRcdCAgVGhlIE5BVCBvcHRpb24gYWxsb3dzIG1hc3F1ZXJhZGluZywgcG9ydCBmb3J3YXJkaW5nIGFuZCBvdGhlclxuIDQxMzpcdFx0ICBmb3JtcyBvZiBmdWxsIE5ldHdvcmsgQWRkcmVzcyBQb3J0IFRyYW5zbGF0aW9uLiBUaGlzIGNhbiBiZVxuIDQxNDpcdFx0ICBjb250cm9sbGVkIGJ5IGlwdGFibGVzLCBpcDZ0YWJsZXMgb3IgbmZ0LlxuIDQxNTpcdFxuIDQxNjpcdGNvbmZpZyBORl9OQVRfQU1BTkRBXG4gNDE3Olx0XHR0cmlzdGF0ZVxuIDQxODpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVFxuIDQxOTpcdFx0ZGVmYXVsdCBORl9OQVQgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDS19BTUFOREFcbiA0MjA6XHRcbiA0MjE6XHRjb25maWcgTkZfTkFUX0ZUUFxuIDQyMjpcdFx0dHJpc3RhdGVcbiA0MjM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVRcbiA0MjQ6XHRcdGRlZmF1bHQgTkZfTkFUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0tfRlRQXG4gNDI1Olx0XG4gNDI2Olx0Y29uZmlnIE5GX05BVF9JUkNcbiA0Mjc6XHRcdHRyaXN0YXRlXG4gNDI4Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUXG4gNDI5Olx0XHRkZWZhdWx0IE5GX05BVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLX0lSQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uKioKCk9rYXksIHNvIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGVlcGVyIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmF0aW9uIHR3ZWFrcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYmFzaWNzIGFyZSBpbiBwbGFjZS4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpcyBhbWlzcywgcHJvYmFibHkgd2l0aCB0aGUgbmV0d29yayBjb25uZWN0aW9uIHRyYWNraW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSByZWxldmFudCBrZXJuZWwgbW9kdWxlIGlzIGV2ZW4gbG9hZGVkLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBjb25maWcgTkZfQ09OTlRSQUNLYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSWYgdGhhdCYjMzk7cyBub3QgcmlnaHQsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBqdXN0IHdhc3RlZCBlZmZvcnQuIE5vIHNlbnNlIGNoYXNpbmcgZ2hvc3RzIHVudGlsIEkmIzM5O20gY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBjb25maWd1cmVkIHByb3Blcmx5LiBJJiMzOTtsbCBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBjb25maWcgTkVURklMVEVSYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGNvbmZpZyBORVRGSUxURVJgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBjb21wb25lbnQsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBjb25maWd1cmF0aW9uLiBJ4oCZbSBpbW1lZGlhdGVseSBnb2luZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBwZXJmb3JtYW5jZSBhc3BlY3RzIGFzc29jaWF0ZWQgd2l0aCBpdC4gV2hhdCBhcmUgdGhlIGtleSBzZXR0aW5ncz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1pc2NvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgb3IgcmVxdWlyaW5nIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTE1ND1jb25maWcgTkVUV09SS19QSFlfVElNRVNUQU1QSU5HXG4tLVxubmV0L0tjb25maWctMTY0LVxubmV0L0tjb25maWc6MTY1Om1lbnVjb25maWcgTkVURklMVEVSXG5uZXQvS2NvbmZpZy0xNjYtXHRib29sIFwmIzM0O05ldHdvcmsgcGFja2V0IGZpbHRlcmluZyBmcmFtZXdvcmsgKE5ldGZpbHRlcilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgQWR2YW5jZWQgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGhpcyBpcyB0aGUganVtcGluZy1vZmYgcG9pbnQgZm9yIGFueSBkZWVwZXIgTmV0ZmlsdGVyIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGlmIGFkdmFuY2VkIE5ldGZpbHRlciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhdCB0aGlzIGxldmVsIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBnZXR0aW5nIGludG8gdGhlIGRldGFpbHMuIFRoYXQgc2V0dGluZyB3aWxsIGRpY3RhdGUgd2hhdCB0b29scyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBtZSBhcyBJIGdvIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIHRoZSBmaXJzdCBmaWx0ZXIuIEtub3dpbmcgdGhhdCBzdGF0ZSBpbmZvcm1zIGFsbCB0aGUgZGVjaXNpb25zIEkmIzM5O2xsIGJlIG1ha2luZyBhYm91dCBydWxlcywgdGFyZ2V0cywgYW5kIGhvdyBJJiMzOTttIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHBhY2tldCBmaWx0ZXJpbmcgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIGJhc2ljLCBvciB0aGUgbW9yZSBleHBhbnNpdmUsIGZlYXR1cmVzIGFyZSBiZWluZyB1c2VkLiBTbywgbGV0JiMzOTtzIGNoZWNrIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMTg9aWYgTkVURklMVEVSXG5uZXQvS2NvbmZpZy0yMTktXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uICZhbXA7IEZ1bmN0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZy4gSSYjMzk7dmUgZ290IGEgY2hlY2tsaXN0OiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfSE9PS2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX05BVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBmb3VuZGF0aW9uIEkgbmVlZCBpbiBwbGFjZS4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgYW5kIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycywgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkIGhlcmUuIEkgc2VlIGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIHdoaWNoIHBvaW50IHRvIHRoZSBuZXR3b3JrIGZpbHRlciBuZXRsaW5rIGhvb2smIzM5O3MgZGVidWdnaW5nIGFuZCByZXRyaWV2YWwgbWVjaGFuaXNtcy4gVGhlbiB0aGVyZSBhcmUgdGhlIGBuZl9uYXRfcmVnaXN0ZXJfZm5gIGFuZCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCB3aGljaCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIGZvciBOQVQgb3BlcmF0aW9ucywgaG9va2luZyBhbmQgdW5ob29raW5nIE5BVC1yZWxhdGVkIGZ1bmN0aW9ucy4gQW5kIGZpbmFsbHksIHRoZSBzdGFuZGFyZCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIGFuZCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AsIHdoaWNoIGFyZSB0aGUgZnVuZGFtZW50YWwgbmV0d29yayBob29rIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zLgoKU2luY2UgSSYjMzk7bSBkZWFsaW5nIHdpdGggaG9va3MsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AgaXMgaW5kZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzbyB0aGF0IEkgY2FuIGNhbGwgaXQgZnJvbSBlbHNld2hlcmUuIFRoaXMgaXMga2V5IGZvciB0aGUgZHluYW1pYyBhc3BlY3RzIG9mIHRoaXMgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG5mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gTmV0ZmlsdGVyIFVucmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggaG93IE5ldGZpbHRlciBob29rcyBhcmUgdW5yZWdpc3RlcmVkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldHdvcmtpbmcgbmFtZXNwYWNlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmV0L25ldGZpbHRlci9jb3JlLmNgLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgZWl0aGVyIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rYCBvciBwZXJoYXBzIGl0cyBwbHVyYWwgY291bnRlcnBhcnQsIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rc2AsIGlzIHRoZSBmdW5jdGlvbiBJJiMzOTttIGFmdGVyLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIHRoZSBzZWFyY2gsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBjb3JlIE5ldGZpbHRlciBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZpbGUgcmV2ZWFscy4uLiBUaW1lIHRvIHN0YXJ0IGdyZXBwaW5nIGFuZCBjcm9zcy1yZWZlcmVuY2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9jb3JlLmM9NDczPXN0YXRpYyBib29sIG5mX3JlbW92ZV9uZXRfaG9vayhzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpvbGQsXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNDkwLVxubmV0L25ldGZpbHRlci9jb3JlLmM6NDkxOnN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ5Mi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTMyLVxubmV0L25ldGZpbHRlci9jb3JlLmM6NTMzOnZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTM0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MzYtXHRcdGlmIChyZWctXHUwMDNlaG9va251bSA9PSBORl9JTkVUX0lOR1JFU1MpIHtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjUzNzpcdFx0XHRfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lORVQsIHJlZyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MzgtXHRcdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1Mzk6XHRcdFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY0LCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTQwOlx0XHRcdF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSVBWNiwgcmVnKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU0MS1cdFx0fVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQyLVx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU0MzpcdFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgcmVnLVx1MDAzZXBmLCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ0LVx0fVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ1LX1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU0NjpFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfbmV0X2hvb2spO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTU2MT1pbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzYtXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTc3Olx0XHRcdFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY0LCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTc4LVx0XHRcdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz01OTE9aW50IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYwNS1cdGlmIChpIFx1MDAzZSAwKVxubmV0L25ldGZpbHRlci9jb3JlLmM6NjA2Olx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIHJlZywgaSk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MDctXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTYwOT1FWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX25ldF9ob29rcyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTAtXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MTE6dm9pZCBuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjEyLVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGhvb2tjb3VudClcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBob29rY291bnQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9jb3JlLmM6NjE3Olx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgXHUwMDI2cmVnW2ldKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYxOC19XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MTk6RVhQT1JUX1NZTUJPTChuZl91bnJlZ2lzdGVyX25ldF9ob29rcyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MjAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yNDUxPXZvaWQgaXBfdnNfdW5yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGFmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ3MS1cdGlmIChpcHZzLVx1MDAzZWhvb2tzX2FmbWFzayBcdTAwMjYgYWZtYXNrKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0NzI6XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKGlwdnMtXHUwMDNlbmV0LCBvcHMsIGNvdW50KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ3My1cdFx0aXB2cy1cdTAwM2Vob29rc19hZm1hc2sgXHUwMDI2PSB+YWZtYXNrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYz0xMTM9c3RhdGljIHZvaWQgYnBmX25mX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTEyMS1cdGlmICghY21weGNoZyhcdTAwMjZuZl9saW5rLVx1MDAzZWRlYWQsIDAsIDEpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM6MTIyOlx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5mX2xpbmstXHUwMDNlbmV0LCBcdTAwMjZuZl9saW5rLVx1MDAzZWhvb2tfb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0xMjMtXHRcdGJwZl9uZl9kaXNhYmxlX2RlZnJhZyhuZl9saW5rKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTUzMj1zdGF0aWMgdm9pZCBuZl9jdF9uZXRuc19kb19wdXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTM5LVx0XHRpZiAoY25ldC1cdTAwM2V1c2VyczQgXHUwMDI2XHUwMDI2ICgtLWNuZXQtXHUwMDNldXNlcnM0ID09IDApKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MDpcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQxLVx0XHRcdFx0XHRcdEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NDctXHRcdGlmIChjbmV0LVx1MDAzZXVzZXJzNiBcdTAwMjZcdTAwMjYgKC0tY25ldC1cdTAwM2V1c2VyczYgPT0gMCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NTQ4Olx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9jb25udHJhY2tfb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NDktXHRcdFx0XHRcdFx0QVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU1Ny1cdFx0aWYgKGNuZXQtXHUwMDNldXNlcnNfYnJpZGdlIFx1MDAyNlx1MDAyNiAoLS1jbmV0LVx1MDAzZXVzZXJzX2JyaWRnZSA9PSAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NTU4Olx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmZfY3RfYnJpZGdlX2luZm8tXHUwMDNlb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NTktXHRcdFx0XHRcdFx0bmZfY3RfYnJpZGdlX2luZm8tXHUwMDNlb3BzX3NpemUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0xMjY2PXZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDAtXHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTMwMTpcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDItXG4tLVxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM9NzkxPXZvaWQgbmZfc3lucHJveHlfaXB2NF9maW5pKHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy03OTUtXHRpZiAoc25ldC1cdTAwM2Vob29rX3JlZjQgPT0gMClcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jOjc5NjpcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY0X3N5bnByb3h5X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTc5Ny1cdFx0XHRcdFx0QVJSQVlfU0laRShpcHY0X3N5bnByb3h5X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jPTEyMjM9bmZfc3lucHJveHlfaXB2Nl9maW5pKHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy0xMjI3LVx0aWYgKHNuZXQtXHUwMDNlaG9va19yZWY2ID09IDApXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYzoxMjI4Olx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfc3lucHJveHlfb3BzLFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtMTIyOS1cdFx0XHRcdFx0QVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMxNj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM0MTpcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0Mi1cdFx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTM4Nz1zdGF0aWMgdm9pZCBuZnRfbmV0ZGV2X3VucmVnaXN0ZXJfdHJhbnNfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzk5LVx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcdTAwMjZob29rLVx1MDAzZW9wc19saXN0LCBsaXN0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDAwOlx0XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MDEtXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MDc9c3RhdGljIHZvaWQgbmZ0X25ldGRldl91bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MTctXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFx1MDAyNmhvb2stXHUwMDNlb3BzX2xpc3QsIGxpc3QpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MTg6XHRcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQxOS1cdFx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQ0OD1zdGF0aWMgdm9pZCBfX25mX3RhYmxlc191bnJlZ2lzdGVyX2hvb2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ3NDpcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcdTAwMjZiYXNlY2hhaW4tXHUwMDNlb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3NS19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5MT1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzA3Ni1cdFx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcdTAwMjZoLVx1MDAzZW9wc19saXN0LCBsaXN0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzA3NzpcdFx0XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhjdHgtXHUwMDNlbmV0LCBvcHMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzA3OC1cdFx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODk3Nz1zdGF0aWMgdm9pZCBuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfb3BzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTgwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg5ODE6XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5ODItXHRmbG93dGFibGUtXHUwMDNlZGF0YS50eXBlLVx1MDAzZXNldHVwKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VkYXRhLCBvcHMtXHUwMDNlZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jPTMyMj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYy0zNDAtXHRcdFx0aWYgKCEodGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9UQUJMRV9GX0RPUk1BTlQpKVxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM6MzQxOlx0XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhkZXZfbmV0KGRldiksIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYy0zNDItXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTE2NTg9dm9pZCB4dF91bnJlZ2lzdGVyX3RhYmxlX3ByZV9leGl0KHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2NjktXHRcdFx0aWYgKHQtXHUwMDNlb3BzKSAvKiBuYXQgdGFibGUgcmVnaXN0ZXJzIHdpdGggbmF0IGNvcmUsIHQtXHUwMDNlb3BzIGlzIE5VTEwuICovXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTY3MDpcdFx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgdC1cdTAwM2VvcHMsIGh3ZWlnaHQzMih0LVx1MDAzZXZhbGlkX2hvb2tzKSk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTY3MS1cdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQ0CgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXImIzM5O3MgRnV6emluZyBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBtYXBwaW5nIG91dCB0aGUga2V5IGNvbXBvbmVudHMgZm9yIGZ1enppbmcgTmV0ZmlsdGVyLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8ga2VlcCBteSBleWUgb24gYXJlIGNsZWFybHk6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBUaGVzZSBhcmUgdGhlIG5lcnZlIGNlbnRlcnMgb2YgaG9vayBtYW5hZ2VtZW50IGFuZCBOQVQgb3BlcmF0aW9ucywgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBleHBsb2l0YWJsZSBidWdzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIHRvIHRhcmdldCB0aGVzZSBmdW5jdGlvbnMuIFRoZSBlc3NlbnRpYWwgY29uZmlncyBhcmUgYE5FVEZJTFRFUmAsIG9idmlvdXNseSwgYnV0IGFsc28gdGhlIGFkdmFuY2VkIG9wdGlvbnMgdW5kZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfSE9PS2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgY3J1Y2lhbGx5LCBgTkZfTkFUYC4gV2l0aG91dCB0aGVzZSwgbXkgZnV6emluZyBlZmZvcnRzIGFyZSBnb2luZyB0byBiZSBjcmlwcGxlZC4KCkFscmlnaHQsIHRoZSBmaW5hbCBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgcGllY2VzIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlLi4uIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLCB0aGF0JiMzOTtzIGEgbm8tYnJhaW5lciBnaXZlbiB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzLiBUaGUgYFJlYXNvbmluZ2AgbmVlZHMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiBmb3IgdGhlIHZlcmRpY3QsIHdoaWNoIEkmIzM5O3ZlIGFscmVhZHkgaW50ZXJuYWxseSB2ZXJpZmllZC4gVGhlbiwgZm9yIHRoZSBlbmFibGluZyBjb25maWdzLCBJJiMzOTtsbCBuZWVkIGFuIGFycmF5IG9mIHN0cmluZ3MsIGJ1dCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LiBGaW5hbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgaGFzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIG5hbWVzIEkgaWRlbnRpZmllZCBlYXJsaWVyLgoKV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIGFjY291bnRlZCBmb3IsIGl0JiMzOTtzIHRpbWUgdG8gdHJpZ2dlciB0aGF0IGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0hPT0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfaG9va19kdW1wJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZ2V0JiMzNDssCiAgICAmIzM0O25mX25hdF9yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9uYXRfdW5yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICAgJiMzNDtuZl91bnJlZ2lzdGVyX25ldF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0hPT0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfaG9va19kdW1wJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZ2V0JiMzNDssCiAgICAmIzM0O25mX25hdF9yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9uYXRfdW5yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICAgJiMzNDtuZl91bnJlZ2lzdGVyX25ldF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnksIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHNsaWNlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG4tIEFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBSQ1UgZGVyZWZlcmVuY2luZyBvciBob29rIGl0ZXJhdGlvbiBkdXJpbmcgY29uY3VycmVudCByZWdpc3RyYXRpb25zIGFyZSBsaWZldGltZS9jb25jdXJyZW5jeSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IEtBU0FOL0xPQ0tERVAsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTozNzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKQEAgLTMzLDUgJiM0MzszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpCiAJdW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzOwogI2VuZGlmCiYjNDM7CXVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxOwomIzQzOwl1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0zODYsNiAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKQogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CXdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMCkKJiM0MzsJCTsKJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZykKIHsKQEAgLTQyOCw2ICYjNDM7NDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCW5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7CiAKIAlpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJaG9va3NfdmFsaWRhdGUobmV3X2hvb2tzKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKCpwcCwgbmV3X2hvb2tzKTsKIAl9CkBAIC01MDYsNiAmIzQzOzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAkJCW5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7CiAjZW5kaWYKIAkJbmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAl9IGVsc2UgewogCQlXQVJOX09OQ0UoMSwgJiMzNDtob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkJiMzNDssIHBmLCByZWctJmd0O2hvb2tudW0pOwogCX0KQEAgLTc4NCw2ICYjNDM7Nzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwluZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEgPSAxOwomIzQzOwluZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsCiB9CiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwl3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApCiYjNDM7CQk7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0gewogCS5uYW1lCQk9ICYjMzQ7bmF0LWZvbGxvdy1tYXN0ZXImIzM0OywKIAkuZXhwZWN0Zm4JPSBuZl9uYXRfZm9sbG93X21hc3RlciwKQEAgLTEyNDUsOCAmIzQzOzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAl9CiAKIAlyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7Ci0JaWYgKHJldCA9PSAwKQomIzQzOwlpZiAocmV0ID09IDApIHsKJiM0MzsJCWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJbmF0X3Byb3RvX25ldC0mZ3Q7dXNlcnMmIzQzOyYjNDM7OwomIzQzOwl9CiAKIAltdXRleF91bmxvY2soJmFtcDtuZl9uYXRfcHJvdG9fbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMjg0LDYgJiM0MzsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAkJZ290byB1bmxvY2s7CiAJcHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjsKIAluZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7CiYjNDM7CWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAogCWlmIChuYXRfcHJvdG9fbmV0LSZndDt1c2VycyA9PSAwKSB7CiAJCW5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwppbmRleCA5NTAwNWU5YTYwNjY4Li4zMTAxM2MzMjEwOTk2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCkBAIC01NCw3ICYjNDM7NTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHsKIAljaGFyIGRldm5hbWVbSUZOQU1TSVpdOwotCXVuc2lnbmVkIGxvbmcgaGVhZHY7CiAJdTggaG9vazsKIH07CiAKQEAgLTMzOCwyNyAmIzQzOzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZQogfQogCiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LAotCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCi0JCQkgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKQomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtJmd0O3ByaXY7Ci0Jc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKJiM0MzsJc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7Ci0JaW50IGksIGVycjsKJiM0MzsJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1sxXTsKJiM0MzsJc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTsKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxOwomIzQzOwlpbnQgZXJyID0gMDsKIAomIzQzOwliYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKIAlpZiAoIWUpCiAJCXJldHVybiAwOwogCiAJbmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sCi0JCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksIHNlcSk7CiYjNDM7CWZvciAoOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LAomIzQzOwkJCQkJIFJFQURfT05DRShuYXRfb3BzW2ldKSwKJiM0MzsJCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksCiYjNDM7CQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJfQotCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWVycikgewomIzQzOwkJaSA9IDA7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMV0gPSBpOwomIzQzOwomIzQzOwlpZiAoY2ItJmd0O2FyZ3NbMl0gJmFtcDsmYW1wOyBiYXNlX3NlcSAhPSBjYi0mZ3Q7YXJnc1syXSkgewomIzQzOwkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQllcnIgPSAtRUlOVFI7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMl0gPSBiYXNlX3NlcTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCkBAIC0zNzMsMzUgJiM0MzszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCiAJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1swXTsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY2ItJmd0O3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpOwogCiAJZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtJmd0O2hvb2ssIG5ldCwgY3R4LSZndDtkZXZuYW1lKTsKLQlpZiAoIWUpCiYjNDM7CWlmICghZSB8fCBJU19FUlIoZSkpCiAJCWdvdG8gZG9uZTsKIAotCWlmIChJU19FUlIoZSkpIHsKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtJmd0O2hlYWR2IHx8IGkgJmd0Oz0gZS0mZ3Q7bnVtX2hvb2tfZW50cmllcykKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0KIAlvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpOwogCiAJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQlpZiAob3BzW2ldLSZndDtob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKQotCQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LAotCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7Ci0JCWVsc2UKLQkJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sCi0JCQkJCQkgb3BzW2ldLSZndDtwcmlvcml0eSwgZmFtaWx5LAomIzQzOwkJY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTsKJiM0MzsKJiM0MzsJCWlmIChjdXItJmd0O2hvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpCiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1ciwKJiM0MzsJCQkJCQkgY3VyLSZndDtwcmlvcml0eSwgZmFtaWx5LAogCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7CiYjNDM7CQl9CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKJiM0MzsJaWYgKG5sc2tiLSZndDtsZW4gJmd0OyAwKQomIzQzOwkJbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CiAJcmV0dXJuIG5sc2tiLSZndDtsZW47CkBAIC00NDIsMTAgJiM0Mzs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdHJzY3B5KGN0eC0mZ3Q7ZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC0mZ3Q7ZGV2bmFtZSkpOwotCWN0eC0mZ3Q7aGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkOwogCWN0eC0mZ3Q7aG9vayA9IGhvb2tudW07Ci0KLQljYi0mZ3Q7c2VxID0gMTsKIAljYi0mZ3Q7ZGF0YSA9IGN0eDsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgS01TQU4uIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyB0aGlzIGlzIGFib3V0IHNlcXVlbmNlIG51bWJlciBtYW5hZ2VtZW50LCB3aGljaCAqY291bGQqIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZS4KCkZpcnN0LCBJIHNlZSBhZGRpdGlvbnMgdG8gYG5ldG5zX25mYCBpbiBgbmV0ZmlsdGVyLmhgOiBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAuIFRoZXNlIGxvb2sgbGlrZSBzZXF1ZW5jZSBjb3VudGVycywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJhY2VzIGFuZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gV2UgbmVlZCB0byBmb2xsb3cgd2hlcmUgdGhleSBhcmUgaW5pdGlhbGl6ZWQsIHJlYWQsIGFuZCB3cml0dGVuLgoKYGNvcmUuY2AgaGFzIGBidW1wX2hvb2tfYmFzZV9zZXFgLCBhIGZ1bmN0aW9uIHRvIGluY3JlbWVudCB0aGUgaG9vayBzZXF1ZW5jZS4gSSBzZWUgaXQgdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlYCwgd2hpY2ggaXMgZ29vZCDigJMgaGludGluZyBhdCBjb25jdXJyZW50IGFjY2Vzcy4gVGhlIGluaXRpYWxpemF0aW9uIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGxvb2tzIHNhZmUsIHNldHRpbmcgYm90aCBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgdG8gMS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIHNob3VsZCBtaXRpZ2F0ZSBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZCByaXNrcy4gVGhlIGNhbGxzIHRvIGBidW1wX2hvb2tfYmFzZV9zZXFgIG9uIGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBtYWtlIHNlbnNlOyBrZWVwIHRob3NlIHZhbHVlcyB1cGRhdGVkLgoKYG5mX25hdF9jb3JlLmNgIGludHJvZHVjZXMgYSBzaW1pbGFyIGBidW1wX25hdF9ob29rX2Jhc2Vfc2VxYCBmb3IgTkFUIGhvb2tzLCB3aXRoIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGFuZCBpbmNyZW1lbnQgcGF0dGVybi4gU3RhbmRhcmQgc3R1ZmYuCgpOb3csIGBuZm5ldGxpbmtfaG9vay5jYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSBjaGFuZ2VzIGluIGBuZm5sX2R1bXBfaG9va19kYXRhYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFRoZSByZW1vdmFsIG9mIGBoZWFkdmAgaW4gYG5mbmxfZHVtcF9ob29rX2RhdGFgIGlzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS4gVGhlIHVwZGF0ZSB0byB0YWtlIGBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2JgIGluIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGFuZCBpdHMgdXNhZ2Ugb2YgYGNiLSZndDthcmdzYCBmb3IgaXRlcmF0aW5nIHRocm91Z2ggTkFUIGhvb2tzIGFuZCBjaGVja2luZyBjb25zaXN0ZW5jeSAoYGJhc2Vfc2VxICE9IGNiLSZndDthcmdzWzJdYCkgaXMgYSBjcnVjaWFsIGFyZWEuIFdlJiMzOTtyZSBjaGVja2luZyBmb3IgdmVyc2lvbmluZywgd2hpY2ggaXMgYSBnb29kIHNpZ24sIGFuZCBpdCYjMzk7cyBuaWNlIHRoYXQgY29uc2lzdGVuY3kgY2hlY2tzIGFyZSBpbiBwbGFjZS4gVGhlIGZhY3QgdGhhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGxvYWRlZCB3aXRoIGBzbXBfbG9hZF9hY3F1aXJlYCBhbmQgdGhlbiBjaGVja2VkIGZvciBjb25zaXN0ZW5jeSB3aXRoaW4gdGhhdCBzYW1lIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUga2V5LiBJIGFsc28gc2VlIHRoYXQgYG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudGAgaXMgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBpZiBgbmxza2ItJmd0O2xlbiAmZ3Q7IDBgLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgYSBwb3NzaWJsZSBzY2VuYXJpbyB3aGVyZSBhIGNvbnNpc3RlbnQgZHVtcCBvcGVyYXRpb24gY2FuIGJlIHNraXBwZWQuIEl0JiMzOTtzIGltcGVyYXRpdmUgdGhhdCB0aGUgY29kZSBwYXRoIGFuZCBsb2dpYyBmb3IgdGhpcyBiZSBpbnNwZWN0ZWQuCgpJbiBgbmZubF9ob29rX2R1bXBgLCBJIHNlZSBgY2ItJmd0O3NlcWAgaXMgbG9hZGVkIHdpdGggdGhlIGhvb2sgc2VxdWVuY2UuIEl0JiMzOTtzIGEgbmljZSBkZXNpZ24gdGhhdCB2ZXJzaW9uaW5nIGFuZCBjb25zaXN0ZW5jeSBhcmUgaW4gcGxhY2UuIEhvd2V2ZXIsIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGBpZiAobmxza2ItJmd0O2xlbiAmZ3Q7IDApYCBtZXJpdHMgZXh0cmEgYXR0ZW50aW9uOiB3aHkgaXMgdGhlIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgcGVyZm9ybWVkIHdoZW4gdGhlIG5ldGxpbmsgc29ja2V0IGJ1ZmZlciBsZW5ndGggaXMgbm90IHplcm8/CgpUaGUgcmVtb3ZhbCBvZiBgY3R4LSZndDtoZWFkdmAgYW5kIGBjYi0mZ3Q7c2VxID0gMWAgaW4gYG5mbmxfaG9va19kdW1wX3N0YXJ0YCBpcyBzb21ldGhpbmcgdG8gbm90ZS4gSSB3YW50IHRvIGNoZWNrIHRoYXQgYGhlYWR2YCBpc24mIzM5O3QgdXNlZCBlbHNld2hlcmUuCgpJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gTm93IGxldCYjMzk7cyBjYXJlZnVsbHkgcmV2aWV3IGBuZm5sX2hvb2tfZHVtcF9vbmVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIHVzZSBvZiBzZXF1ZW5jZSBudW1iZXJzIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIE5BVC1zcGVjaWZpYyBzZXF1ZW5jZSBudW1iZXJzIHBvaW50IHRvd2FyZCBhIGdvb2QgZWZmb3J0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gR2l2ZW4gdGhlIGluaXRpYWxpemF0aW9uLCBhbmQgY2hlY2tzIGZvciBpbmNvbnNpc3RlbmN5IGFuZCBjb25kaXRpb25hbCBgbmxza2ItJmd0O2xlbmAgY29uc2lzdGVuY3kgY2hlY2tzLCBJIGFtIG5vdCBzZWVpbmcgb2J2aW91cyBpc3N1ZXMuIEJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBjb2RlIHBhdGhzIGFuZCBsb2dpYyB3aXRoIHRoZSBjb25kaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVjayBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9ob29rX2R1bXBfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTE1OD1zdGF0aWMgaW50IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MTkwOnN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xOTEtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9MzM5PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozNjE6XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM2Mi1cdFx0XHRcdFx0IFJFQURfT05DRShuYXRfb3BzW2ldKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy00MDktXHRcdGVsc2Uge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjQxMDpcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MDEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIHRoZSBNYXR0ZXI6IE5GTkVUTElOSyBIb29rIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIGludGVyYWN0cyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGxpbmVzIDE4MCB0byAyNTAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgbWFnaWMgb2YgaG9va2luZyBuZXRmaWx0ZXIgZnVuY3Rpb25zIGludG8gdGhlIG5ldGxpbmsgbWVzc2FnaW5nIHN5c3RlbSBoYXBwZW5zLCBvciBtYXliZSBpdCBkZWFscyB3aXRoIHRoZSByZWdpc3RyYXRpb24gb3IgZGVyZWdpc3RyYXRpb24gb2YgbmV0ZmlsdGVyIGhvb2tzLiBJIHN1c3BlY3QgaXQgaG9sZHMgdGhlIGNvcmUgbG9naWMgZm9yIGVpdGhlciBzZXR0aW5nIHVwIG9yIHRlYXJpbmcgZG93biB0aGUgbmV0bGluayBjb21tdW5pY2F0aW9uIHBhdGhzIGZvciBwYWNrZXQgaW5zcGVjdGlvbiBhbmQgbWFuaXB1bGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYWN0dWFsbHkgcmVjZWl2ZSBhbmQgcHJvY2VzcyB0aGUgZGF0YSBzZW50IHRocm91Z2ggdGhlc2UgaG9va3MuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGZvciBhbnkgcm9idXN0IG5ldGZpbHRlciBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGVuY291bnRlciBzb21lIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJlc3Rpbmcgc3BpbmxvY2sgdXNhZ2UgZm9yIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQuIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCBmYWlsdXJlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdFx0XHQgIGZ0LVx1MDAzZW5hbWUsIGZ0LVx1MDAzZXRhYmxlLVx1MDAzZWZhbWlseSk7XG4gMTgxOlx0XHRpZiAocmV0KSB7XG4gMTgyOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChubHNrYiwgbmVzdCk7XG4gMTgzOlx0XHRcdHJldHVybiByZXQ7XG4gMTg0Olx0XHR9XG4gMTg1Olx0XG4gMTg2Olx0XHRubGFfbmVzdF9lbmQobmxza2IsIG5lc3QpO1xuIDE4NzpcdFx0cmV0dXJuIDA7XG4gMTg4Olx0fVxuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbiAxOTE6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuIDE5MjpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgcHJpb3JpdHksXG4gMTkzOlx0XHRcdFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcbiAxOTQ6XHR7XG4gMTk1Olx0XHR1MTYgZXZlbnQgPSBuZm5sX21zZ190eXBlKE5GTkxfU1VCU1lTX0hPT0ssIE5GTkxfTVNHX0hPT0tfR0VUKTtcbiAxOTY6XHRcdHVuc2lnbmVkIGludCBwb3J0aWQgPSBORVRMSU5LX0NCKG5sc2tiKS5wb3J0aWQ7XG4gMTk3Olx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbiAxOTg6XHRcdGludCByZXQgPSAtRU1TR1NJWkU7XG4gMTk5Olx0XHR1MzIgaG9va251bTtcbiAyMDA6XHQjaWZkZWYgQ09ORklHX0tBTExTWU1TXG4gMjAxOlx0XHRjaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dO1xuIDIwMjpcdFx0Y2hhciAqbW9kdWxlX25hbWU7XG4gMjAzOlx0I2VuZGlmXG4gMjA0Olx0XHRubGggPSBuZm5sX21zZ19wdXQobmxza2IsIHBvcnRpZCwgc2VxLCBldmVudCxcbiAyMDU6XHRcdFx0XHQgICBOTE1fRl9NVUxUSSwgZmFtaWx5LCBORk5FVExJTktfVjAsIDApO1xuIDIwNjpcdFx0aWYgKCFubGgpXG4gMjA3Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIwODpcdFxuIDIwOTpcdCNpZmRlZiBDT05GSUdfS0FMTFNZTVNcbiAyMTA6XHRcdHJldCA9IHNucHJpbnRmKHN5bSwgc2l6ZW9mKHN5bSksIFwmIzM0OyVwc1wmIzM0Oywgb3BzLVx1MDAzZWhvb2spO1xuIDIxMTpcdFx0aWYgKHJldCBcdTAwM2U9IHNpemVvZihzeW0pKSB7XG4gMjEyOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4gMjEzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIxNDpcdFx0fVxuIDIxNTpcdFxuIDIxNjpcdFx0bW9kdWxlX25hbWUgPSBzdHJzdHIoc3ltLCBcJiMzNDsgW1wmIzM0Oyk7XG4gMjE3Olx0XHRpZiAobW9kdWxlX25hbWUpIHtcbiAyMTg6XHRcdFx0Y2hhciAqZW5kO1xuIDIxOTpcdFxuIDIyMDpcdFx0XHQqbW9kdWxlX25hbWUgPSAmIzM5O1xcMCYjMzk7O1xuIDIyMTpcdFx0XHRtb2R1bGVfbmFtZSAmIzQzOz0gMjtcbiAyMjI6XHRcdFx0ZW5kID0gc3RyY2hyKG1vZHVsZV9uYW1lLCAmIzM5O10mIzM5Oyk7XG4gMjIzOlx0XHRcdGlmIChlbmQpIHtcbiAyMjQ6XHRcdFx0XHQqZW5kID0gMDtcbiAyMjU6XHRcbiAyMjY6XHRcdFx0XHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19NT0RVTEVfTkFNRSwgbW9kdWxlX25hbWUpO1xuIDIyNzpcdFx0XHRcdGlmIChyZXQpXG4gMjI4Olx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyMjk6XHRcdFx0fVxuIDIzMDpcdFx0fVxuIDIzMTpcdFxuIDIzMjpcdFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobmxza2IsIE5GTkxBX0hPT0tfRlVOQ1RJT05fTkFNRSwgc3ltKTtcbiAyMzM6XHRcdGlmIChyZXQpXG4gMjM0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIzNTpcdCNlbmRpZlxuIDIzNjpcdFxuIDIzNzpcdFx0aWYgKG9wcy1cdTAwM2VwZiA9PSBORlBST1RPX0lORVQgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2Vob29rbnVtID09IE5GX0lORVRfSU5HUkVTUylcbiAyMzg6XHRcdFx0aG9va251bSA9IE5GX05FVERFVl9JTkdSRVNTO1xuIDIzOTpcdFx0ZWxzZVxuIDI0MDpcdFx0XHRob29rbnVtID0gb3BzLVx1MDAzZWhvb2tudW07XG4gMjQxOlx0XG4gMjQyOlx0XHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfSE9PS05VTSwgaHRvbmwoaG9va251bSkpO1xuIDI0MzpcdFx0aWYgKHJldClcbiAyNDQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjQ1Olx0XG4gMjQ2Olx0XHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfUFJJT1JJVFksIGh0b25sKHByaW9yaXR5KSk7XG4gMjQ3Olx0XHRpZiAocmV0KVxuIDI0ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyNDk6XHRcbiAyNTA6XHRcdHN3aXRjaCAob3BzLVx1MDAzZWhvb2tfb3BzX3R5cGUpIHtcbiAyNTE6XHRcdGNhc2UgTkZfSE9PS19PUF9ORl9UQUJMRVM6XG4gMjUyOlx0XHRcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2NoYWluX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXHUwMDNlcHJpdik7XG4gMjUzOlx0XHRcdGJyZWFrO1xuIDI1NDpcdFx0Y2FzZSBORl9IT09LX09QX0JQRjpcbiAyNTU6XHRcdFx0cmV0ID0gbmZubF9ob29rX3B1dF9icGZfcHJvZ19pbmZvKG5sc2tiLCBjdHgsIHNlcSwgb3BzLVx1MDAzZXByaXYpO1xuIDI1NjpcdFx0XHRicmVhaztcbiAyNTc6XHRcdGNhc2UgTkZfSE9PS19PUF9ORlRfRlQ6XG4gMjU4Olx0XHRcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXHUwMDNlcHJpdik7XG4gMjU5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTkxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBuZm5ldGxpbmtfaG9vay5jKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgYG5mbmxfaG9va19kdW1wYCwgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZSBzdGFydCBhbmQgZG9uZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGVzZSBuZXRsaW5rIGhvb2tzLiBVbmRlcnN0YW5kaW5nIGhvdyBkdW1waW5nIGlzIGluaXRpYXRlZCwgaG93IGRhdGEgaXMgYXNzZW1ibGVkIGFuZCBzZW50LCBhbmQgaG93IHRoZSBwcm9jZXNzIGlzIGZpbmFsaXplZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgYW50aWNpcGF0ZSBwb3RlbnRpYWwgbnVhbmNlcyBpbiByZXNvdXJjZSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHN5bmNocm9uaXphdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiB3aXRoaW4gdGhlc2UgY3J1Y2lhbCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGUgaG9vayBmcmFtZXdvcmsgdHJ1bHkgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODA6XHRcbiAzODE6XHRcdHJldHVybiBlcnI7XG4gMzgyOlx0fVxuIDM4MzpcdFxuIDM4NDpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIDM4NTpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDM4NjpcdHtcbiAzODc6XHRcdHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCk7XG4gMzg4Olx0XHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXHUwMDNlZGF0YTtcbiAzODk6XHRcdGludCBlcnIsIGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiAzOTA6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVx1MDAzZXNrKTtcbiAzOTE6XHRcdHN0cnVjdCBuZl9ob29rX29wcyAqIGNvbnN0ICpvcHM7XG4gMzkyOlx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuIDM5MzpcdFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIDM5NDpcdFxuIDM5NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM5NjpcdFx0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gMzk3Olx0XG4gMzk4Olx0XHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbiAzOTk6XHRcdGlmICghZSB8fCBJU19FUlIoZSkpXG4gNDAwOlx0XHRcdGdvdG8gZG9uZTtcbiA0MDE6XHRcbiA0MDI6XHRcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gNDAzOlx0XG4gNDA0Olx0XHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDQwNTpcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xuIDQwNjpcdFxuIDQwNzpcdFx0XHRpZiAoY3VyLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4gNDA4Olx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xuIDQwOTpcdFx0XHRlbHNlIHtcbiA0MTA6XHRcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxuIDQxMTpcdFx0XHRcdFx0XHRcdCBjdXItXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiA0MTI6XHRcdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4gNDEzOlx0XHRcdH1cbiA0MTQ6XHRcdFx0aWYgKGVycilcbiA0MTU6XHRcdFx0XHRicmVhaztcbiA0MTY6XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRkb25lOlxuIDQxOTpcdFx0aWYgKG5sc2tiLVx1MDAzZWxlbiBcdTAwM2UgMClcbiA0MjA6XHRcdFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcbiA0MjE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDQyMjpcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4gNDIzOlx0XHRyZXR1cm4gbmxza2ItXHUwMDNlbGVuO1xuIDQyNDpcdH1cbiA0MjU6XHRcbiA0MjY6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiA0Mjc6XHR7XG4gNDI4Olx0XHRjb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDQyOTpcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpubGEgPSBjYi1cdTAwM2VkYXRhO1xuIDQzMDpcdFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IE5VTEw7XG4gNDMxOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjYi1cdTAwM2Vza2ItXHUwMDNlc2spO1xuIDQzMjpcdFx0dTggZmFtaWx5ID0gbmZtc2ctXHUwMDNlbmZnZW5fZmFtaWx5O1xuIDQzMzpcdFx0Y2hhciBuYW1lW0lGTkFNU0laXSA9IFwmIzM0O1wmIzM0OztcbiA0MzQ6XHRcdGNvbnN0IHZvaWQgKmhlYWQ7XG4gNDM1Olx0XHR1MzIgaG9va251bTtcbiA0MzY6XHRcbiA0Mzc6XHRcdGhvb2tudW0gPSBudG9obChubGFfZ2V0X2JlMzIobmxhW05GTkxBX0hPT0tfSE9PS05VTV0pKTtcbiA0Mzg6XHRcdGlmIChob29rbnVtIFx1MDAzZSAyNTUpXG4gNDM5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0MDpcdFxuIDQ0MTpcdFx0aWYgKGZhbWlseSA9PSBORlBST1RPX05FVERFVikge1xuIDQ0MjpcdFx0XHRpZiAoIW5sYVtORk5MQV9IT09LX0RFVl0pXG4gNDQzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ0Olx0XG4gNDQ1Olx0XHRcdG5sYV9zdHJzY3B5KG5hbWUsIG5sYVtORk5MQV9IT09LX0RFVl0sIHNpemVvZihuYW1lKSk7XG4gNDQ2Olx0XHR9XG4gNDQ3Olx0XG4gNDQ4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNDQ5Olx0XHQvKiBOb3QgZGVyZWZlcmVuY2VkOyBmb3IgY29uc2lzdGVuY3kgY2hlY2sgb25seSAqL1xuIDQ1MDpcdFx0aGVhZCA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBob29rbnVtLCBuZXQsIG5hbWUpO1xuIDQ1MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNDUyOlx0XG4gNDUzOlx0XHRpZiAoaGVhZCBcdTAwMjZcdTAwMjYgSVNfRVJSKGhlYWQpKVxuIDQ1NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihoZWFkKTtcbiA0NTU6XHRcbiA0NTY6XHRcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIDQ1NzpcdFx0aWYgKCFjdHgpXG4gNDU4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQ1OTpcdFxuIDQ2MDpcdFx0c3Ryc2NweShjdHgtXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cdTAwM2VkZXZuYW1lKSk7XG4gNDYxOlx0XHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4gNDYyOlx0XHRjYi1cdTAwM2VkYXRhID0gY3R4O1xuIDQ2MzpcdFxuIDQ2NDpcdFx0cmV0dXJuIDA7XG4gNDY1Olx0fVxuIDQ2NjpcdFxuIDQ2NzpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RvcChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDY4Olx0e1xuIDQ2OTpcdFx0a2ZyZWUoY2ItXHUwMDNlZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjgKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMTIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBcHBsaWNhYmlsaXR5IEFzc2Vzc21lbnQgZm9yIE5ldGZpbHRlciBIb29rIER1bXAgQ29uc2lzdGVuY3kgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIGFkZHJlc3NlcyBhIGNvbnNpc3RlbmN5IGlzc3VlIGluIG5ldGZpbHRlciBob29rIGR1bXBpbmcgd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYCwgaXNuJiMzOTt0IGEgY2FuZGlkYXRlIGZvciBLTVNBTi4gVGhlIGNvcmUgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIHRyeWluZyB0byBzb2x2ZSBpcyB0aGF0IHRoZSBleGlzdGluZyBtZXRob2Qgb2YgZGV0ZWN0aW5nIGNoYW5nZXMgaW4gdGhlIGhvb2sgdGFibGUgcmVsaWVkIG9uIGNoZWNraW5nIGBlICE9IGN0eC0mZ3Q7aGVhZHZgLiBUaGlzIHdhcyBmbGF3ZWQgYmVjYXVzZSByZWFsbG9jYXRpb25zLCBtb2RpZmljYXRpb25zLCBvciBjaGFuZ2VzIHRvIE5BVCBob29rIGVudHJpZXMgd2VyZW4mIzM5O3QgYWx3YXlzIGRldGVjdGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbnQgbmV0bGluayBkdW1wcy4KClRoZSBmaXggaW50cm9kdWNlcyBzZXF1ZW5jZSBudW1iZXJzLCBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAsIHdpdGhpbiB0aGUgYG5ldG5zX25mYCBzdHJ1Y3R1cmUuIFdoZW4gaG9va3MgYXJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkLCB0aGVzZSBzZXF1ZW5jZSBudW1iZXJzIGFyZSBpbmNyZW1lbnRlZCB1c2luZyBgYnVtcF9ob29rX2Jhc2Vfc2VxYCBhbmQgYGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXFgLiBEdXJpbmcgbmV0bGluayBkdW1wcyAoYG5mbmxfaG9va19kdW1wYCBhbmQgYG5mbmxfaG9va19kdW1wX25hdGApLCB0aGVzZSBzZXF1ZW5jZSBudW1iZXJzIGFyZSBzdG9yZWQgYW5kIGNoZWNrZWQgdXNpbmcgYGNiLSZndDtzZXFgIGFuZCBgY2ItJmd0O2FyZ3NbMl1gLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBMZXQmIzM5O3Mgc2VlLgoKKiAgICoqU3RydWN0dXJlIEluaXRpYWxpemF0aW9uICZhbXA7IFVzZXItU3BhY2UgRXhwb3N1cmU6KiogRmlyc3QsIGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZCwgb3Igd2hlcmUgc3RydWN0dXJlIHBhZGRpbmcgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkPyBOby4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyBidWlsdCBhcmUgdW5jaGFuZ2VkLCBhbmQgdGhlIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGBjdHhgLCBgbmV0bnNfbmZgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKHVzaW5nIGBremFsbG9jYCBvciBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCkuIGBuZXRuc19uZmAgaXMgcGFydCBvZiBgc3RydWN0IG5ldGAsIHdoaWNoIGlzIHplcm9lZCBvbiBhbGxvY2F0aW9uLCBhbmQgYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKKiAgICoqQ29uZGl0aW9uYWwgTG9naWMgJmFtcDsgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4gSSYjMzk7bSBzZWVpbmcgYWxsIHZhcmlhYmxlcywgbGlrZSBgYmFzZV9zZXFgLCBgaWAsIGBlcnJgLCBhbmQgYGN1cmAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGNiLSZndDthcmdzYCBhcnJheSBpcyB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgY29yZSB3aGVuIHRoZSBjYWxsYmFjayBpcyBzdGFydGVkLCBhbmQgdGhlbiB0aGUgcmVsZXZhbnQgZmllbGRzIGFyZSBhc3NpZ25lZCB2YWx1ZXMuCgoqICAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBEb2VzIHRoaXMgcGF0Y2ggYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBOby4gQWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgc2VlbSB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHkuCgoqICAgKipCb3VuZHMgQ2hlY2tzICZhbXA7IE1lbW9yeSBBY2Nlc3M6KiogRmluYWxseSwgZG9lcyB0aGUgcGF0Y2ggYWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBObywgYmFzZWQgb24gd2hhdCBJIHNlZS4KCkFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBpbmNsdWRpbmcgZXhhbWluaW5nIHRoZSB2YXJpYWJsZXMgaW4gYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYCwgYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBTcGVjaWZpY2FsbHksIHRoZSBzZXF1ZW5jZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgdG8gYDFgIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgLCBhbmQgdGhlIHN0YWNrIHZhcmlhYmxlcyBpbiB0aGUgZHVtcCBmdW5jdGlvbnMgYXJlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgdGhlaXIgdXNlLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSB0eXBlcyBvZiBidWdzIHRoYXQgKmNvdWxkKiBiZSBwcmVzZW50IGFyZSBwcmltYXJpbHkgY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zIChLQ1NBTi9MT0NLREVQL2NvZGUgcmV2aWV3KSwgbG9naWMgZXJyb3JzIGluIHRoZSBuZXRsaW5rIGR1bXAgcmVzdGFydC9wYWdpbmF0aW9uIHByb2Nlc3MgKGZ1bmN0aW9uYWwgdGVzdGluZyksIG9yIHBvdGVudGlhbCBwb2ludGVyIGRlcmVmZXJlbmNpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVuZGVyIFJDVSAoS0FTQU4pLiBCdXQgbm9uZSBvZiB0aGVzZSByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCBiZSBkZXRlY3RhYmxlICpvbmx5KiBieSBLTVNBTi4KClRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBwcmltYXJpbHkgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCBzZXF1ZW5jZSBjb3VudGVycyBmb3IgbmV0ZmlsdGVyIGhvb2sgbmV0bGluayBkdW1wcy4gQWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHNlcXVlbmNlIGNvdW50ZXJzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHJlbWFpbmluZyBjb25jZXJucyBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQL2Z1bmN0aW9uYWwgdGVzdGluZyByYXRoZXIgdGhhbiBLTVNBTi4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBuZXRsaW5rIGR1bXBpbmcgb2YgbmV0ZmlsdGVyIGhvb2tzIGJ5IHJlcGxhY2luZyBwb2ludGVyLWJhc2VkIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIHNlcXVlbmNlIGNvdW50ZXJzIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYHN0cnVjdCBuZXRuc19uZmApLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSBBbGwgYWRkZWQgZmllbGRzIGFuZCBsb2NhbCB2YXJpYWJsZXMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgYGJhc2Vfc2VxYCwgYGVycmAsIGBpYCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGBuZXRmaWx0ZXJfbmV0X2luaXRgIHNldHMgYmFzZSBzZXF1ZW5jZXMgdG8gMSwgYW5kIGR1bXAgY2FsbGJhY2tzIHByb3Blcmx5IGluaXRpYWxpemUgc3RhY2sgdmFyaWFibGVzIGFuZCBuZXRsaW5rIGNhbGxiYWNrIGFyZ3MpLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggUkNVIGRlcmVmZXJlbmNpbmcgb3IgaG9vayBpdGVyYXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9ucyBhcmUgbGlmZXRpbWUvY29uY3VycmVuY3kgaXNzdWVzIGFkZHJlc3NlZCBieSBLQVNBTi9MT0NLREVQLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBuZXRsaW5rIGR1bXBpbmcgb2YgbmV0ZmlsdGVyIGhvb2tzIGJ5IHJlcGxhY2luZyBwb2ludGVyLWJhc2VkIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIHNlcXVlbmNlIGNvdW50ZXJzIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYHN0cnVjdCBuZXRuc19uZmApLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSBBbGwgYWRkZWQgZmllbGRzIGFuZCBsb2NhbCB2YXJpYWJsZXMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgYGJhc2Vfc2VxYCwgYGVycmAsIGBpYCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGBuZXRmaWx0ZXJfbmV0X2luaXRgIHNldHMgYmFzZSBzZXF1ZW5jZXMgdG8gMSwgYW5kIGR1bXAgY2FsbGJhY2tzIHByb3Blcmx5IGluaXRpYWxpemUgc3RhY2sgdmFyaWFibGVzIGFuZCBuZXRsaW5rIGNhbGxiYWNrIGFyZ3MpLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggUkNVIGRlcmVmZXJlbmNpbmcgb3IgaG9vayBpdGVyYXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9ucyBhcmUgbGlmZXRpbWUvY29uY3VycmVuY3kgaXNzdWVzIGFkZHJlc3NlZCBieSBLQVNBTi9MT0NLREVQLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTozNzo0MS42NjQyMTg2MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA3MzM2ODc5MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mbmxfaG9va19kdW1wXCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9uYXRcIixcbiAgICBcIm5mbmxfaG9va19nZXRcIixcbiAgICBcIm5mX25hdF9yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfbmF0X3VucmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX3JlZ2lzdGVyX25ldF9ob29rXCIsXG4gICAgXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjM3OjQxLjY2NDIyNDYyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1Mjk2MzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6Mzc6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxcbmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxcbkBAIC0zMyw1ICszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9ERUZSQUdfSVBWNilcXG4gXFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xcbiAjZW5kaWZcXG4rXFx0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XFxuK1xcdHVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTtcXG4gfTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcXG5pbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcXG5AQCAtMzg2LDYgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcXG4rXFxuK1xcdHdoaWxlICgrK2Jhc2Vfc2VxID09IDApXFxuK1xcdFxcdDtcXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNm5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXFxuIHtcXG5AQCAtNDI4LDYgKzQzNyw3IEBAIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4gXFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcXG4gXFxuIFxcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcXG4rXFx0XFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcdFxcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XFxuIFxcdH1cXG5AQCAtNTA2LDYgKzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4gXFx0XFx0XFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcXG4gI2VuZGlmXFxuIFxcdFxcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xcbitcXHRcXHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXFxcIiwgcGYsIHJlZy1cXHUwMDNlaG9va251bSk7XFxuIFxcdH1cXG5AQCAtNzg0LDYgKzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiAjZW5kaWZcXG4rXFx0bmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcXG4rXFx0bmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG5pbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbkBAIC0xMTYwLDYgKzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbitzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XFxuK1xcbitcXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxcbitcXHRcXHQ7XFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuZXQtXFx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0ge1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcIm5hdC1mb2xsb3ctbWFzdGVyXFxcIixcXG4gXFx0LmV4cGVjdGZuXFx0PSBuZl9uYXRfZm9sbG93X21hc3RlcixcXG5AQCAtMTI0NSw4ICsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFxcdTAwMjZwcml2LVxcdTAwM2VlbnRyaWVzLCBvcHMpO1xcbi1cXHRpZiAocmV0ID09IDApXFxuK1xcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcdFxcdG5hdF9wcm90b19uZXQtXFx1MDAzZXVzZXJzKys7XFxuK1xcdH1cXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTI4NCw2ICsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XFxuIFxcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFxcdTAwMjZwcml2LVxcdTAwM2VlbnRyaWVzLCBvcHMpO1xcbitcXHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcbiBcXHRpZiAobmF0X3Byb3RvX25ldC1cXHUwMDNldXNlcnMgPT0gMCkge1xcbiBcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbmluZGV4IDk1MDA1ZTlhNjA2NjguLjMxMDEzYzMyMTA5OTYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXFxuQEAgLTU0LDcgKzU0LDYgQEAgc3RhdGljIGludCBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEge1xcbiBcXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xcbi1cXHR1bnNpZ25lZCBsb25nIGhlYWR2O1xcbiBcXHR1OCBob29rO1xcbiB9O1xcbiBcXG5AQCAtMzM4LDI3ICszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGVcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxcbi1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXFx1MDAzZXByaXY7XFxuLVxcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cXHUwMDNlZW50cmllcyk7XFxuK1xcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcXG4tXFx0aW50IGksIGVycjtcXG4rXFx0dW5zaWduZWQgaW50IGkgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4rXFx0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4rXFx0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuK1xcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XFxuK1xcbitcXHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXFx1MDAzZWVudHJpZXMpO1xcbiBcXHRpZiAoIWUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0bmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxcbi1cXHRcXHRcXHRcXHRcXHQgb3BzLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LCBzZXEpO1xcbitcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShuYXRfb3BzW2ldKSxcXG4rXFx0XFx0XFx0XFx0XFx0IG9wcy1cXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcXG4rXFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdGkgPSAwO1xcbitcXHR9XFxuK1xcdGNiLVxcdTAwM2VhcmdzWzFdID0gaTtcXG4rXFxuK1xcdGlmIChjYi1cXHUwMDNlYXJnc1syXSBcXHUwMDI2XFx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cXHUwMDNlYXJnc1syXSkge1xcbitcXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuK1xcdFxcdGVyciA9IC1FSU5UUjtcXG4rXFx0fVxcbitcXHRjYi1cXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRjYi1cXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcXG4gXFxuIFxcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVxcdTAwM2Vob29rLCBuZXQsIGN0eC1cXHUwMDNlZGV2bmFtZSk7XFxuLVxcdGlmICghZSlcXG4rXFx0aWYgKCFlIHx8IElTX0VSUihlKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXG4tXFx0aWYgKElTX0VSUihlKSkge1xcbi1cXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuLVxcdFxcdGdvdG8gZG9uZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LVxcdTAwM2VoZWFkdiB8fCBpIFxcdTAwM2U9IGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXMpXFxuLVxcdFxcdGNiLVxcdTAwM2VzZXErKztcXG4tXFxuIFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIFxcbiBcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbi1cXHRcXHRpZiAob3BzW2ldLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbi1cXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBvcHNbaV0tXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuK1xcbitcXHRcXHRpZiAoY3VyLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuK1xcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG4tXFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcXG4rXFx0aWYgKG5sc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbiBcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRzdHJzY3B5KGN0eC1cXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cXHUwMDNlZGV2bmFtZSkpO1xcbi1cXHRjdHgtXFx1MDAzZWhlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDtcXG4gXFx0Y3R4LVxcdTAwM2Vob29rID0gaG9va251bTtcXG4tXFxuLVxcdGNiLVxcdTAwM2VzZXEgPSAxO1xcbiBcXHRjYi1cXHUwMDNlZGF0YSA9IGN0eDtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTozNzo0My4yMTgzMDgwMTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNzg1NTg2NTE3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9ob29rX2R1bXBcIixcbiAgICBcIm5mbmxfaG9va19kdW1wX25hdFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIG51bWJlciB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBjb25zaXN0ZW5jeSBkdXJpbmcgbmV0bGluayBkdW1wcyBvZiBuZXRmaWx0ZXIgYmFzZSBob29rcyBhbmQgTkFUIGhvb2tzIHZpYSBuZm5ldGxpbmtfaG9vay4gSXQgYWx0ZXJzIGxvY2tsZXNzIGl0ZXJhdGlvbiwgcGFnaW5hdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nIGFjcm9zcyBkdW1wIGNhbGxiYWNrcywgd2hpY2ggaXMgdXNlci1yZWFjaGFibGUgdmlhIG5mbmV0bGluayBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDkzMTczOWRmOWVjNjE4M2RhMDZmYmE5NzgyYTI1NDJiYzQ5MzI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6Mzc6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5pbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5AQCAtMzMsNSArMzMsNyBAQCBzdHJ1Y3QgbmV0bnNfbmYge1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9ERUZSQUdfSVBWNilcbiBcdHVuc2lnbmVkIGludCBkZWZyYWdfaXB2Nl91c2VycztcbiAjZW5kaWZcbitcdHVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxO1xuK1x0dW5zaWduZWQgaW50IG5hdF9ob29rX2Jhc2Vfc2VxO1xuIH07XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuQEAgLTM4Niw2ICszODYsMTUgQEAgc3RhdGljIHZvaWQgbmZfc3RhdGljX2tleV9kZWMoY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIGludCBwZilcbiAjZW5kaWZcbiB9XG4gXG4rc3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuK1xuK1x0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcbitcdFx0O1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcbit9XG4rXG4gc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbiB7XG5AQCAtNDI4LDYgKzQzNyw3IEBAIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdG5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7XG4gXG4gXHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XG4rXHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xuIFx0fVxuQEAgLTUwNiw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcbiAjZW5kaWZcbiBcdFx0bmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7XG4rXHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0V0FSTl9PTkNFKDEsIFwiaG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZFwiLCBwZiwgcmVnLVx1MDAzZWhvb2tudW0pO1xuIFx0fVxuQEAgLTc4NCw2ICs3OTUsOCBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmV0ZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gI2VuZGlmXG4rXHRuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSA9IDE7XG4rXHRuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTE2MCw2ICsxMTYwLDE1IEBAIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIH1cbiAjZW5kaWZcbiBcbitzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxKTtcbitcbitcdHdoaWxlICgrK2Jhc2Vfc2VxID09IDApXG4rXHRcdDtcbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCJuYXQtZm9sbG93LW1hc3RlclwiLFxuIFx0LmV4cGVjdGZuXHQ9IG5mX25hdF9mb2xsb3dfbWFzdGVyLFxuQEAgLTEyNDUsOCArMTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0fVxuIFxuIFx0cmV0ID0gbmZfaG9va19lbnRyaWVzX2luc2VydF9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuLVx0aWYgKHJldCA9PSAwKVxuK1x0aWYgKHJldCA9PSAwKSB7XG4rXHRcdGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdFx0bmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycysrO1xuK1x0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTEyODQsNiArMTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0cHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjtcbiBcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbitcdGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcbiBcdGlmIChuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzID09IDApIHtcbiBcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuaW5kZXggOTUwMDVlOWE2MDY2OC4uMzEwMTNjMzIxMDk5NiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5AQCAtNTQsNyArNTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEge1xuIFx0Y2hhciBkZXZuYW1lW0lGTkFNU0laXTtcbi1cdHVuc2lnbmVkIGxvbmcgaGVhZHY7XG4gXHR1OCBob29rO1xuIH07XG4gXG5AQCAtMzM4LDI3ICszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGVcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4tXHRcdFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpXG4ge1xuIFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVx1MDAzZXByaXY7XG4tXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4rXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7XG4tXHRpbnQgaSwgZXJyO1xuK1x0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzFdO1xuK1x0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcTtcbitcdGludCBlcnIgPSAwO1xuIFxuK1x0YmFzZV9zZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4rXG4rXHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4gXHRpZiAoIWUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xuLVx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSxcbi1cdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LCBzZXEpO1xuK1x0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4rXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxuK1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuK1x0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4rXHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuK1xuIFx0fVxuLVx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWVycikge1xuK1x0XHRpID0gMDtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMV0gPSBpO1xuK1xuK1x0aWYgKGNiLVx1MDAzZWFyZ3NbMl0gXHUwMDI2XHUwMDI2IGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl0pIHtcbitcdFx0Y2ItXHUwMDNlc2VxKys7XG4rXHRcdGVyciA9IC1FSU5UUjtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gXG4gXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbi1cdGlmICghZSlcbitcdGlmICghZSB8fCBJU19FUlIoZSkpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdGlmIChJU19FUlIoZSkpIHtcbi1cdFx0Y2ItXHUwMDNlc2VxKys7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbi1cbi1cdGlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC1cdTAwM2VoZWFkdiB8fCBpIFx1MDAzZT0gZS1cdTAwM2VudW1faG9va19lbnRyaWVzKVxuLVx0XHRjYi1cdTAwM2VzZXErKztcbi1cbiBcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4gXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbi1cdFx0aWYgKG9wc1tpXS1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY3R4LCBvcHNbaV0sIGZhbWlseSxcbi1cdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgb3BzW2ldLFxuLVx0XHRcdFx0XHRcdCBvcHNbaV0tXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbitcbitcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuK1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbitcdFx0ZWxzZSB7XG4rXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbitcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuK1x0XHR9XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gZG9uZTpcbi1cdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4rXHRpZiAobmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwKVxuK1x0XHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gaTtcbiBcdHJldHVybiBubHNrYi1cdTAwM2VsZW47XG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdHJzY3B5KGN0eC1cdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVx1MDAzZWRldm5hbWUpKTtcbi1cdGN0eC1cdTAwM2VoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7XG4gXHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4tXG4tXHRjYi1cdTAwM2VzZXEgPSAxO1xuIFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6Mzc6NDMuMjE4MzA5Nzc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY2MDQzMTgxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIE15IGluaXRpYWwgc3RlcCBpcyBhbHdheXMgdG8gbG9vayBhdCB0aGUgdG91Y2hlZCBmaWxlcy4gQWxyaWdodCwgc28gd2UncmUgc2VlaW5nOiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLCBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCB3aGF0J3MgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9pbmcqPyBBaCwgaXQgYXBwZWFycyB0byBiZSB0cmFja2luZyBzZXF1ZW5jZSBudW1iZXJzLCBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAsIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcy4gSW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaW4gYG5mbmV0bGlua19ob29rLmNgLCBgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCBhcmUgdXNpbmcgYGNiLVx1MDAzZXNlcWAgYW5kIGBiYXNlX3NlcWAgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2hlbiBkdW1waW5nIG5ldGZpbHRlciBob29rcyBvdmVyIG5ldGxpbmsuIFBsdXMsIGl0IHNlZW1zIHRvIGJlIGZpeGluZyBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGl0ZXJhdGluZyBhbmQgcmVzdW1pbmcgYWNyb3NzIG5ldGxpbmsgZHVtcHMgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCByYWNlcywgd2hpY2ggSSd2ZSBzZWVuIGJlIGEgZ29vZCBzcG90IGZvciBmdXp6aW5nLlxuXG5NeSBuZXh0IG1vdmUgaXMgYWx3YXlzIHRvIGV4YW1pbmUgdGhlIGNvZGUgYW5kIGBLY29uZmlnYCBvcHRpb25zIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHN1YnN5c3RlbSBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBjb250ZXh0IGFuZCBlbnRyeSBwb2ludHMgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjM4OjM5LjgyMjYzMTk4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2NjM1MDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9ORVRMSU5LX0hPT0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6Mzg6NDEuMjc5Mjc1MTE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzOTYxNTM0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjpcblxuKipGaW5kaW5nIHRoZSBTb3VyY2Ugb2YgdGhlIEhvb2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYG5mbmV0bGlua19ob29rLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBuYXZpZ2F0ZSB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGZvciBhbnl0aGluZyBuZXR3b3JrIGZpbHRlcmluZyByZWxhdGVkLiBCdXQgSSdtIG5vdCBnb2luZyB0byBqdXN0IHN0YXJ0IHBva2luZyBhcm91bmQuIEknbSBnb2luZyB0byBmaW5kIGl0IHN5c3RlbWF0aWNhbGx5LlxuXG5XaGVyZSB3b3VsZCBJIG5vcm1hbGx5IGxvb2s/IE1ha2VmaWxlISBZZWFoLCB0aGF0J3MgaXQuIFRoYXQgaXMgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgb3RoZXIgb2JqZWN0cyBhcmUgZGVmaW5lZC5cbkl0J3MgbGlrZWx5IGxpc3RlZCBpbiBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIEhvcGVmdWxseSwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdXNpb24sIGJ1dCBldmVuIGlmIGl0J3MgcmVmZXJlbmNlZCB0aHJvdWdoIHNvbWUgaW5kaXJlY3QgZGVwZW5kZW5jeSwgdGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgYnVpbGQgcHJvY2Vzcy4gQWxyaWdodCwgbGV0J3MgZ2V0IHRvIGl0LiBUaW1lIHRvIGdyZXAgdGhyb3VnaCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTozOTowMS42NzU0MzA3MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxODc2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19PU0YpICs9IG5mbmV0bGlua19vc2Yub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICs9IG5mbmV0bGlua19ob29rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTMyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTIwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjIxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMjItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9NTExPU1PRFVMRV9BTElBU19ORk5MX1NVQlNZUyhORk5MX1NVQlNZU19IT09LKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtNTEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MTM6c3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2hvb2tfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NTE4OnN0YXRpYyB2b2lkIF9fZXhpdCBuZm5ldGxpbmtfaG9va19leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtNTIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MjM6bW9kdWxlX2luaXQobmZuZXRsaW5rX2hvb2tfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjUyNDptb2R1bGVfZXhpdChuZm5ldGxpbmtfaG9va19leGl0KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtNTI1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTUyNz1NT0RVTEVfQVVUSE9SKFxcXCJGbG9yaWFuIFdlc3RwaGFsIFxcdTAwM2Nmd0BzdHJsZW4uZGVcXHUwMDNlXFxcIik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjUyODpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIm5mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjM5OjAxLjczMTYyMjc5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNzY5NTAwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBvZiBteSBvd24gaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgTmV0ZmlsdGVyIE5ldGxpbmsgSG9va3MqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTmV0ZmlsdGVyIE5ldGxpbmsgSG9vayBmdW5jdGlvbmFsaXR5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0tgLiBUaGF0J3MgdGhlIHByaW1hcnkgdGFyZ2V0LCB0aGUga2V5IEkgbmVlZCB0byB0dXJuIHRvIHVubG9jayB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGNhcGFiaWxpdGllcy4gQnV0LCBpdCdzIG5ldmVyIGp1c3QgdGhhdCBzaW1wbGUsIGlzIGl0P1xuXG5JIGtub3cgSSBjYW4ndCBqdXN0IGFzc3VtZSBpdOKAmXMgZW5hYmxlZCBkaXJlY3RseSwgc28gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gV2hhdCBvdGhlciBmZWF0dXJlcyBvciB1bmRlcmx5aW5nIGNvbXBvbmVudHMgKm11c3QqIGJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGV2ZW4gc2VlIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PS2AgYXMgYW4gb3B0aW9uLCBsZXQgYWxvbmUgZW5hYmxlIGl0IG15c2VsZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgS2NvbmZpZyBoaWVyYXJjaHksIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljYWwgZ2F0ZXMgYW5kIGd1YXJkcmFpbHMgdGhhdCBjb250cm9sIHRoZSB2aXNpYmlsaXR5IGFuZCBhdmFpbGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBjb25maWcgb3B0aW9uLiBUaGlzIGlzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlICpjb25zdHJhaW50cyogYW5kIHRoZSAqcGF0aHdheXMqLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50aXJlIGVuYWJsaW5nIHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MDowNC41MDExMjYyMjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTc1OTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDA6MDYuMDIwODk5OTk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE1OTUyMjQ4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBhcm91bmQgbGluZSAzNi4gVGhhdCBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXRmaWx0ZXIgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBJ4oCZbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmb3Igc29tZSBvZiB0aGUgZmlsdGVyaW5nIHJ1bGVzIGlzIGRlZmluZWQuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgaG93IGEgc3BlY2lmaWMgbmV0d29yayBwYWNrZXQgaXMgcHJvY2Vzc2VkIGFuZCB3aGljaCBydWxlcyBpdCBnb2VzIHRocm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MDozNy42MTYxMjY5NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdFxcdGJvb2xcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICAyODpcXHRcXHRib29sXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxcbiAgMzE6XFx0XFx0Ym9vbFxcbiAgMzI6XFx0XFxuICAzMzpcXHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuICAzNDpcXHRcXHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbiAgMzc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuICA0MDpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNDM6XFx0XFx0ICB0byBsaXN0IHRoZSBiYXNlIG5ldGZpbHRlciBob29rcyB2aWEgTkZORVRMSU5LLlxcbiAgNDQ6XFx0XFx0ICBUaGlzIGlzIGhlbHBmdWwgZm9yIGRlYnVnZ2luZy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4gIDQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA0OTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNTI6XFx0XFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4gIDU1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgNTc6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcXG4gIDYwOlxcdFxcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQwOjM3LjYxNjIyMjg2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA1OTI1Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBORl9OQVQgY29uZmlndXJhdGlvbnMuIEl0J3MgZWFzeSB0byBnZXQgY2F1Z2h0IHVwIGluIHRoZSBoaWdoLWxldmVsIHN0dWZmLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aXRoIE5BVC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbXBpbGF0aW9uIHBhdGggZm9yIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIGJhY2sgdG8gd2hlcmUgaXQncyBjb21waWxlZCwgd2hpY2ggSSBzdHJvbmdseSBzdXNwZWN0IHdpbGwgYmUgaW4gYG5mX25hdF9jb3JlLmNgLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgcmVhbGx5IGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBhbmQgbGlua2VkLiBObyBzdG9uZSB1bnR1cm5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDA6NTkuNjc1NDc5MDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcyNjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9uYXRfY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19URlRQKSArPSBuZl9jb25udHJhY2tfdGZ0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS01NS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU2Om5mX25hdC15XFx0Oj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfcHJvdG8ubyBuZl9uYXRfaGVscGVyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTU3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMTg3LSNpZm5kZWYgTU9EVUxFXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjExODg6XFx0LyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMTg5LVxcdCAqIG1vZHVsZXMgbGlrZSBuZnRfY2hhaW5fbmF0LmtvIG1heSBzdGlsbCBjYWxsIHRoaXMgZnVuY3Rpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQwOjU5Ljc3MjIxMTI3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTcyMzEyMzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBuZXQvbmV0ZmlsdGVyYCBkaXJlY3RvcnkgYW5kIHNwZWNpZmljYWxseSBsaW5lIDU2IGluIHRoZSBgTWFrZWZpbGVgLiBUaGF0IGxpbmUgaXMgdGhlIHRhcmdldCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEkga25vdyBJJ20gaW50ZXJlc3RlZCBpbiBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyB0aGUgTWFrZWZpbGUgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbSBsaWtlbHkgbG9va2luZyBmb3IgaG93IGEgcGFydGljdWxhciBtb2R1bGUgb3IgY29tcG9uZW50IHdpdGhpbiBuZXRmaWx0ZXIgaXMgY29tcGlsZWQsIGxpbmtlZCwgb3IgaW5jbHVkZWQuIFBlcmhhcHMgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBhZGQgYSBuZXcgcnVsZSwgZGVidWcgYSBwcm9ibGVtLCBvciB1bmRlcnN0YW5kIHNvbWUgYnVpbGQtdGltZSBmbGFnLiBMaW5lIDU2IGlzIHRoZSBjcml0aWNhbCBwb2ludCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgc3RhcnQgdG8gZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgbmV0ZmlsdGVyJ3MgaW5uZXIgd29ya2luZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MTo1NS40OTUzMzgxMjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICs9IG5mX2Nvbm50cmFja19zbm1wLm9cXG4gIDUxOlxcdG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCkgKz0gbmZfY29ubnRyYWNrX3BwdHAub1xcbiAgNTI6XFx0b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TQU5FKSArPSBuZl9jb25udHJhY2tfc2FuZS5vXFxuICA1MzpcXHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCkgKz0gbmZfY29ubnRyYWNrX3NpcC5vXFxuICA1NDpcXHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFApICs9IG5mX2Nvbm50cmFja190ZnRwLm9cXG4gIDU1OlxcdFxcbiAgNTY6XFx0bmZfbmF0LXlcXHQ6PSBuZl9uYXRfY29yZS5vIG5mX25hdF9wcm90by5vIG5mX25hdF9oZWxwZXIub1xcbiAgNTc6XFx0XFxuICA1ODpcXHRvYmotJChDT05GSUdfTkZfTE9HX1NZU0xPRykgKz0gbmZfbG9nX3N5c2xvZy5vXFxuICA1OTpcXHRcXG4gIDYwOlxcdG9iai0kKENPTkZJR19ORl9OQVQpICs9IG5mX25hdC5vXFxuICA2MTpcXHRuZl9uYXQtJChDT05GSUdfTkZfTkFUX1JFRElSRUNUKSArPSBuZl9uYXRfcmVkaXJlY3Qub1xcbiAgNjI6XFx0bmZfbmF0LSQoQ09ORklHX05GX05BVF9NQVNRVUVSQURFKSArPSBuZl9uYXRfbWFzcXVlcmFkZS5vXFxuICA2MzpcXHRuZl9uYXQtJChDT05GSUdfTkZfTkFUX09WUykgKz0gbmZfbmF0X292cy5vXFxuICA2NDpcXHRcXG4gIDY1OlxcdGlmZXEgKCQoQ09ORklHX05GX05BVCksbSlcXG4gIDY2OlxcdG5mX25hdC0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSArPSBuZl9uYXRfYnBmLm9cXG4gIDY3OlxcdGVsc2UgaWZlcSAoJChDT05GSUdfTkZfTkFUKSx5KVxcbiAgNjg6XFx0bmZfbmF0LSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBuZl9uYXRfYnBmLm9cXG4gIDY5OlxcdGVuZGlmXFxuICA3MDpcXHRcXG4gIDcxOlxcdCMgTkFUIGhlbHBlcnNcXG4gIDcyOlxcdG9iai0kKENPTkZJR19ORl9OQVRfQU1BTkRBKSArPSBuZl9uYXRfYW1hbmRhLm9cXG4gIDczOlxcdG9iai0kKENPTkZJR19ORl9OQVRfRlRQKSArPSBuZl9uYXRfZnRwLm9cXG4gIDc0OlxcdG9iai0kKENPTkZJR19ORl9OQVRfSVJDKSArPSBuZl9uYXRfaXJjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDE6NTUuNDk1NDE4MTQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzQ2MTI3NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEhvb2sgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgTmV0ZmlsdGVyIGhvb2tzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgdGhlIE5ldGxpbmsgaW50ZXJmYWNlLiBSaWdodCwgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgcmVnaXN0cmF0aW9uIGFuZCBkaXNwYXRjaGluZyBtZWNoYW5pc21zLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiBob3cgTmV0bGluayBtZXNzYWdlcyBnZXQgcHJvY2Vzc2VkIGFuZCB1bHRpbWF0ZWx5IHBhc3NlZCB0byB0aGUgcmVnaXN0ZXJlZCBob29rIGZ1bmN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgbmV0bGluayBtZXNzYWdlIGhhbmRsZXJzLCB0aGUgaG9vayByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGUgcGF5bG9hZCBpcyBhY3R1YWxseSBwYXNzZWQgdGhyb3VnaCB0aGUgZGlmZmVyZW50IGxheWVycy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgZm9yIGxhdGVyLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBjb2RlIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDkyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MjoxMi44NDE1NDc5ODFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4gNDA1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdGlmIChjdXItXFx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXFxuIDQwODpcXHRcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuIDQwOTpcXHRcXHRcXHRlbHNlIHtcXG4gNDEwOlxcdFxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxuIDQxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuIDQxMzpcXHRcXHRcXHR9XFxuIDQxNDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdGRvbmU6XFxuIDQxOTpcXHRcXHRpZiAobmxza2ItXFx1MDAzZWxlbiBcXHUwMDNlIDApXFxuIDQyMDpcXHRcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiA0MjE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQyMjpcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IGk7XFxuIDQyMzpcXHRcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG4gNDI0OlxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDQyNzpcXHR7XFxuIDQyODpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNDI5OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXFx1MDAzZWRhdGE7XFxuIDQzMDpcXHRcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gTlVMTDtcXG4gNDMxOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGNiLVxcdTAwM2Vza2ItXFx1MDAzZXNrKTtcXG4gNDMyOlxcdFxcdHU4IGZhbWlseSA9IG5mbXNnLVxcdTAwM2VuZmdlbl9mYW1pbHk7XFxuIDQzMzpcXHRcXHRjaGFyIG5hbWVbSUZOQU1TSVpdID0gXFxcIlxcXCI7XFxuIDQzNDpcXHRcXHRjb25zdCB2b2lkICpoZWFkO1xcbiA0MzU6XFx0XFx0dTMyIGhvb2tudW07XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdGhvb2tudW0gPSBudG9obChubGFfZ2V0X2JlMzIobmxhW05GTkxBX0hPT0tfSE9PS05VTV0pKTtcXG4gNDM4OlxcdFxcdGlmIChob29rbnVtIFxcdTAwM2UgMjU1KVxcbiA0Mzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19ORVRERVYpIHtcXG4gNDQyOlxcdFxcdFxcdGlmICghbmxhW05GTkxBX0hPT0tfREVWXSlcXG4gNDQzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHRcXHRubGFfc3Ryc2NweShuYW1lLCBubGFbTkZOTEFfSE9PS19ERVZdLCBzaXplb2YobmFtZSkpO1xcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDQ0OTpcXHRcXHQvKiBOb3QgZGVyZWZlcmVuY2VkOyBmb3IgY29uc2lzdGVuY3kgY2hlY2sgb25seSAqL1xcbiA0NTA6XFx0XFx0aGVhZCA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBob29rbnVtLCBuZXQsIG5hbWUpO1xcbiA0NTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdFxcdGlmIChoZWFkIFxcdTAwMjZcXHUwMDI2IElTX0VSUihoZWFkKSlcXG4gNDU0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGhlYWQpO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcXG4gNDU3OlxcdFxcdGlmICghY3R4KVxcbiA0NTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdFxcdHN0cnNjcHkoY3R4LVxcdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVxcdTAwM2VkZXZuYW1lKSk7XFxuIDQ2MTpcXHRcXHRjdHgtXFx1MDAzZWhvb2sgPSBob29rbnVtO1xcbiA0NjI6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBjdHg7XFxuIDQ2MzpcXHRcXG4gNDY0OlxcdFxcdHJldHVybiAwO1xcbiA0NjU6XFx0fVxcbiA0NjY6XFx0XFxuIDQ2NzpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0b3Aoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA0Njg6XFx0e1xcbiA0Njk6XFx0XFx0a2ZyZWUoY2ItXFx1MDAzZWRhdGEpO1xcbiA0NzA6XFx0XFx0cmV0dXJuIDA7XFxuIDQ3MTpcXHR9XFxuIDQ3MjpcXHRcXG4gNDczOlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0NzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIDQ3NTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbiA0NzY6XFx0e1xcbiA0Nzc6XFx0XFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcXG4gNDc4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0RVTVApIHtcXG4gNDgxOlxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbiA0ODI6XFx0XFx0XFx0XFx0LnN0YXJ0ID0gbmZubF9ob29rX2R1bXBfc3RhcnQsXFxuIDQ4MzpcXHRcXHRcXHRcXHQuZG9uZSA9IG5mbmxfaG9va19kdW1wX3N0b3AsXFxuIDQ4NDpcXHRcXHRcXHRcXHQuZHVtcCA9IG5mbmxfaG9va19kdW1wLFxcbiA0ODU6XFx0XFx0XFx0XFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxcbiA0ODY6XFx0XFx0XFx0XFx0LmRhdGEgPSAodm9pZCAqKW5sYSxcXG4gNDg3OlxcdFxcdFxcdH07XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdFxcdHJldHVybiBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KGluZm8tXFx1MDAzZXNrLCBza2IsIGluZm8tXFx1MDAzZW5saCwgXFx1MDAyNmMpO1xcbiA0OTA6XFx0XFx0fVxcbiA0OTE6XFx0XFxuIDQ5MjpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZm5sX2hvb2tfY2JbTkZOTF9NU0dfSE9PS19NQVhdID0ge1xcbiA0OTY6XFx0XFx0W05GTkxfTVNHX0hPT0tfR0VUXSA9IHtcXG4gNDk3OlxcdFxcdFxcdC5jYWxsXFx0XFx0PSBuZm5sX2hvb2tfZ2V0LFxcbiA0OTg6XFx0XFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfUkNVLFxcbiA0OTk6XFx0XFx0XFx0LmF0dHJfY291bnRcXHQ9IE5GTkxBX0hPT0tfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MjoxMi44NDE2ODYyNDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY3MTczMzA1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBwYXJ0aWN1bGFyIGNvZGU6XG5cbioqRGl2aW5nIGludG8gbmZuZXRsaW5rX2hvb2suYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlc3Qgb2YgYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIG5ldGZpbHRlciBob29rcyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYXQgdGhlIG5ldGxpbmsgbGV2ZWwuIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGhpZ2gtbGV2ZWwgY29uY2VwdHMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyBiZWluZyB1c2VkPyBIb3cgYXJlIHRoZSBob29rcyByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQ/IEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjb3JlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIG5ldGxpbmsgY29tbXVuaWNhdGlvbiBsYXllci4gSSB3YW50IHRvIGxvb2sgZm9yIGRldGFpbHMgb24gaG93IHRoZSBob29rIGZ1bmN0aW9ucyBhcmUgY2hhaW5lZCBhbmQgaG93IHRoZSBwYXlsb2FkIGlzIGNvbnN0cnVjdGVkIGFuZCB0cmFuc21pdHRlZC4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGZsb3csIGZyb20gdGhlIGtlcm5lbCBtb2R1bGUncyBwZXJzcGVjdGl2ZS4gSXQncyB0aW1lIHRvIHNlZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDI6MjkuNTU5MDE5NzA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9ob29rX2NiW05GTkxfTVNHX0hPT0tfTUFYXSA9IHtcXG4gNDk2OlxcdFxcdFtORk5MX01TR19IT09LX0dFVF0gPSB7XFxuIDQ5NzpcXHRcXHRcXHQuY2FsbFxcdFxcdD0gbmZubF9ob29rX2dldCxcXG4gNDk4OlxcdFxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX1JDVSxcXG4gNDk5OlxcdFxcdFxcdC5hdHRyX2NvdW50XFx0PSBORk5MQV9IT09LX01BWCxcXG4gNTAwOlxcdFxcdFxcdC5wb2xpY3lcXHRcXHQ9IG5mbmxfaG9va19ubGFfcG9saWN5XFxuIDUwMTpcXHRcXHR9LFxcbiA1MDI6XFx0fTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5maG9va19zdWJzeXMgPSB7XFxuIDUwNTpcXHRcXHQubmFtZVxcdFxcdFxcdFxcdD0gXFxcIm5maG9va1xcXCIsXFxuIDUwNjpcXHRcXHQuc3Vic3lzX2lkXFx0XFx0XFx0PSBORk5MX1NVQlNZU19IT09LLFxcbiA1MDc6XFx0XFx0LmNiX2NvdW50XFx0XFx0XFx0PSBORk5MX01TR19IT09LX01BWCxcXG4gNTA4OlxcdFxcdC5jYlxcdFxcdFxcdFxcdD0gbmZubF9ob29rX2NiLFxcbiA1MDk6XFx0fTtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0hPT0spO1xcbiA1MTI6XFx0XFxuIDUxMzpcXHRzdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfaG9va19pbml0KHZvaWQpXFxuIDUxNDpcXHR7XFxuIDUxNTpcXHRcXHRyZXR1cm4gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcXHUwMDI2bmZob29rX3N1YnN5cyk7XFxuIDUxNjpcXHR9XFxuIDUxNzpcXHRcXG4gNTE4OlxcdHN0YXRpYyB2b2lkIF9fZXhpdCBuZm5ldGxpbmtfaG9va19leGl0KHZvaWQpXFxuIDUxOTpcXHR7XFxuIDUyMDpcXHRcXHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXFx1MDAyNm5maG9va19zdWJzeXMpO1xcbiA1MjE6XFx0fVxcbiA1MjI6XFx0XFxuIDUyMzpcXHRtb2R1bGVfaW5pdChuZm5ldGxpbmtfaG9va19pbml0KTtcXG4gNTI0OlxcdG1vZHVsZV9leGl0KG5mbmV0bGlua19ob29rX2V4aXQpO1xcbiA1MjU6XFx0XFxuIDUyNjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDUyNzpcXHRNT0RVTEVfQVVUSE9SKFxcXCJGbG9yaWFuIFdlc3RwaGFsIFxcdTAwM2Nmd0BzdHJsZW4uZGVcXHUwMDNlXFxcIik7XFxuIDUyODpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIm5mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQyOjI5LjU2MTE4MjYyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ1OTIxNjU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIHNlZSBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enouIEZpcnN0LCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBJdCdzIHRvdWNoaW5nIG5ldGZpbHRlciBob29rIHNlcXVlbmNlIHRyYWNraW5nLCBpbXBsZW1lbnRpbmcgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIHVzaW5nIGBSRUFEX09OQ0VgLCBgc21wX2xvYWRfYWNxdWlyZWAsIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIGR1cmluZyBuZXRsaW5rIGR1bXBpbmcgb2YgaG9va3MsIGFuZCBOQVQgaG9va3MsIHBhZ2luYXRpb24vYXJncyBoYW5kbGluZyBhY3Jvc3MgZHVtcCBjYWxscywgYW5kIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIGBubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnRgLiBDcnVjaWFsbHksIHRoaXMgbmV0ZmlsdGVyIGhvb2sgZHVtcCBpcyB1c2VyLXRyaWdnZXJhYmxlIHZpYSB0aGUgYG5mbmV0bGlua2Agc29ja2V0IChBRl9ORVRMSU5LIHdpdGggdGhlIE5FVExJTktfTkVURklMVEVSIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGBORk5MX1NVQlNZU19IT09LYCkuIFRoaXMga2luZCBvZiBhY2Nlc3MgaXMgcmlnaHQgdXAgb3VyIGFsbGV5IOKAkyBjb3JlIG5ldGZpbHRlci9uZm5ldGxpbmsgY29kZSwgcmVhY2hhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoYXQgYWxvbmUgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC5cblxuTm93LCB3aGljaCBzeW1ib2xzIHNob3VsZCBiZSBvdXIgZm9jdXM/IExldCdzIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycy4gV2UndmUgZ290IGBuZm5sX2hvb2tfZ2V0YCwgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLlxuXG5IYW5nIG9uLCB3ZSBuZWVkIHRvIGNsYXJpZnkgd2hhdCB0aGUgKmVudHJ5cG9pbnRzKiBhcmUsIGFuZCB3aGF0IGlzbid0IHN0YXRpYy4gYG5mbmxfaG9va19nZXRgIGlzIHN0YXRpYywgcmVmZXJlbmNlZCB3aXRoaW4gYG5mbmxfaG9va19jYmAuIFRoYXQncyBsZXNzIGlkZWFsLCB0aG91Z2ggc3l6a2FsbGVyIGNhbiBzdGlsbCB3b3JrIHdpdGggaXQgaWYgaXQncyBub3QgaW5saW5lZC4gYG5mX25hdF9yZWdpc3Rlcl9mbmAgYW5kIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIGZyb20gYG5mX25hdF9jb3JlLmNgLiBTYW1lIHdpdGggYG5mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgIGZvdW5kIGluIGBjb3JlLmNgLiBJbiBgbmZuZXRsaW5rX2hvb2suY2AsIHdlJ3ZlIGdvdCBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYW5kIGBuZm5sX2hvb2tfZ2V0YC4gIElkZWFsbHksIHdlJ3JlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCwgZXNwZWNpYWxseSBub24tc3RhdGljIG9yIGVudHJ5cG9pbnRzLiBUaGVzZSBhcmUgaWRlYWwgZm9yIHN5emthbGxlciBLQ09WIGFuZCBmb2N1cyBzeW1ib2wgdGFyZ2V0aW5nLiBUaGlzIHBvaW50cyB1cyByaWdodCBiYWNrIHRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBuZm5sX2hvb2tfZ2V0YCwgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYC4gVGltZSB0byB2ZXJpZnkgdGhhdCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIGlzIGluZGVlZCBpbiBgY29yZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0Mjo0My4wMjA0MDE0NDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTQ1ODg3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2NvcmUuYz0zODk9c3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTM5Ny1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzozOTg6c3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTM5OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9NTU5PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NjAtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTYxOmludCBuZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NjYtXFx0XFx0aWYgKHJlZy1cXHUwMDNlaG9va251bSA9PSBORl9JTkVUX0lOR1JFU1MpIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1Njc6XFx0XFx0XFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSU5FVCwgcmVnKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NjgtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzAtXFx0XFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1NzE6XFx0XFx0XFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSVBWNCwgcmVnKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzItXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzQtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTc1OlxcdFxcdFxcdGVyciA9IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lQVjYsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTc2LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01ODEtXFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1ODI6XFx0XFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIHJlZy1cXHUwMDNlcGYsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTgzLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTg4LX1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1ODk6RVhQT1JUX1NZTUJPTChuZl9yZWdpc3Rlcl9uZXRfaG9vayk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTkwLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU5MTppbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTkyLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKykge1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU5ODpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFxcdTAwMjZyZWdbaV0pO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU5OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjA4LX1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MDk6RVhQT1JUX1NZTUJPTChuZl9yZWdpc3Rlcl9uZXRfaG9va3MpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYxMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQyMj1pbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0My1cXHRpZiAoIShpcHZzLVxcdTAwM2Vob29rc19hZm1hc2sgXFx1MDAyNiBhZm1hc2spKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDQ0OlxcdFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhpcHZzLVxcdTAwM2VuZXQsIG9wcywgY291bnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0NS1cXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM9MjEwPWludCBicGZfbmZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0yNTYtXFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jOjI1NzpcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFxcdTAwMjZsaW5rLVxcdTAwM2Vob29rX29wcyk7XFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTI1OC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTQ0Mz1zdGF0aWMgaW50IG5mX2N0X25ldG5zX2RvX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHU4IG5mcHJvdG8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ2MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ2MjpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY0X2Nvbm50cmFja19vcHMsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy00NjMtXFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ4MDpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy00ODEtXFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTUwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjUwNzpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuZl9jdF9icmlkZ2VfaW5mby1cXHUwMDNlb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTA4LVxcdFxcdFxcdFxcdFxcdCAgICBuZl9jdF9icmlkZ2VfaW5mby1cXHUwMDNlb3BzX3NpemUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMjM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzoxMjM1OlxcdFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEyMzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jPTc3Mj1pbnQgbmZfc3lucHJveHlfaXB2NF9pbml0KHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTc3Ny1cXHRpZiAoc25ldC1cXHUwMDNlaG9va19yZWY0ID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYzo3Nzg6XFx0XFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2NF9zeW5wcm94eV9vcHMsXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtNzc5LVxcdFxcdFxcdFxcdFxcdCAgICBBUlJBWV9TSVpFKGlwdjRfc3lucHJveHlfb3BzKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYz0xMjAzPW5mX3N5bnByb3h5X2lwdjZfaW5pdChzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy0xMjA4LVxcdGlmIChzbmV0LVxcdTAwM2Vob29rX3JlZjYgPT0gMCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jOjEyMDk6XFx0XFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9zeW5wcm94eV9vcHMsXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtMTIxMC1cXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzE2PXN0YXRpYyBpbnQgbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjUtXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZob29rLVxcdTAwM2VvcHNfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyNjpcXHRcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI3LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDI1PXN0YXRpYyBpbnQgbmZfdGFibGVzX3JlZ2lzdGVyX2hvb2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ0NTpcXHRyZXR1cm4gbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2VvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0Ni19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDA5PXN0YXRpYyBpbnQgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9vcHMoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTAxOS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MDIwOlxcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDIxLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM9MzIyPXN0YXRpYyBpbnQgbmZ0X25ldGRldl9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmMtMzU5LVxcdFxcdFxcdGlmICghKHRhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9UQUJMRV9GX0RPUk1BTlQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM6MzYwOlxcdFxcdFxcdCAgICBuZl9yZWdpc3Rlcl9uZXRfaG9vayhkZXZfbmV0KGRldiksIG9wcykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYy0zNjEtXFx0XFx0XFx0XFx0a2ZyZWUob3BzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xNTU1PXN0cnVjdCB4dF90YWJsZSAqeHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2MTAtXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjE2MTE6XFx0XFx0cmV0ID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgb3BzLCBudW1fb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxMi1cXHRcXHRpZiAocmV0ICE9IDApIHtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxMy1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnh0W3RhYmxlLVxcdTAwM2VhZl0ubXV0ZXgpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNjE0OlxcdFxcdFxcdC8qIG5mX3JlZ2lzdGVyX25ldF9ob29rcygpIG1pZ2h0IGhhdmUgcHVibGlzaGVkIGFcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxNS1cXHRcXHRcXHQgKiBiYXNlIGNoYWluIGJlZm9yZSBpbnRlcm5hbCBlcnJvciB1bndpbmQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQyOjQ0LjkxNDk5NDgwNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTg0MDE2MTQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIERlcGVuZGVuY3kgUmV2aWV3KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBORVRGSUxURVJfTkVUTElOS19IT09LYCBpcyBjb3JyZWN0bHkgc2V0IHVwLiBGaXJzdCwgbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgSSBzZWUgaXQgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgYE5GX1RBQkxFU2AgYW5kIGFsc28gc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLlxuXG5Ob3cgSSBzZWU6XG4qICAgYENPTkZJR19ORVRGSUxURVJgXG4qICAgYENPTkZJR19ORl9OQVRgXG4qICAgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LYFxuKiAgIGBDT05GSUdfTkZfVEFCTEVTYFxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgcGFyZW50IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgYE5FVEZJTFRFUmAsIGBORl9OQVRgLCBhbmQgYE5GX1RBQkxFU2AuIEknbGwgc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfTkFUYCB0byBtYXAgb3V0IHRoZSBmdWxsIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gb3JkZXIsIG90aGVyd2lzZSwgSSBtaWdodCBoYXZlIHNvbWUgbmFzdHkgYnVpbGQgZXJyb3JzIG9yLCB3b3JzZSwgZnVuY3Rpb25hbGl0eSB0aGF0IGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZC4gVGltZSB0byB0cmFjZSB0aGUgcmFiYml0IGhvbGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQzOjU0Ljc1NTE2MDM2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTM0MzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDM6NTYuNTE2NTEwOTc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTYwNTY5MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbmZpZyBORl9OQVRgIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiAoTkFUKSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGFuZCBkb3VibGUtY2hlY2sgaG93IGBjb25maWcgTkZfTkFUYCBpcyBkZWZpbmVkLiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaXQncyBzaXR1YXRlZCBpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suIElzIGl0IGEgY29yZSBtb2R1bGUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG90aGVyLCBtb3JlIGJhc2ljIE5BVCBjb21wb25lbnRzPyBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYW55IGNoYW5nZXMgSSBtaWdodCBiZSBjb25zaWRlcmluZy4gSSdtIGFsc28gaG9waW5nIHRoZSBoZWxwIHRleHQgd2lsbCByZW1pbmQgbWUgb2YgYW55IG9ic2N1cmUgbnVhbmNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDQ6MDcuNDc3MTA2NTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk5NjY1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM5OD1jb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDA3OmNvbmZpZyBORl9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDQ6MDcuNjE3MDc3NTg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzUwNDc2Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQwNy4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgYSByZWxhdGVkIGJsb2NrIG9mIG9wdGlvbnMsIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gS25vd2luZyBob3cgdGhpcyBpcyBsYWlkIG91dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhbmQgbWFuYWdlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbnkgcHJvbXB0cywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3Igd2hhdGV2ZXIgSSdtIGludmVzdGlnYXRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDQ6MzIuMzY3NTU2OTMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdFxcdCAgdGhlIGVucXVldWVkIHZpYSBORk5FVExJTksuXFxuIDQwNjpcXHRcXG4gNDA3OlxcdGNvbmZpZyBORl9OQVRcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gc3VwcG9ydFxcXCJcXG4gNDA5OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDQxMDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gNDExOlxcdFxcdGhlbHBcXG4gNDEyOlxcdFxcdCAgVGhlIE5BVCBvcHRpb24gYWxsb3dzIG1hc3F1ZXJhZGluZywgcG9ydCBmb3J3YXJkaW5nIGFuZCBvdGhlclxcbiA0MTM6XFx0XFx0ICBmb3JtcyBvZiBmdWxsIE5ldHdvcmsgQWRkcmVzcyBQb3J0IFRyYW5zbGF0aW9uLiBUaGlzIGNhbiBiZVxcbiA0MTQ6XFx0XFx0ICBjb250cm9sbGVkIGJ5IGlwdGFibGVzLCBpcDZ0YWJsZXMgb3IgbmZ0LlxcbiA0MTU6XFx0XFxuIDQxNjpcXHRjb25maWcgTkZfTkFUX0FNQU5EQVxcbiA0MTc6XFx0XFx0dHJpc3RhdGVcXG4gNDE4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVFxcbiA0MTk6XFx0XFx0ZGVmYXVsdCBORl9OQVQgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRjb25maWcgTkZfTkFUX0ZUUFxcbiA0MjI6XFx0XFx0dHJpc3RhdGVcXG4gNDIzOlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVFxcbiA0MjQ6XFx0XFx0ZGVmYXVsdCBORl9OQVQgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX0ZUUFxcbiA0MjU6XFx0XFxuIDQyNjpcXHRjb25maWcgTkZfTkFUX0lSQ1xcbiA0Mjc6XFx0XFx0dHJpc3RhdGVcXG4gNDI4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVFxcbiA0Mjk6XFx0XFx0ZGVmYXVsdCBORl9OQVQgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX0lSQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NDozMi4zNjc3MTcyNDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwNjI3ODI2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uKipcblxuT2theSwgc28gYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBkZWVwZXIgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyYXRpb24gdHdlYWtzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBiYXNpY3MgYXJlIGluIHBsYWNlLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIGFtaXNzLCBwcm9iYWJseSB3aXRoIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gdHJhY2tpbmcuIExldCdzIHNlZSBpZiB0aGUgcmVsZXZhbnQga2VybmVsIG1vZHVsZSBpcyBldmVuIGxvYWRlZC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBjb25maWcgTkZfQ09OTlRSQUNLYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBJZiB0aGF0J3Mgbm90IHJpZ2h0LCBldmVyeXRoaW5nIGVsc2UgaXMganVzdCB3YXN0ZWQgZWZmb3J0LiBObyBzZW5zZSBjaGFzaW5nIGdob3N0cyB1bnRpbCBJJ20gY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBjb25maWd1cmVkIHByb3Blcmx5LiBJJ2xsIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDU6MDkuNDMwNTAzMjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM3MjE1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDU6MTEuMjg0MjMxMDY5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDg4ODAzOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbmZpZyBORVRGSUxURVJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBjb25maWcgTkVURklMVEVSYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJdCdzIGEgZm91bmRhdGlvbmFsIGNvbXBvbmVudCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGNvbmZpZ3VyYXRpb24uIEnigJltIGltbWVkaWF0ZWx5IGdvaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpc3N1ZXMsIHZ1bG5lcmFiaWxpdGllcywgYW5kIHBlcmZvcm1hbmNlIGFzcGVjdHMgYXNzb2NpYXRlZCB3aXRoIGl0LiBXaGF0IGFyZSB0aGUga2V5IHNldHRpbmdzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgbWlzY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIGFueXRoaW5nIGp1bXBzIG91dCBhcyBwcm9ibGVtYXRpYyBvciByZXF1aXJpbmcgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NTozMy43NzMwMzk3NzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjU2OTczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0xNTQ9Y29uZmlnIE5FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xcbi0tXFxubmV0L0tjb25maWctMTY0LVxcbm5ldC9LY29uZmlnOjE2NTptZW51Y29uZmlnIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTE2Ni1cXHRib29sIFxcXCJOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgZnJhbWV3b3JrIChOZXRmaWx0ZXIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NTozMy45MTk2MTY2MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5Mzk2NzE4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBBZHZhbmNlZCBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGhpcyBpcyB0aGUganVtcGluZy1vZmYgcG9pbnQgZm9yIGFueSBkZWVwZXIgTmV0ZmlsdGVyIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGlmIGFkdmFuY2VkIE5ldGZpbHRlciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhdCB0aGlzIGxldmVsIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBnZXR0aW5nIGludG8gdGhlIGRldGFpbHMuIFRoYXQgc2V0dGluZyB3aWxsIGRpY3RhdGUgd2hhdCB0b29scyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBtZSBhcyBJIGdvIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0uIEl0J3MgdGhlIGZpcnN0IGZpbHRlci4gS25vd2luZyB0aGF0IHN0YXRlIGluZm9ybXMgYWxsIHRoZSBkZWNpc2lvbnMgSSdsbCBiZSBtYWtpbmcgYWJvdXQgcnVsZXMsIHRhcmdldHMsIGFuZCBob3cgSSdtIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHBhY2tldCBmaWx0ZXJpbmcgc3Vic3lzdGVtcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgYmFzaWMsIG9yIHRoZSBtb3JlIGV4cGFuc2l2ZSwgZmVhdHVyZXMgYXJlIGJlaW5nIHVzZWQuIFNvLCBsZXQncyBjaGVjayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NTo1Ni44NTkyOTE5NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MzcxNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcXG5uZXQvS2NvbmZpZy0yMTktXFxubmV0L0tjb25maWc6MjIwOmNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvS2NvbmZpZy0yMjEtXFx0Ym9vbCBcXFwiQWR2YW5jZWQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQ1OjU2Ljk5ODY2OTU3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk5ODcwODY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFx1MDAyNiBGdW5jdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZy4gSSd2ZSBnb3QgYSBjaGVja2xpc3Q6IGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGBORVRGSUxURVJfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19IT09LYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfTkFUYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgZm91bmRhdGlvbiBJIG5lZWQgaW4gcGxhY2UuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBhbmQgaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzLCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQgaGVyZS4gSSBzZWUgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZm5sX2hvb2tfZ2V0YCwgd2hpY2ggcG9pbnQgdG8gdGhlIG5ldHdvcmsgZmlsdGVyIG5ldGxpbmsgaG9vaydzIGRlYnVnZ2luZyBhbmQgcmV0cmlldmFsIG1lY2hhbmlzbXMuIFRoZW4gdGhlcmUgYXJlIHRoZSBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYCwgd2hpY2ggYXJlIG9idmlvdXNseSBjcml0aWNhbCBmb3IgTkFUIG9wZXJhdGlvbnMsIGhvb2tpbmcgYW5kIHVuaG9va2luZyBOQVQtcmVsYXRlZCBmdW5jdGlvbnMuIEFuZCBmaW5hbGx5LCB0aGUgc3RhbmRhcmQgYG5mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLCB3aGljaCBhcmUgdGhlIGZ1bmRhbWVudGFsIG5ldHdvcmsgaG9vayByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cblxuU2luY2UgSSdtIGRlYWxpbmcgd2l0aCBob29rcywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBuZl91bnJlZ2lzdGVyX25ldF9ob29rYCBpcyBpbmRlZWQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHNvIHRoYXQgSSBjYW4gY2FsbCBpdCBmcm9tIGVsc2V3aGVyZS4gVGhpcyBpcyBrZXkgZm9yIHRoZSBkeW5hbWljIGFzcGVjdHMgb2YgdGhpcyBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwOTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDY6MTUuOTk3MzgxMTk5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1NzcyNDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NjoxNy42MTMxNjI0MDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU1OTQyNzg5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBOZXRmaWx0ZXIgVW5yZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGhvdyBOZXRmaWx0ZXIgaG9va3MgYXJlIHVucmVnaXN0ZXJlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXR3b3JraW5nIG5hbWVzcGFjZS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCBlaXRoZXIgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgIG9yIHBlcmhhcHMgaXRzIHBsdXJhbCBjb3VudGVycGFydCwgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzYCwgaXMgdGhlIGZ1bmN0aW9uIEknbSBhZnRlci4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIHRoZSBzZWFyY2gsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBjb3JlIE5ldGZpbHRlciBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLi4uIFRpbWUgdG8gc3RhcnQgZ3JlcHBpbmcgYW5kIGNyb3NzLXJlZmVyZW5jaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQ2OjUzLjIwNzQ0MzczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY4ODYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9jb3JlLmM9NDczPXN0YXRpYyBib29sIG5mX3JlbW92ZV9uZXRfaG9vayhzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpvbGQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00OTAtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NDkxOnN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00OTItXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUzMi1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1MzM6dm9pZCBuZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTM0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUzNi1cXHRcXHRpZiAocmVnLVxcdTAwM2Vob29rbnVtID09IE5GX0lORVRfSU5HUkVTUykge1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjUzNzpcXHRcXHRcXHRfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lORVQsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTM4LVxcdFxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTM5OlxcdFxcdFxcdF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSVBWNCwgcmVnKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1NDA6XFx0XFx0XFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY2LCByZWcpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU0MS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQyLVxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTQzOlxcdFxcdF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIHJlZy1cXHUwMDNlcGYsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ0LVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NDUtfVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU0NjpFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfbmV0X2hvb2spO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU0Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTU2MT1pbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU3Ni1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU3NzpcXHRcXHRcXHRcXHRfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lQVjQsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTc4LVxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz01OTE9aW50IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjA1LVxcdGlmIChpIFxcdTAwM2UgMClcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MDY6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCByZWcsIGkpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYwNy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9NjA5PUVYUE9SVF9TWU1CT0wobmZfcmVnaXN0ZXJfbmV0X2hvb2tzKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTAtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NjExOnZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va3Moc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZyxcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTItXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaG9va2NvdW50KVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjE2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBob29rY291bnQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MTc6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFxcdTAwMjZyZWdbaV0pO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYxOC19XFxubmV0L25ldGZpbHRlci9jb3JlLmM6NjE5OkVYUE9SVF9TWU1CT0wobmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYyMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQ1MT12b2lkIGlwX3ZzX3VucmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ3MS1cXHRpZiAoaXB2cy1cXHUwMDNlaG9va3NfYWZtYXNrIFxcdTAwMjYgYWZtYXNrKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDcyOlxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKGlwdnMtXFx1MDAzZW5ldCwgb3BzLCBjb3VudCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDczLVxcdFxcdGlwdnMtXFx1MDAzZWhvb2tzX2FmbWFzayBcXHUwMDI2PSB+YWZtYXNrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jPTExMz1zdGF0aWMgdm9pZCBicGZfbmZfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0xMjEtXFx0aWYgKCFjbXB4Y2hnKFxcdTAwMjZuZl9saW5rLVxcdTAwM2VkZWFkLCAwLCAxKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYzoxMjI6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZl9saW5rLVxcdTAwM2VuZXQsIFxcdTAwMjZuZl9saW5rLVxcdTAwM2Vob29rX29wcyk7XFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTEyMy1cXHRcXHRicGZfbmZfZGlzYWJsZV9kZWZyYWcobmZfbGluayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTUzMj1zdGF0aWMgdm9pZCBuZl9jdF9uZXRuc19kb19wdXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MzktXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzNCBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2VyczQgPT0gMCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MDpcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU0MS1cXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGlwdjRfY29ubnRyYWNrX29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NDctXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzNiBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2VyczYgPT0gMCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0ODpcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU0OS1cXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NTctXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzX2JyaWRnZSBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2Vyc19icmlkZ2UgPT0gMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NTg6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuZl9jdF9icmlkZ2VfaW5mby1cXHUwMDNlb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTU5LVxcdFxcdFxcdFxcdFxcdFxcdG5mX2N0X2JyaWRnZV9pbmZvLVxcdTAwM2VvcHNfc2l6ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MTI2Nj12b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDAtXFx0aWYgKG5hdF9wcm90b19uZXQtXFx1MDAzZXVzZXJzID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTMwMTpcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYz03OTE9dm9pZCBuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtNzk1LVxcdGlmIChzbmV0LVxcdTAwM2Vob29rX3JlZjQgPT0gMClcXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYzo3OTY6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY0X3N5bnByb3h5X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy03OTctXFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShpcHY0X3N5bnByb3h5X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM9MTIyMz1uZl9zeW5wcm94eV9pcHY2X2Zpbmkoc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtMTIyNy1cXHRpZiAoc25ldC1cXHUwMDNlaG9va19yZWY2ID09IDApXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM6MTIyODpcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfc3lucHJveHlfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTEyMjktXFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzE2PXN0YXRpYyBpbnQgbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzQxOlxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0Mi1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zODc9c3RhdGljIHZvaWQgbmZ0X25ldGRldl91bnJlZ2lzdGVyX3RyYW5zX2hvb2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzk5LVxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcXHUwMDI2aG9vay1cXHUwMDNlb3BzX2xpc3QsIGxpc3QpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDAwOlxcdFxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQwMS1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MDc9c3RhdGljIHZvaWQgbmZ0X25ldGRldl91bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQxNy1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wcywgXFx1MDAyNmhvb2stXFx1MDAzZW9wc19saXN0LCBsaXN0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQxODpcXHRcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MTktXFx0XFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDQ4PXN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NzMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDc0OlxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2VvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3NS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODkxPXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMwNzYtXFx0XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZoLVxcdTAwM2VvcHNfbGlzdCwgbGlzdClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDc3OlxcdFxcdFxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2soY3R4LVxcdTAwM2VuZXQsIG9wcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzA3OC1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04OTc3PXN0YXRpYyB2b2lkIG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV9vcHMoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODk4MC17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODk4MTpcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTgyLVxcdGZsb3d0YWJsZS1cXHUwMDNlZGF0YS50eXBlLVxcdTAwM2VzZXR1cChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VkYXRhLCBvcHMtXFx1MDAzZWRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jPTMyMj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jLTM0MC1cXHRcXHRcXHRpZiAoISh0YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVEFCTEVfRl9ET1JNQU5UKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYzozNDE6XFx0XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhkZXZfbmV0KGRldiksIG9wcyk7XFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmMtMzQyLVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTE2NTg9dm9pZCB4dF91bnJlZ2lzdGVyX3RhYmxlX3ByZV9leGl0KHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTY2OS1cXHRcXHRcXHRpZiAodC1cXHUwMDNlb3BzKSAvKiBuYXQgdGFibGUgcmVnaXN0ZXJzIHdpdGggbmF0IGNvcmUsIHQtXFx1MDAzZW9wcyBpcyBOVUxMLiAqL1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNjcwOlxcdFxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgdC1cXHUwMDNlb3BzLCBod2VpZ2h0MzIodC1cXHUwMDNldmFsaWRfaG9va3MpKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTY3MS1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQ2OjUzLjMwMzEzNzM4OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjgzOTU4MjA4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0ZmlsdGVyJ3MgRnV6emluZyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggbWFwcGluZyBvdXQgdGhlIGtleSBjb21wb25lbnRzIGZvciBmdXp6aW5nIE5ldGZpbHRlciwgYW5kIGhlcmUncyBteSBicmVha2Rvd24uIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8ga2VlcCBteSBleWUgb24gYXJlIGNsZWFybHk6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBUaGVzZSBhcmUgdGhlIG5lcnZlIGNlbnRlcnMgb2YgaG9vayBtYW5hZ2VtZW50IGFuZCBOQVQgb3BlcmF0aW9ucywgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBleHBsb2l0YWJsZSBidWdzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoaW5ncy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zLiBUaGUgZXNzZW50aWFsIGNvbmZpZ3MgYXJlIGBORVRGSUxURVJgLCBvYnZpb3VzbHksIGJ1dCBhbHNvIHRoZSBhZHZhbmNlZCBvcHRpb25zIHVuZGVyIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfVEFCTEVTYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGNydWNpYWxseSwgYE5GX05BVGAuIFdpdGhvdXQgdGhlc2UsIG15IGZ1enppbmcgZWZmb3J0cyBhcmUgZ29pbmcgdG8gYmUgY3JpcHBsZWQuXG5cbkFscmlnaHQsIHRoZSBmaW5hbCBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSBwaWVjZXMgdG9nZXRoZXIuIExldCdzIHNlZS4uLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZSwgdGhhdCdzIGEgbm8tYnJhaW5lciBnaXZlbiB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzLiBUaGUgYFJlYXNvbmluZ2AgbmVlZHMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiBmb3IgdGhlIHZlcmRpY3QsIHdoaWNoIEkndmUgYWxyZWFkeSBpbnRlcm5hbGx5IHZlcmlmaWVkLiBUaGVuLCBmb3IgdGhlIGVuYWJsaW5nIGNvbmZpZ3MsIEknbGwgbmVlZCBhbiBhcnJheSBvZiBzdHJpbmdzLCBidXQgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gRmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5IGhhcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBuYW1lcyBJIGlkZW50aWZpZWQgZWFybGllci5cblxuV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIGFjY291bnRlZCBmb3IsIGl0J3MgdGltZSB0byB0cmlnZ2VyIHRoYXQgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk0NCwiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTU6NDEuNjk4OTYwOTg0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5OTY0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mbmxfaG9va19kdW1wXCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9uYXRcIixcbiAgICBcIm5mbmxfaG9va19nZXRcIixcbiAgICBcIm5mX25hdF9yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfbmF0X3VucmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX3JlZ2lzdGVyX25ldF9ob29rXCIsXG4gICAgXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBudW1iZXIgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGFuZCBlbnN1cmUgY29uc2lzdGVuY3kgZHVyaW5nIG5ldGxpbmsgZHVtcHMgb2YgbmV0ZmlsdGVyIGJhc2UgaG9va3MgYW5kIE5BVCBob29rcyB2aWEgbmZuZXRsaW5rX2hvb2suIEl0IGFsdGVycyBsb2NrbGVzcyBpdGVyYXRpb24sIHBhZ2luYXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgZHVtcCBjYWxsYmFja3MsIHdoaWNoIGlzIHVzZXItcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfSE9PS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZ2V0XCIsXG4gICAgXCJuZl9uYXRfcmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX25hdF91bnJlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9yZWdpc3Rlcl9uZXRfaG9va1wiLFxuICAgIFwibmZfdW5yZWdpc3Rlcl9uZXRfaG9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjU1OjQxLjc3Njk2MzE3MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MjI0MTEwMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTU6NDEuNzc3NDIzNTMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI3MjIzNjQ1NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTozNzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbkBAIC0zMyw1ICszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KVxuIFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xuICNlbmRpZlxuK1x0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XG4rXHR1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7XG4gfTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5pbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5AQCAtMzg2LDYgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxuICNlbmRpZlxuIH1cbiBcbitzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4rXG4rXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxuK1x0XHQ7XG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuK31cbitcbiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxuIHtcbkBAIC00MjgsNiArNDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcbiBcbiBcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XG4gXHR9XG5AQCAtNTA2LDYgKzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRuZXRfZGVjX2VncmVzc19xdWV1ZSgpO1xuICNlbmRpZlxuIFx0XHRuZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OQ0UoMSwgXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXCIsIHBmLCByZWctXHUwMDNlaG9va251bSk7XG4gXHR9XG5AQCAtNzg0LDYgKzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiAjZW5kaWZcbitcdG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcbitcdG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbkBAIC0xMTYwLDYgKzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuK1xuK1x0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcbitcdFx0O1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIm5hdC1mb2xsb3ctbWFzdGVyXCIsXG4gXHQuZXhwZWN0Zm5cdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXG5AQCAtMTI0NSw4ICsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHR9XG4gXG4gXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4tXHRpZiAocmV0ID09IDApXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzKys7XG4rXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTI4NCw2ICsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdFx0Z290byB1bmxvY2s7XG4gXHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xuIFx0bmZfaG9va19lbnRyaWVzX2RlbGV0ZV9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuK1x0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFxuIFx0aWYgKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgPT0gMCkge1xuIFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4zMTAxM2MzMjEwOTk2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC01NCw3ICs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7XG4gXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xuLVx0dW5zaWduZWQgbG9uZyBoZWFkdjtcbiBcdHU4IGhvb2s7XG4gfTtcbiBcbkBAIC0zMzgsMjcgKzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi1cdFx0XHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiB7XG4gXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbitcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cdTAwM2VkYXRhO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbi1cdGludCBpLCBlcnI7XG4rXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMV07XG4rXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xuK1x0aW50IGVyciA9IDA7XG4gXG4rXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxKTtcbitcbitcdGUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiBcdGlmICghZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4tXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxuLVx0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksIHNlcSk7XG4rXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbitcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4rXHRcdFx0XHRcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXG4rXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0YnJlYWs7XG4rXG4gXHR9XG4tXHRyZXR1cm4gMDtcbitcbitcdGlmICghZXJyKSB7XG4rXHRcdGkgPSAwO1xuK1x0fVxuK1x0Y2ItXHUwMDNlYXJnc1sxXSA9IGk7XG4rXG4rXHRpZiAoY2ItXHUwMDNlYXJnc1syXSBcdTAwMjZcdTAwMjYgYmFzZV9zZXEgIT0gY2ItXHUwMDNlYXJnc1syXSkge1xuK1x0XHRjYi1cdTAwM2VzZXErKztcbitcdFx0ZXJyID0gLUVJTlRSO1xuK1x0fVxuK1x0Y2ItXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG5AQCAtMzczLDM1ICszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4gXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMF07XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRjYi1cdTAwM2VzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcbiBcbiBcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVx1MDAzZWhvb2ssIG5ldCwgY3R4LVx1MDAzZWRldm5hbWUpO1xuLVx0aWYgKCFlKVxuK1x0aWYgKCFlIHx8IElTX0VSUihlKSlcbiBcdFx0Z290byBkb25lO1xuIFxuLVx0aWYgKElTX0VSUihlKSkge1xuLVx0XHRjYi1cdTAwM2VzZXErKztcbi1cdFx0Z290byBkb25lO1xuLVx0fVxuLVxuLVx0aWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LVx1MDAzZWhlYWR2IHx8IGkgXHUwMDNlPSBlLVx1MDAzZW51bV9ob29rX2VudHJpZXMpXG4tXHRcdGNiLVx1MDAzZXNlcSsrO1xuLVxuIFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbiBcdGZvciAoOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xuLVx0XHRpZiAob3BzW2ldLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LFxuLVx0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXG4tXHRcdFx0XHRcdFx0IG9wc1tpXS1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuK1x0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xuK1xuK1x0XHRpZiAoY3VyLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4rXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xuK1x0XHRlbHNlIHtcbitcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxuK1x0XHRcdFx0XHRcdCBjdXItXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiBcdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4rXHRcdH1cbiBcdFx0aWYgKGVycilcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBkb25lOlxuLVx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcbitcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4rXHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbkBAIC00NDIsMTAgKzQ1OCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHN0cnNjcHkoY3R4LVx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXHUwMDNlZGV2bmFtZSkpO1xuLVx0Y3R4LVx1MDAzZWhlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDtcbiBcdGN0eC1cdTAwM2Vob29rID0gaG9va251bTtcbi1cbi1cdGNiLVx1MDAzZXNlcSA9IDE7XG4gXHRjYi1cdTAwM2VkYXRhID0gY3R4O1xuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NTo0MS43Nzc0MjQ0OTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2NjY5NDM2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBLTVNBTi4gTXkgaW5pdGlhbCByZWFkIHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgc2VxdWVuY2UgbnVtYmVyIG1hbmFnZW1lbnQsIHdoaWNoICpjb3VsZCogaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB3ZSdyZSBub3QgY2FyZWZ1bC4gTGV0J3MgYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZS5cblxuRmlyc3QsIEkgc2VlIGFkZGl0aW9ucyB0byBgbmV0bnNfbmZgIGluIGBuZXRmaWx0ZXIuaGA6IGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYC4gVGhlc2UgbG9vayBsaWtlIHNlcXVlbmNlIGNvdW50ZXJzLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZXMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBXZSBuZWVkIHRvIGZvbGxvdyB3aGVyZSB0aGV5IGFyZSBpbml0aWFsaXplZCwgcmVhZCwgYW5kIHdyaXR0ZW4uXG5cbmBjb3JlLmNgIGhhcyBgYnVtcF9ob29rX2Jhc2Vfc2VxYCwgYSBmdW5jdGlvbiB0byBpbmNyZW1lbnQgdGhlIGhvb2sgc2VxdWVuY2UuIEkgc2VlIGl0IHVzZXMgYFJFQURfT05DRWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAsIHdoaWNoIGlzIGdvb2Qg4oCTIGhpbnRpbmcgYXQgY29uY3VycmVudCBhY2Nlc3MuIFRoZSBpbml0aWFsaXphdGlvbiBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCBsb29rcyBzYWZlLCBzZXR0aW5nIGJvdGggYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIHRvIDEuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIHNob3VsZCBtaXRpZ2F0ZSBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZCByaXNrcy4gVGhlIGNhbGxzIHRvIGBidW1wX2hvb2tfYmFzZV9zZXFgIG9uIGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBtYWtlIHNlbnNlOyBrZWVwIHRob3NlIHZhbHVlcyB1cGRhdGVkLlxuXG5gbmZfbmF0X2NvcmUuY2AgaW50cm9kdWNlcyBhIHNpbWlsYXIgYGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXFgIGZvciBOQVQgaG9va3MsIHdpdGggdGhlIHNhbWUgaW5pdGlhbGl6YXRpb24gYW5kIGluY3JlbWVudCBwYXR0ZXJuLiBTdGFuZGFyZCBzdHVmZi5cblxuTm93LCBgbmZuZXRsaW5rX2hvb2suY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgY2hhbmdlcyBpbiBgbmZubF9kdW1wX2hvb2tfZGF0YWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgcmVtb3ZhbCBvZiBgaGVhZHZgIGluIGBuZm5sX2R1bXBfaG9va19kYXRhYCBpcyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuIFRoZSB1cGRhdGUgdG8gdGFrZSBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiYCBpbiBgbmZubF9ob29rX2R1bXBfbmF0YCBhbmQgaXRzIHVzYWdlIG9mIGBjYi1cdTAwM2VhcmdzYCBmb3IgaXRlcmF0aW5nIHRocm91Z2ggTkFUIGhvb2tzIGFuZCBjaGVja2luZyBjb25zaXN0ZW5jeSAoYGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl1gKSBpcyBhIGNydWNpYWwgYXJlYS4gV2UncmUgY2hlY2tpbmcgZm9yIHZlcnNpb25pbmcsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBhbmQgaXQncyBuaWNlIHRoYXQgY29uc2lzdGVuY3kgY2hlY2tzIGFyZSBpbiBwbGFjZS4gVGhlIGZhY3QgdGhhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGxvYWRlZCB3aXRoIGBzbXBfbG9hZF9hY3F1aXJlYCBhbmQgdGhlbiBjaGVja2VkIGZvciBjb25zaXN0ZW5jeSB3aXRoaW4gdGhhdCBzYW1lIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUga2V5LiBJIGFsc28gc2VlIHRoYXQgYG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudGAgaXMgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBpZiBgbmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwYC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgaW1wbGllcyB0aGF0IHRoZXJlIGlzIGEgcG9zc2libGUgc2NlbmFyaW8gd2hlcmUgYSBjb25zaXN0ZW50IGR1bXAgb3BlcmF0aW9uIGNhbiBiZSBza2lwcGVkLiBJdCdzIGltcGVyYXRpdmUgdGhhdCB0aGUgY29kZSBwYXRoIGFuZCBsb2dpYyBmb3IgdGhpcyBiZSBpbnNwZWN0ZWQuXG5cbkluIGBuZm5sX2hvb2tfZHVtcGAsIEkgc2VlIGBjYi1cdTAwM2VzZXFgIGlzIGxvYWRlZCB3aXRoIHRoZSBob29rIHNlcXVlbmNlLiBJdCdzIGEgbmljZSBkZXNpZ24gdGhhdCB2ZXJzaW9uaW5nIGFuZCBjb25zaXN0ZW5jeSBhcmUgaW4gcGxhY2UuIEhvd2V2ZXIsIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGBpZiAobmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwKWAgbWVyaXRzIGV4dHJhIGF0dGVudGlvbjogd2h5IGlzIHRoZSBjb25zaXN0ZW5jeSBjaGVjayBvbmx5IHBlcmZvcm1lZCB3aGVuIHRoZSBuZXRsaW5rIHNvY2tldCBidWZmZXIgbGVuZ3RoIGlzIG5vdCB6ZXJvP1xuXG5UaGUgcmVtb3ZhbCBvZiBgY3R4LVx1MDAzZWhlYWR2YCBhbmQgYGNiLVx1MDAzZXNlcSA9IDFgIGluIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAgaXMgc29tZXRoaW5nIHRvIG5vdGUuIEkgd2FudCB0byBjaGVjayB0aGF0IGBoZWFkdmAgaXNuJ3QgdXNlZCBlbHNld2hlcmUuXG5cbkkgdGhpbmsgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIE5vdyBsZXQncyBjYXJlZnVsbHkgcmV2aWV3IGBuZm5sX2hvb2tfZHVtcF9vbmVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIHVzZSBvZiBzZXF1ZW5jZSBudW1iZXJzIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIE5BVC1zcGVjaWZpYyBzZXF1ZW5jZSBudW1iZXJzIHBvaW50IHRvd2FyZCBhIGdvb2QgZWZmb3J0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gR2l2ZW4gdGhlIGluaXRpYWxpemF0aW9uLCBhbmQgY2hlY2tzIGZvciBpbmNvbnNpc3RlbmN5IGFuZCBjb25kaXRpb25hbCBgbmxza2ItXHUwMDNlbGVuYCBjb25zaXN0ZW5jeSBjaGVja3MsIEkgYW0gbm90IHNlZWluZyBvYnZpb3VzIGlzc3Vlcy4gQnV0IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29kZSBwYXRocyBhbmQgbG9naWMgd2l0aCB0aGUgY29uZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2sgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NjowMC40NDQzNzExNDRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODIyOTE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZubF9ob29rX2R1bXBfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0xNTg9c3RhdGljIGludCBuZm5sX2hvb2tfcHV0X25mdF9mdF9pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjE5MDpzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTE5MS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTMzOT1zdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVxcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjM2MTpcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYyLVxcdFxcdFxcdFxcdFxcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQwOS1cXHRcXHRlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NDEwOlxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NjowMS45MjY2NzU4NTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyNDE3MTU2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSGVhcnQgb2YgdGhlIE1hdHRlcjogTkZORVRMSU5LIEhvb2sgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAxODAgdG8gMjUwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIG9mIGhvb2tpbmcgbmV0ZmlsdGVyIGZ1bmN0aW9ucyBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2luZyBzeXN0ZW0gaGFwcGVucywgb3IgbWF5YmUgaXQgZGVhbHMgd2l0aCB0aGUgcmVnaXN0cmF0aW9uIG9yIGRlcmVnaXN0cmF0aW9uIG9mIG5ldGZpbHRlciBob29rcy4gSSBzdXNwZWN0IGl0IGhvbGRzIHRoZSBjb3JlIGxvZ2ljIGZvciBlaXRoZXIgc2V0dGluZyB1cCBvciB0ZWFyaW5nIGRvd24gdGhlIG5ldGxpbmsgY29tbXVuaWNhdGlvbiBwYXRocyBmb3IgcGFja2V0IGluc3BlY3Rpb24gYW5kIG1hbmlwdWxhdGlvbi4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYWN0dWFsbHkgcmVjZWl2ZSBhbmQgcHJvY2VzcyB0aGUgZGF0YSBzZW50IHRocm91Z2ggdGhlc2UgaG9va3MuIEl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgZm9yIGFueSByb2J1c3QgbmV0ZmlsdGVyIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZW5jb3VudGVyIHNvbWUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gYW5kIHBlcmhhcHMgc29tZSBpbnRlcmVzdGluZyBzcGlubG9jayB1c2FnZSBmb3IgY29uY3VycmVuY3kgbWFuYWdlbWVudC4gSSB3aWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBzZWUgaG93IHRoZXkgZGVhbCB3aXRoIGZhaWx1cmUgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTY6MTkuMTY4Mzk3OTY2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBmdC1cXHUwMDNlbmFtZSwgZnQtXFx1MDAzZXRhYmxlLVxcdTAwM2VmYW1pbHkpO1xcbiAxODE6XFx0XFx0aWYgKHJldCkge1xcbiAxODI6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKG5sc2tiLCBuZXN0KTtcXG4gMTgzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4NDpcXHRcXHR9XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdG5sYV9uZXN0X2VuZChubHNrYiwgbmVzdCk7XFxuIDE4NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTg4OlxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbiAxOTE6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcXG4gMTkyOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgcHJpb3JpdHksXFxuIDE5MzpcXHRcXHRcXHRcXHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxcbiAxOTQ6XFx0e1xcbiAxOTU6XFx0XFx0dTE2IGV2ZW50ID0gbmZubF9tc2dfdHlwZShORk5MX1NVQlNZU19IT09LLCBORk5MX01TR19IT09LX0dFVCk7XFxuIDE5NjpcXHRcXHR1bnNpZ25lZCBpbnQgcG9ydGlkID0gTkVUTElOS19DQihubHNrYikucG9ydGlkO1xcbiAxOTc6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuIDE5ODpcXHRcXHRpbnQgcmV0ID0gLUVNU0dTSVpFO1xcbiAxOTk6XFx0XFx0dTMyIGhvb2tudW07XFxuIDIwMDpcXHQjaWZkZWYgQ09ORklHX0tBTExTWU1TXFxuIDIwMTpcXHRcXHRjaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dO1xcbiAyMDI6XFx0XFx0Y2hhciAqbW9kdWxlX25hbWU7XFxuIDIwMzpcXHQjZW5kaWZcXG4gMjA0OlxcdFxcdG5saCA9IG5mbmxfbXNnX3B1dChubHNrYiwgcG9ydGlkLCBzZXEsIGV2ZW50LFxcbiAyMDU6XFx0XFx0XFx0XFx0ICAgTkxNX0ZfTVVMVEksIGZhbWlseSwgTkZORVRMSU5LX1YwLCAwKTtcXG4gMjA2OlxcdFxcdGlmICghbmxoKVxcbiAyMDc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDIwODpcXHRcXG4gMjA5OlxcdCNpZmRlZiBDT05GSUdfS0FMTFNZTVNcXG4gMjEwOlxcdFxcdHJldCA9IHNucHJpbnRmKHN5bSwgc2l6ZW9mKHN5bSksIFxcXCIlcHNcXFwiLCBvcHMtXFx1MDAzZWhvb2spO1xcbiAyMTE6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSBzaXplb2Yoc3ltKSkge1xcbiAyMTI6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMjEzOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMTQ6XFx0XFx0fVxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRtb2R1bGVfbmFtZSA9IHN0cnN0cihzeW0sIFxcXCIgW1xcXCIpO1xcbiAyMTc6XFx0XFx0aWYgKG1vZHVsZV9uYW1lKSB7XFxuIDIxODpcXHRcXHRcXHRjaGFyICplbmQ7XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdFxcdCptb2R1bGVfbmFtZSA9ICdcXFxcMCc7XFxuIDIyMTpcXHRcXHRcXHRtb2R1bGVfbmFtZSArPSAyO1xcbiAyMjI6XFx0XFx0XFx0ZW5kID0gc3RyY2hyKG1vZHVsZV9uYW1lLCAnXScpO1xcbiAyMjM6XFx0XFx0XFx0aWYgKGVuZCkge1xcbiAyMjQ6XFx0XFx0XFx0XFx0KmVuZCA9IDA7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdFxcdFxcdFxcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG5sc2tiLCBORk5MQV9IT09LX01PRFVMRV9OQU1FLCBtb2R1bGVfbmFtZSk7XFxuIDIyNzpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbiAyMjg6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDIyOTpcXHRcXHRcXHR9XFxuIDIzMDpcXHRcXHR9XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG5sc2tiLCBORk5MQV9IT09LX0ZVTkNUSU9OX05BTUUsIHN5bSk7XFxuIDIzMzpcXHRcXHRpZiAocmV0KVxcbiAyMzQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDIzNTpcXHQjZW5kaWZcXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0aWYgKG9wcy1cXHUwMDNlcGYgPT0gTkZQUk9UT19JTkVUIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlaG9va251bSA9PSBORl9JTkVUX0lOR1JFU1MpXFxuIDIzODpcXHRcXHRcXHRob29rbnVtID0gTkZfTkVUREVWX0lOR1JFU1M7XFxuIDIzOTpcXHRcXHRlbHNlXFxuIDI0MDpcXHRcXHRcXHRob29rbnVtID0gb3BzLVxcdTAwM2Vob29rbnVtO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfSE9PS05VTSwgaHRvbmwoaG9va251bSkpO1xcbiAyNDM6XFx0XFx0aWYgKHJldClcXG4gMjQ0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfUFJJT1JJVFksIGh0b25sKHByaW9yaXR5KSk7XFxuIDI0NzpcXHRcXHRpZiAocmV0KVxcbiAyNDg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdHN3aXRjaCAob3BzLVxcdTAwM2Vob29rX29wc190eXBlKSB7XFxuIDI1MTpcXHRcXHRjYXNlIE5GX0hPT0tfT1BfTkZfVEFCTEVTOlxcbiAyNTI6XFx0XFx0XFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfY2hhaW5faW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cXHUwMDNlcHJpdik7XFxuIDI1MzpcXHRcXHRcXHRicmVhaztcXG4gMjU0OlxcdFxcdGNhc2UgTkZfSE9PS19PUF9CUEY6XFxuIDI1NTpcXHRcXHRcXHRyZXQgPSBuZm5sX2hvb2tfcHV0X2JwZl9wcm9nX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXFx1MDAzZXByaXYpO1xcbiAyNTY6XFx0XFx0XFx0YnJlYWs7XFxuIDI1NzpcXHRcXHRjYXNlIE5GX0hPT0tfT1BfTkZUX0ZUOlxcbiAyNTg6XFx0XFx0XFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfZnRfaW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cXHUwMDNlcHJpdik7XFxuIDI1OTpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTY6MTkuMTY4NDg4OTM2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDU0NTAzMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIG5mbmV0bGlua19ob29rLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgYG5mbmxfaG9va19kdW1wYCwgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZSBzdGFydCBhbmQgZG9uZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgbG9naWMgc3Vycm91bmRpbmcgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHRoZXNlIG5ldGxpbmsgaG9va3MuIFVuZGVyc3RhbmRpbmcgaG93IGR1bXBpbmcgaXMgaW5pdGlhdGVkLCBob3cgZGF0YSBpcyBhc3NlbWJsZWQgYW5kIHNlbnQsIGFuZCBob3cgdGhlIHByb2Nlc3MgaXMgZmluYWxpemVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBhbnRpY2lwYXRlIHBvdGVudGlhbCBudWFuY2VzIGluIHJlc291cmNlIGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgc3luY2hyb25pemF0aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdpdGhpbiB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoZSBob29rIGZyYW1ld29yayB0cnVseSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTY6NTkuMjIyOTk4NTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFxuIDM4MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcXG4gMzg1OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiAzODY6XFx0e1xcbiAzODc6XFx0XFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuIDM4ODpcXHRcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXFx1MDAzZWRhdGE7XFxuIDM4OTpcXHRcXHRpbnQgZXJyLCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbiAzOTA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXFx1MDAzZXNrKTtcXG4gMzkxOlxcdFxcdHN0cnVjdCBuZl9ob29rX29wcyAqIGNvbnN0ICpvcHM7XFxuIDM5MjpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xcbiAzOTM6XFx0XFx0dW5zaWduZWQgaW50IGkgPSBjYi1cXHUwMDNlYXJnc1swXTtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzOTY6XFx0XFx0Y2ItXFx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVxcdTAwM2Vob29rLCBuZXQsIGN0eC1cXHUwMDNlZGV2bmFtZSk7XFxuIDM5OTpcXHRcXHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxcbiA0MDA6XFx0XFx0XFx0Z290byBkb25lO1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRcXHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xcbiA0MDM6XFx0XFxuIDQwNDpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbiA0MDU6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcXG4gNDA2OlxcdFxcbiA0MDc6XFx0XFx0XFx0aWYgKGN1ci1cXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcXG4gNDA4OlxcdFxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcXG4gNDA5OlxcdFxcdFxcdGVsc2Uge1xcbiA0MTA6XFx0XFx0XFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcXG4gNDExOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjdXItXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksXFxuIDQxMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4gNDEzOlxcdFxcdFxcdH1cXG4gNDE0OlxcdFxcdFxcdGlmIChlcnIpXFxuIDQxNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDE2OlxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0ZG9uZTpcXG4gNDE5OlxcdFxcdGlmIChubHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgMClcXG4gNDIwOlxcdFxcdFxcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XFxuIDQyMTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNDIyOlxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gaTtcXG4gNDIzOlxcdFxcdHJldHVybiBubHNrYi1cXHUwMDNlbGVuO1xcbiA0MjQ6XFx0fVxcbiA0MjU6XFx0XFxuIDQyNjpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gNDI3OlxcdHtcXG4gNDI4OlxcdFxcdGNvbnN0IHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbiA0Mjk6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpubGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4gNDMwOlxcdFxcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xcbiA0MzE6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXFx1MDAzZXNrYi1cXHUwMDNlc2spO1xcbiA0MzI6XFx0XFx0dTggZmFtaWx5ID0gbmZtc2ctXFx1MDAzZW5mZ2VuX2ZhbWlseTtcXG4gNDMzOlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcXFwiXFxcIjtcXG4gNDM0OlxcdFxcdGNvbnN0IHZvaWQgKmhlYWQ7XFxuIDQzNTpcXHRcXHR1MzIgaG9va251bTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aG9va251bSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGFbTkZOTEFfSE9PS19IT09LTlVNXSkpO1xcbiA0Mzg6XFx0XFx0aWYgKGhvb2tudW0gXFx1MDAzZSAyNTUpXFxuIDQzOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQwOlxcdFxcbiA0NDE6XFx0XFx0aWYgKGZhbWlseSA9PSBORlBST1RPX05FVERFVikge1xcbiA0NDI6XFx0XFx0XFx0aWYgKCFubGFbTkZOTEFfSE9PS19ERVZdKVxcbiA0NDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdFxcdG5sYV9zdHJzY3B5KG5hbWUsIG5sYVtORk5MQV9IT09LX0RFVl0sIHNpemVvZihuYW1lKSk7XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNDQ5OlxcdFxcdC8qIE5vdCBkZXJlZmVyZW5jZWQ7IGZvciBjb25zaXN0ZW5jeSBjaGVjayBvbmx5ICovXFxuIDQ1MDpcXHRcXHRoZWFkID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGhvb2tudW0sIG5ldCwgbmFtZSk7XFxuIDQ1MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0aWYgKGhlYWQgXFx1MDAyNlxcdTAwMjYgSVNfRVJSKGhlYWQpKVxcbiA0NTQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoaGVhZCk7XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdFxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbiA0NTc6XFx0XFx0aWYgKCFjdHgpXFxuIDQ1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0c3Ryc2NweShjdHgtXFx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXFx1MDAzZWRldm5hbWUpKTtcXG4gNDYxOlxcdFxcdGN0eC1cXHUwMDNlaG9vayA9IGhvb2tudW07XFxuIDQ2MjpcXHRcXHRjYi1cXHUwMDNlZGF0YSA9IGN0eDtcXG4gNDYzOlxcdFxcbiA0NjQ6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2NTpcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RvcChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDQ2ODpcXHR7XFxuIDQ2OTpcXHRcXHRrZnJlZShjYi1cXHUwMDNlZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjU2OjU5LjIyMzExNjU5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Nzc3OTMxNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFwcGxpY2FiaWxpdHkgQXNzZXNzbWVudCBmb3IgTmV0ZmlsdGVyIEhvb2sgRHVtcCBDb25zaXN0ZW5jeSBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIGFkZHJlc3NlcyBhIGNvbnNpc3RlbmN5IGlzc3VlIGluIG5ldGZpbHRlciBob29rIGR1bXBpbmcgd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYCwgaXNuJ3QgYSBjYW5kaWRhdGUgZm9yIEtNU0FOLiBUaGUgY29yZSBwcm9ibGVtIHRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIHNvbHZlIGlzIHRoYXQgdGhlIGV4aXN0aW5nIG1ldGhvZCBvZiBkZXRlY3RpbmcgY2hhbmdlcyBpbiB0aGUgaG9vayB0YWJsZSByZWxpZWQgb24gY2hlY2tpbmcgYGUgIT0gY3R4LVx1MDAzZWhlYWR2YC4gVGhpcyB3YXMgZmxhd2VkIGJlY2F1c2UgcmVhbGxvY2F0aW9ucywgbW9kaWZpY2F0aW9ucywgb3IgY2hhbmdlcyB0byBOQVQgaG9vayBlbnRyaWVzIHdlcmVuJ3QgYWx3YXlzIGRldGVjdGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbnQgbmV0bGluayBkdW1wcy5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIHNlcXVlbmNlIG51bWJlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgd2l0aGluIHRoZSBgbmV0bnNfbmZgIHN0cnVjdHVyZS4gV2hlbiBob29rcyBhcmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQsIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgYXJlIGluY3JlbWVudGVkIHVzaW5nIGBidW1wX2hvb2tfYmFzZV9zZXFgIGFuZCBgYnVtcF9uYXRfaG9va19iYXNlX3NlcWAuIER1cmluZyBuZXRsaW5rIGR1bXBzIChgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCksIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgYXJlIHN0b3JlZCBhbmQgY2hlY2tlZCB1c2luZyBgY2ItXHUwMDNlc2VxYCBhbmQgYGNiLVx1MDAzZWFyZ3NbMl1gLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIExldCdzIHNlZS5cblxuKiAgICoqU3RydWN0dXJlIEluaXRpYWxpemF0aW9uIFx1MDAyNiBVc2VyLVNwYWNlIEV4cG9zdXJlOioqIEZpcnN0LCBkb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQsIG9yIHdoZXJlIHN0cnVjdHVyZSBwYWRkaW5nIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkPyBOby4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyBidWlsdCBhcmUgdW5jaGFuZ2VkLCBhbmQgdGhlIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGBjdHhgLCBgbmV0bnNfbmZgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKHVzaW5nIGBremFsbG9jYCBvciBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCkuIGBuZXRuc19uZmAgaXMgcGFydCBvZiBgc3RydWN0IG5ldGAsIHdoaWNoIGlzIHplcm9lZCBvbiBhbGxvY2F0aW9uLCBhbmQgYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxuXG4qICAgKipDb25kaXRpb25hbCBMb2dpYyBcdTAwMjYgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4gSSdtIHNlZWluZyBhbGwgdmFyaWFibGVzLCBsaWtlIGBiYXNlX3NlcWAsIGBpYCwgYGVycmAsIGFuZCBgY3VyYCwgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgY2ItXHUwMDNlYXJnc2AgYXJyYXkgaXMgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgd2hlbiB0aGUgY2FsbGJhY2sgaXMgc3RhcnRlZCwgYW5kIHRoZW4gdGhlIHJlbGV2YW50IGZpZWxkcyBhcmUgYXNzaWduZWQgdmFsdWVzLlxuXG4qICAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBEb2VzIHRoaXMgcGF0Y2ggYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBOby4gQWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgc2VlbSB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHkuXG5cbiogICAqKkJvdW5kcyBDaGVja3MgXHUwMDI2IE1lbW9yeSBBY2Nlc3M6KiogRmluYWxseSwgZG9lcyB0aGUgcGF0Y2ggYWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBObywgYmFzZWQgb24gd2hhdCBJIHNlZS5cblxuQWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGluY2x1ZGluZyBleGFtaW5pbmcgdGhlIHZhcmlhYmxlcyBpbiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLCBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLCBpdCdzIGNsZWFyIHRoYXQgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gU3BlY2lmaWNhbGx5LCB0aGUgc2VxdWVuY2UgY291bnRlcnMgYXJlIGluaXRpYWxpemVkIHRvIGAxYCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCwgYW5kIHRoZSBzdGFjayB2YXJpYWJsZXMgaW4gdGhlIGR1bXAgZnVuY3Rpb25zIGFyZSBhbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZWlyIHVzZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSB0eXBlcyBvZiBidWdzIHRoYXQgKmNvdWxkKiBiZSBwcmVzZW50IGFyZSBwcmltYXJpbHkgY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zIChLQ1NBTi9MT0NLREVQL2NvZGUgcmV2aWV3KSwgbG9naWMgZXJyb3JzIGluIHRoZSBuZXRsaW5rIGR1bXAgcmVzdGFydC9wYWdpbmF0aW9uIHByb2Nlc3MgKGZ1bmN0aW9uYWwgdGVzdGluZyksIG9yIHBvdGVudGlhbCBwb2ludGVyIGRlcmVmZXJlbmNpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVuZGVyIFJDVSAoS0FTQU4pLiBCdXQgbm9uZSBvZiB0aGVzZSByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCBiZSBkZXRlY3RhYmxlICpvbmx5KiBieSBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIHNlcXVlbmNlIGNvdW50ZXJzIGZvciBuZXRmaWx0ZXIgaG9vayBuZXRsaW5rIGR1bXBzLiBBbGwgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgc2VxdWVuY2UgY291bnRlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcmVtYWluaW5nIGNvbmNlcm5zIGZhbGwgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOL0xPQ0tERVAvZnVuY3Rpb25hbCB0ZXN0aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBMZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjgsIk91dHB1dFRva2VucyI6MjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjU3OjQ5LjAwMTA1MTI4OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBuZXRsaW5rIGR1bXBpbmcgb2YgbmV0ZmlsdGVyIGhvb2tzIGJ5IHJlcGxhY2luZyBwb2ludGVyLWJhc2VkIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIHNlcXVlbmNlIGNvdW50ZXJzIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYHN0cnVjdCBuZXRuc19uZmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSBBbGwgYWRkZWQgZmllbGRzIGFuZCBsb2NhbCB2YXJpYWJsZXMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgYGJhc2Vfc2VxYCwgYGVycmAsIGBpYCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGBuZXRmaWx0ZXJfbmV0X2luaXRgIHNldHMgYmFzZSBzZXF1ZW5jZXMgdG8gMSwgYW5kIGR1bXAgY2FsbGJhY2tzIHByb3Blcmx5IGluaXRpYWxpemUgc3RhY2sgdmFyaWFibGVzIGFuZCBuZXRsaW5rIGNhbGxiYWNrIGFyZ3MpLlxcbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgc2xpY2VzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBSQ1UgZGVyZWZlcmVuY2luZyBvciBob29rIGl0ZXJhdGlvbiBkdXJpbmcgY29uY3VycmVudCByZWdpc3RyYXRpb25zIGFyZSBsaWZldGltZS9jb25jdXJyZW5jeSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IEtBU0FOL0xPQ0tERVAsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7nw9g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 20:50:21 +0000 UTC FinishedAt: 2026-08-27 21:57:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_TABLES", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_CONNTRACK", "NF_NAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_ADVANCED", "NF_TABLES", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_CONNTRACK", "NF_NAT" ], "series_id": "57793d8d-a2e1-40f3-aed9-097b32bcff66" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfnl_hook_dump", "nfnl_hook_dump_nat", "nfnl_hook_get", "nf_nat_register_fn", "nf_nat_unregister_fn", "nf_register_net_hook", "nf_unregister_net_hook" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9OQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZm5sX2hvb2tfZHVtcCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZHVtcF9uYXQmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2dldCYjMzQ7LAogICAgJiMzNDtuZl9uYXRfcmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfbmF0X3VucmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfcmVnaXN0ZXJfbmV0X2hvb2smIzM0OywKICAgICYjMzQ7bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbmV0bGluayBkdW1waW5nIG9mIG5ldGZpbHRlciBob29rcyBieSByZXBsYWNpbmcgcG9pbnRlci1iYXNlZCBjb25zaXN0ZW5jeSBjaGVja3Mgd2l0aCBzZXF1ZW5jZSBjb3VudGVycyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIGluIGBzdHJ1Y3QgbmV0bnNfbmZgKS5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcbi0gQWxsIGFkZGVkIGZpZWxkcyBhbmQgbG9jYWwgdmFyaWFibGVzIChgaG9va19iYXNlX3NlcWAsIGBuYXRfaG9va19iYXNlX3NlcWAsIGBiYXNlX3NlcWAsIGBlcnJgLCBgaWAsIGV0Yy4pIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChgbmV0ZmlsdGVyX25ldF9pbml0YCBzZXRzIGJhc2Ugc2VxdWVuY2VzIHRvIDEsIGFuZCBkdW1wIGNhbGxiYWNrcyBwcm9wZXJseSBpbml0aWFsaXplIHN0YWNrIHZhcmlhYmxlcyBhbmQgbmV0bGluayBjYWxsYmFjayBhcmdzKS5cbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgc2xpY2VzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBudW1iZXIgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGFuZCBlbnN1cmUgY29uc2lzdGVuY3kgZHVyaW5nIG5ldGxpbmsgZHVtcHMgb2YgbmV0ZmlsdGVyIGJhc2UgaG9va3MgYW5kIE5BVCBob29rcyB2aWEgbmZuZXRsaW5rX2hvb2suIEl0IGFsdGVycyBsb2NrbGVzcyBpdGVyYXRpb24sIHBhZ2luYXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgZHVtcCBjYWxsYmFja3MsIHdoaWNoIGlzIHVzZXItcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTozNzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5pbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5AQCAtMzMsNSAmIzQzOzMzLDcgQEAgc3RydWN0IG5ldG5zX25mIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpXG4gXHR1bnNpZ25lZCBpbnQgZGVmcmFnX2lwdjZfdXNlcnM7XG4gI2VuZGlmXG4mIzQzO1x0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5hdF9ob29rX2Jhc2Vfc2VxO1xuIH07XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuQEAgLTM4Niw2ICYjNDM7Mzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5mX3N0YXRpY19rZXlfZGVjKGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCBpbnQgcGYpXG4gI2VuZGlmXG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCYjNDM7JiM0MztiYXNlX3NlcSA9PSAwKVxuJiM0MztcdFx0O1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbiB7XG5AQCAtNDI4LDYgJiM0Mzs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRuZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpO1xuIFxuIFx0aWYgKCFJU19FUlIobmV3X2hvb2tzKSkge1xuJiM0MztcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XG4gXHR9XG5AQCAtNTA2LDYgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcbiAjZW5kaWZcbiBcdFx0bmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7XG4mIzQzO1x0XHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXCYjMzQ7LCBwZiwgcmVnLVx1MDAzZWhvb2tudW0pO1xuIFx0fVxuQEAgLTc4NCw2ICYjNDM7Nzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuICNlbmRpZlxuJiM0MztcdG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcbiYjNDM7XHRuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMClcbiYjNDM7XHRcdDtcbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7bmF0LWZvbGxvdy1tYXN0ZXJcJiMzNDssXG4gXHQuZXhwZWN0Zm5cdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXG5AQCAtMTI0NSw4ICYjNDM7MTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0fVxuIFxuIFx0cmV0ID0gbmZfaG9va19lbnRyaWVzX2luc2VydF9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuLVx0aWYgKHJldCA9PSAwKVxuJiM0MztcdGlmIChyZXQgPT0gMCkge1xuJiM0MztcdFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTI4NCw2ICYjNDM7MTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0cHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjtcbiBcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbiYjNDM7XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXG4gXHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG4gXHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbmluZGV4IDk1MDA1ZTlhNjA2NjguLjMxMDEzYzMyMTA5OTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuQEAgLTU0LDcgJiM0Mzs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7XG4gXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xuLVx0dW5zaWduZWQgbG9uZyBoZWFkdjtcbiBcdHU4IGhvb2s7XG4gfTtcbiBcbkBAIC0zMzgsMjcgJiM0MzszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGVcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4tXHRcdFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiB7XG4gXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiYjNDM7XHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzO1xuLVx0aW50IGksIGVycjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMV07XG4mIzQzO1x0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmFzZV9zZXE7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gXG4mIzQzO1x0YmFzZV9zZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4mIzQzO1xuJiM0MztcdGUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiBcdGlmICghZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sXG4tXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSwgc2VxKTtcbiYjNDM7XHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4mIzQzO1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuJiM0MztcdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuJiM0MztcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdH1cbi1cdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVycikge1xuJiM0MztcdFx0aSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdGNiLVx1MDAzZWFyZ3NbMV0gPSBpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2ItXHUwMDNlYXJnc1syXSBcdTAwMjZcdTAwMjYgYmFzZV9zZXEgIT0gY2ItXHUwMDNlYXJnc1syXSkge1xuJiM0MztcdFx0Y2ItXHUwMDNlc2VxJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVyciA9IC1FSU5UUjtcbiYjNDM7XHR9XG4mIzQzO1x0Y2ItXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbkBAIC0zNzMsMzUgJiM0MzszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4gXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMF07XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gXG4gXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbi1cdGlmICghZSlcbiYjNDM7XHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4tXHRpZiAoSVNfRVJSKGUpKSB7XG4tXHRcdGNiLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbi1cbi1cdGlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC1cdTAwM2VoZWFkdiB8fCBpIFx1MDAzZT0gZS1cdTAwM2VudW1faG9va19lbnRyaWVzKVxuLVx0XHRjYi1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuLVxuIFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbiBcdGZvciAoOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChvcHNbaV0tXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXG4tXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSxcbi1cdFx0XHRcdFx0XHQgb3BzW2ldLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjdXItXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbiYjNDM7XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xuJiM0MztcdFx0ZWxzZSB7XG4mIzQzO1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXG4mIzQzO1x0XHRcdFx0XHRcdCBjdXItXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiBcdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gZG9uZTpcbi1cdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4mIzQzO1x0aWYgKG5sc2tiLVx1MDAzZWxlbiBcdTAwM2UgMClcbiYjNDM7XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbkBAIC00NDIsMTAgJiM0Mzs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdHJzY3B5KGN0eC1cdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVx1MDAzZWRldm5hbWUpKTtcbi1cdGN0eC1cdTAwM2VoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7XG4gXHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4tXG4tXHRjYi1cdTAwM2VzZXEgPSAxO1xuIFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiBcbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE3bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9OQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZm5sX2hvb2tfZHVtcCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZHVtcF9uYXQmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2dldCYjMzQ7LAogICAgJiMzNDtuZl9uYXRfcmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfbmF0X3VucmVnaXN0ZXJfZm4mIzM0OywKICAgICYjMzQ7bmZfcmVnaXN0ZXJfbmV0X2hvb2smIzM0OywKICAgICYjMzQ7bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIG51bWJlciB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBjb25zaXN0ZW5jeSBkdXJpbmcgbmV0bGluayBkdW1wcyBvZiBuZXRmaWx0ZXIgYmFzZSBob29rcyBhbmQgTkFUIGhvb2tzIHZpYSBuZm5ldGxpbmtfaG9vay4gSXQgYWx0ZXJzIGxvY2tsZXNzIGl0ZXJhdGlvbiwgcGFnaW5hdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nIGFjcm9zcyBkdW1wIGNhbGxiYWNrcywgd2hpY2ggaXMgdXNlci1yZWFjaGFibGUgdmlhIG5mbmV0bGluayBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA5MzE3MzlkZjllYzYxODNkYTA2ZmJhOTc4MmEyNTQyYmM0OTMyNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDIxOjM3OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaAppbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaApAQCAtMzMsNSAmIzQzOzMzLDcgQEAgc3RydWN0IG5ldG5zX25mIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9ERUZSQUdfSVBWNikKIAl1bnNpZ25lZCBpbnQgZGVmcmFnX2lwdjZfdXNlcnM7CiAjZW5kaWYKJiM0MzsJdW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7CiYjNDM7CXVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9jb3JlLmMKQEAgLTM4Niw2ICYjNDM7Mzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5mX3N0YXRpY19rZXlfZGVjKGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCBpbnQgcGYpCiAjZW5kaWYKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCYjNDM7JiM0MztiYXNlX3NlcSA9PSAwKQomIzQzOwkJOwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO25ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKQogewpAQCAtNDI4LDYgJiM0Mzs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJbmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTsKIAogCWlmICghSVNfRVJSKG5ld19ob29rcykpIHsKJiM0MzsJCWJ1bXBfaG9va19iYXNlX3NlcShuZXQpOwogCQlob29rc192YWxpZGF0ZShuZXdfaG9va3MpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpOwogCX0KQEAgLTUwNiw2ICYjNDM7NTE2LDcgQEAgc3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCQkJbmV0X2RlY19lZ3Jlc3NfcXVldWUoKTsKICNlbmRpZgogCQluZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTsKJiM0MzsJCWJ1bXBfaG9va19iYXNlX3NlcShuZXQpOwogCX0gZWxzZSB7CiAJCVdBUk5fT05DRSgxLCAmIzM0O2hvb2sgbm90IGZvdW5kLCBwZiAlZCBudW0gJWQmIzM0OywgcGYsIHJlZy0mZ3Q7aG9va251bSk7CiAJfQpAQCAtNzg0LDYgJiM0Mzs3OTUsOCBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmV0ZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogI2VuZGlmCiYjNDM7CW5ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSA9IDE7CiYjNDM7CW5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIHZvaWQgYnVtcF9uYXRfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CXdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMCkKJiM0MzsJCTsKJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7CiAJLm5hbWUJCT0gJiMzNDtuYXQtZm9sbG93LW1hc3RlciYjMzQ7LAogCS5leHBlY3Rmbgk9IG5mX25hdF9mb2xsb3dfbWFzdGVyLApAQCAtMTI0NSw4ICYjNDM7MTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAogCX0KIAogCXJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KCZhbXA7cHJpdi0mZ3Q7ZW50cmllcywgb3BzKTsKLQlpZiAocmV0ID09IDApCiYjNDM7CWlmIChyZXQgPT0gMCkgewomIzQzOwkJYnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpOwogCQluYXRfcHJvdG9fbmV0LSZndDt1c2VycyYjNDM7JiM0Mzs7CiYjNDM7CX0KIAogCW11dGV4X3VubG9jaygmYW1wO25mX25hdF9wcm90b19tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTEyODQsNiAmIzQzOzEyOTUsNyBAQCB2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAogCQlnb3RvIHVubG9jazsKIAlwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2OwogCW5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KCZhbXA7cHJpdi0mZ3Q7ZW50cmllcywgb3BzKTsKJiM0MzsJYnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpOwogCiAJaWYgKG5hdF9wcm90b19uZXQtJmd0O3VzZXJzID09IDApIHsKIAkJbmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCmluZGV4IDk1MDA1ZTlhNjA2NjguLjMxMDEzYzMyMTA5OTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKQEAgLTU0LDcgJiM0Mzs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgewogCWNoYXIgZGV2bmFtZVtJRk5BTVNJWl07Ci0JdW5zaWduZWQgbG9uZyBoZWFkdjsKIAl1OCBob29rOwogfTsKIApAQCAtMzM4LDI3ICYjNDM7MzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlCiB9CiAKIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKLQkJCSAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgZmFtaWx5KQogewogCXN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdiAqcHJpdiA9IG9wcy0mZ3Q7cHJpdjsKLQlzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtJmd0O2VudHJpZXMpOwomIzQzOwlzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItJmd0O2RhdGE7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLSZndDtzayk7CiAJc3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wczsKLQlpbnQgaSwgZXJyOwomIzQzOwl1bnNpZ25lZCBpbnQgaSA9IGNiLSZndDthcmdzWzFdOwomIzQzOwlzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplOwomIzQzOwl1bnNpZ25lZCBpbnQgYmFzZV9zZXE7CiYjNDM7CWludCBlcnIgPSAwOwogCiYjNDM7CWJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO25ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwllID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtJmd0O2VudHJpZXMpOwogCWlmICghZSkKIAkJcmV0dXJuIDA7CiAKIAluYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSwKLQkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwgc2VxKTsKJiM0MzsJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsCiYjNDM7CQkJCQkgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLAomIzQzOwkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKJiM0MzsJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCQlicmVhazsKJiM0MzsKIAl9Ci0JcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghZXJyKSB7CiYjNDM7CQlpID0gMDsKJiM0MzsJfQomIzQzOwljYi0mZ3Q7YXJnc1sxXSA9IGk7CiYjNDM7CiYjNDM7CWlmIChjYi0mZ3Q7YXJnc1syXSAmYW1wOyZhbXA7IGJhc2Vfc2VxICE9IGNiLSZndDthcmdzWzJdKSB7CiYjNDM7CQljYi0mZ3Q7c2VxJiM0MzsmIzQzOzsKJiM0MzsJCWVyciA9IC1FSU5UUjsKJiM0MzsJfQomIzQzOwljYi0mZ3Q7YXJnc1syXSA9IGJhc2Vfc2VxOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYiwKQEAgLTM3MywzNSAmIzQzOzM5MywzMSBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYiwKIAl1bnNpZ25lZCBpbnQgaSA9IGNiLSZndDthcmdzWzBdOwogCiAJcmN1X3JlYWRfbG9jaygpOwomIzQzOwljYi0mZ3Q7c2VxID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO25ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSk7CiAKIAllID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC0mZ3Q7aG9vaywgbmV0LCBjdHgtJmd0O2Rldm5hbWUpOwotCWlmICghZSkKJiM0MzsJaWYgKCFlIHx8IElTX0VSUihlKSkKIAkJZ290byBkb25lOwogCi0JaWYgKElTX0VSUihlKSkgewotCQljYi0mZ3Q7c2VxJiM0MzsmIzQzOzsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC0mZ3Q7aGVhZHYgfHwgaSAmZ3Q7PSBlLSZndDtudW1faG9va19lbnRyaWVzKQotCQljYi0mZ3Q7c2VxJiM0MzsmIzQzOzsKLQogCW9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7CiAKIAlmb3IgKDsgaSAmbHQ7IGUtJmd0O251bV9ob29rX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChvcHNbaV0tJmd0O2hvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpCi0JCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksCi0JCQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKLQkJZWxzZQotCQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSwKLQkJCQkJCSBvcHNbaV0tJmd0O3ByaW9yaXR5LCBmYW1pbHksCiYjNDM7CQljb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pOwomIzQzOwomIzQzOwkJaWYgKGN1ci0mZ3Q7aG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVCkKJiM0MzsJCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7CiYjNDM7CQllbHNlIHsKJiM0MzsJCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLAomIzQzOwkJCQkJCSBjdXItJmd0O3ByaW9yaXR5LCBmYW1pbHksCiAJCQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKJiM0MzsJCX0KIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAogZG9uZToKLQlubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpOwomIzQzOwlpZiAobmxza2ItJmd0O2xlbiAmZ3Q7IDApCiYjNDM7CQlubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWNiLSZndDthcmdzWzBdID0gaTsKIAlyZXR1cm4gbmxza2ItJmd0O2xlbjsKQEAgLTQ0MiwxMCAmIzQzOzQ1OCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXN0cnNjcHkoY3R4LSZndDtkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LSZndDtkZXZuYW1lKSk7Ci0JY3R4LSZndDtoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7CiAJY3R4LSZndDtob29rID0gaG9va251bTsKLQotCWNiLSZndDtzZXEgPSAxOwogCWNiLSZndDtkYXRhID0gY3R4OwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gTXkgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0byBsb29rIGF0IHRoZSB0b3VjaGVkIGZpbGVzLiBBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgc2VlaW5nOiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLCBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgd2hhdCYjMzk7cyB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2luZyo/IEFoLCBpdCBhcHBlYXJzIHRvIGJlIHRyYWNraW5nIHNlcXVlbmNlIG51bWJlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIG5ldGZpbHRlciBhbmQgTkFUIGhvb2tzLiBJbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpbiBgbmZuZXRsaW5rX2hvb2suY2AsIGBuZm5sX2hvb2tfZHVtcGAgYW5kIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGFyZSB1c2luZyBgY2ItJmd0O3NlcWAgYW5kIGBiYXNlX3NlcWAgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2hlbiBkdW1waW5nIG5ldGZpbHRlciBob29rcyBvdmVyIG5ldGxpbmsuIFBsdXMsIGl0IHNlZW1zIHRvIGJlIGZpeGluZyBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGl0ZXJhdGluZyBhbmQgcmVzdW1pbmcgYWNyb3NzIG5ldGxpbmsgZHVtcHMgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCByYWNlcywgd2hpY2ggSSYjMzk7dmUgc2VlbiBiZSBhIGdvb2Qgc3BvdCBmb3IgZnV6emluZy4KCk15IG5leHQgbW92ZSBpcyBhbHdheXMgdG8gZXhhbWluZSB0aGUgY29kZSBhbmQgYEtjb25maWdgIG9wdGlvbnMgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgc3Vic3lzdGVtIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBwcm9iYWJseSByZWFjaCBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBjb250ZXh0IGFuZCBlbnRyeSBwb2ludHMgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX05FVExJTktfSE9PSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjoKCioqRmluZGluZyB0aGUgU291cmNlIG9mIHRoZSBIb29rKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgbmZuZXRsaW5rX2hvb2suY2AgZmlsZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGZvciBhbnl0aGluZyBuZXR3b3JrIGZpbHRlcmluZyByZWxhdGVkLiBCdXQgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVzdCBzdGFydCBwb2tpbmcgYXJvdW5kLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgaXQgc3lzdGVtYXRpY2FsbHkuCgpXaGVyZSB3b3VsZCBJIG5vcm1hbGx5IGxvb2s/IE1ha2VmaWxlISBZZWFoLCB0aGF0JiMzOTtzIGl0LiBUaGF0IGlzIHRoZSBwbGFjZSB3aGVyZSBhbGwgdGhlIG90aGVyIG9iamVjdHMgYXJlIGRlZmluZWQuCkl0JiMzOTtzIGxpa2VseSBsaXN0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBIb3BlZnVsbHksIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGluY2x1c2lvbiwgYnV0IGV2ZW4gaWYgaXQmIzM5O3MgcmVmZXJlbmNlZCB0aHJvdWdoIHNvbWUgaW5kaXJlY3QgZGVwZW5kZW5jeSwgdGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgYnVpbGQgcHJvY2Vzcy4gQWxyaWdodCwgbGV0JiMzOTtzIGdldCB0byBpdC4gVGltZSB0byBncmVwIHRocm91Z2ggdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19PU0YpICYjNDM7PSBuZm5ldGxpbmtfb3NmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICYjNDM7PSBuZm5ldGxpbmtfaG9vay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTMyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTIyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz01MTE9TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0hPT0spO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxMi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MTM6c3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2hvb2tfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxNC17XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxNy1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MTg6c3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19ob29rX2V4aXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MjItXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NTIzOm1vZHVsZV9pbml0KG5mbmV0bGlua19ob29rX2luaXQpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjUyNDptb2R1bGVfZXhpdChuZm5ldGxpbmtfaG9va19leGl0KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MjUtXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTUyNz1NT0RVTEVfQVVUSE9SKFwmIzM0O0Zsb3JpYW4gV2VzdHBoYWwgXHUwMDNjZndAc3RybGVuLmRlXHUwMDNlXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1Mjg6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBvZiBteSBvd24gaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIERpdmUgZm9yIE5ldGZpbHRlciBOZXRsaW5rIEhvb2tzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOZXRmaWx0ZXIgTmV0bGluayBIb29rIGZ1bmN0aW9uYWxpdHkuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0tgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRhcmdldCwgdGhlIGtleSBJIG5lZWQgdG8gdHVybiB0byB1bmxvY2sgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgY2FwYWJpbGl0aWVzLiBCdXQsIGl0JiMzOTtzIG5ldmVyIGp1c3QgdGhhdCBzaW1wbGUsIGlzIGl0PwoKSSBrbm93IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGl04oCZcyBlbmFibGVkIGRpcmVjdGx5LCBzbyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGVzPyBXaGF0IG90aGVyIGZlYXR1cmVzIG9yIHVuZGVybHlpbmcgY29tcG9uZW50cyAqbXVzdCogYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiBzZWUgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LYCBhcyBhbiBvcHRpb24sIGxldCBhbG9uZSBlbmFibGUgaXQgbXlzZWxmPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBLY29uZmlnIGhpZXJhcmNoeSwgdW5kZXJzdGFuZGluZyB0aGUgbG9naWNhbCBnYXRlcyBhbmQgZ3VhcmRyYWlscyB0aGF0IGNvbnRyb2wgdGhlIHZpc2liaWxpdHkgYW5kIGF2YWlsYWJpbGl0eSBvZiB0aGlzIHNwZWNpZmljIGNvbmZpZyBvcHRpb24uIFRoaXMgaXMgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnN0cmFpbnRzKiBhbmQgdGhlICpwYXRod2F5cyouIEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgZW5hYmxpbmcgdHJlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTMzPWNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgYXJvdW5kIGxpbmUgMzYuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbmV0ZmlsdGVyIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gSeKAmW0gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZm9yIHNvbWUgb2YgdGhlIGZpbHRlcmluZyBydWxlcyBpcyBkZWZpbmVkLiBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyBhIHNwZWNpZmljIG5ldHdvcmsgcGFja2V0IGlzIHByb2Nlc3NlZCBhbmQgd2hpY2ggcnVsZXMgaXQgZ29lcyB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMjg6XHRcdGJvb2xcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcbiAgMzE6XHRcdGJvb2xcbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4gIDM0Olx0XHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgMzk6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gIDQwOlx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNDE6XHRcdGhlbHBcbiAgNDI6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA0MzpcdFx0ICB0byBsaXN0IHRoZSBiYXNlIG5ldGZpbHRlciBob29rcyB2aWEgTkZORVRMSU5LLlxuICA0NDpcdFx0ICBUaGlzIGlzIGhlbHBmdWwgZm9yIGRlYnVnZ2luZy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxuICA0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GQUNDVCBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDQ5Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA1MjpcdFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxuICA1MzpcdFxuICA1NDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuICA1NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDU2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICA1NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDU4Olx0XHRoZWxwXG4gIDU5Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNjA6XHRcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG4gIDYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA2NDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBORl9OQVQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGVhc3kgdG8gZ2V0IGNhdWdodCB1cCBpbiB0aGUgaGlnaC1sZXZlbCBzdHVmZiwgYnV0IHRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGVzcGVjaWFsbHkgd2l0aCBOQVQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb21waWxhdGlvbiBwYXRoIGZvciBgbmZfbmF0X3JlZ2lzdGVyX2ZuYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhhdCBmdW5jdGlvbiBiYWNrIHRvIHdoZXJlIGl0JiMzOTtzIGNvbXBpbGVkLCB3aGljaCBJIHN0cm9uZ2x5IHN1c3BlY3Qgd2lsbCBiZSBpbiBgbmZfbmF0X2NvcmUuY2AuIEtub3dpbmcgdGhlIGJ1aWxkIHByb2Nlc3Mgd2lsbCByZWFsbHkgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGFuZCBsaW5rZWQuIE5vIHN0b25lIHVudHVybmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9uYXRfY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFApICYjNDM7PSBuZl9jb25udHJhY2tfdGZ0cC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTU1LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1NjpuZl9uYXQteVx0Oj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfcHJvdG8ubyBuZl9uYXRfaGVscGVyLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTctXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE4Ny0jaWZuZGVmIE1PRFVMRVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjExODg6XHQvKiBJZiBuZl9uYXRfY29yZSBpcyBidWlsdC1pbiBhbmQgbmZfbmF0X2luaXQoKSBmYWlscywgZGVwZW5kZW50XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE4OS1cdCAqIG1vZHVsZXMgbGlrZSBuZnRfY2hhaW5fbmF0LmtvIG1heSBzdGlsbCBjYWxsIHRoaXMgZnVuY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5IGFuZCBzcGVjaWZpY2FsbHkgbGluZSA1NiBpbiB0aGUgYE1ha2VmaWxlYC4gVGhhdCBsaW5lIGlzIHRoZSB0YXJnZXQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSBrbm93IEkmIzM5O20gaW50ZXJlc3RlZCBpbiBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyB0aGUgTWFrZWZpbGUgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gbGlrZWx5IGxvb2tpbmcgZm9yIGhvdyBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNvbXBvbmVudCB3aXRoaW4gbmV0ZmlsdGVyIGlzIGNvbXBpbGVkLCBsaW5rZWQsIG9yIGluY2x1ZGVkLiBQZXJoYXBzIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGFkZCBhIG5ldyBydWxlLCBkZWJ1ZyBhIHByb2JsZW0sIG9yIHVuZGVyc3RhbmQgc29tZSBidWlsZC10aW1lIGZsYWcuIExpbmUgNTYgaXMgdGhlIGNyaXRpY2FsIHBvaW50IGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBzdGFydCB0byBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBuZXRmaWx0ZXImIzM5O3MgaW5uZXIgd29ya2luZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICYjNDM7PSBuZl9jb25udHJhY2tfc25tcC5vXG4gIDUxOlx0b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19QUFRQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3BwdHAub1xuICA1MjpcdG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSkgJiM0Mzs9IG5mX2Nvbm50cmFja19zYW5lLm9cbiAgNTM6XHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19zaXAub1xuICA1NDpcdG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja190ZnRwLm9cbiAgNTU6XHRcbiAgNTY6XHRuZl9uYXQteVx0Oj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfcHJvdG8ubyBuZl9uYXRfaGVscGVyLm9cbiAgNTc6XHRcbiAgNTg6XHRvYmotJChDT05GSUdfTkZfTE9HX1NZU0xPRykgJiM0Mzs9IG5mX2xvZ19zeXNsb2cub1xuICA1OTpcdFxuICA2MDpcdG9iai0kKENPTkZJR19ORl9OQVQpICYjNDM7PSBuZl9uYXQub1xuICA2MTpcdG5mX25hdC0kKENPTkZJR19ORl9OQVRfUkVESVJFQ1QpICYjNDM7PSBuZl9uYXRfcmVkaXJlY3Qub1xuICA2MjpcdG5mX25hdC0kKENPTkZJR19ORl9OQVRfTUFTUVVFUkFERSkgJiM0Mzs9IG5mX25hdF9tYXNxdWVyYWRlLm9cbiAgNjM6XHRuZl9uYXQtJChDT05GSUdfTkZfTkFUX09WUykgJiM0Mzs9IG5mX25hdF9vdnMub1xuICA2NDpcdFxuICA2NTpcdGlmZXEgKCQoQ09ORklHX05GX05BVCksbSlcbiAgNjY6XHRuZl9uYXQtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgJiM0Mzs9IG5mX25hdF9icGYub1xuICA2NzpcdGVsc2UgaWZlcSAoJChDT05GSUdfTkZfTkFUKSx5KVxuICA2ODpcdG5mX25hdC0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX25hdF9icGYub1xuICA2OTpcdGVuZGlmXG4gIDcwOlx0XG4gIDcxOlx0IyBOQVQgaGVscGVyc1xuICA3MjpcdG9iai0kKENPTkZJR19ORl9OQVRfQU1BTkRBKSAmIzQzOz0gbmZfbmF0X2FtYW5kYS5vXG4gIDczOlx0b2JqLSQoQ09ORklHX05GX05BVF9GVFApICYjNDM7PSBuZl9uYXRfZnRwLm9cbiAgNzQ6XHRvYmotJChDT05GSUdfTkZfTkFUX0lSQykgJiM0Mzs9IG5mX25hdF9pcmMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgSG9vayBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgTmV0ZmlsdGVyIGhvb2tzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgdGhlIE5ldGxpbmsgaW50ZXJmYWNlLiBSaWdodCwgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgcmVnaXN0cmF0aW9uIGFuZCBkaXNwYXRjaGluZyBtZWNoYW5pc21zLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIHRoZSBvdmVyYWxsIGZsb3cgb2YgaG93IE5ldGxpbmsgbWVzc2FnZXMgZ2V0IHByb2Nlc3NlZCBhbmQgdWx0aW1hdGVseSBwYXNzZWQgdG8gdGhlIHJlZ2lzdGVyZWQgaG9vayBmdW5jdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBuZXRsaW5rIG1lc3NhZ2UgaGFuZGxlcnMsIHRoZSBob29rIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zLCBhbmQgaG93IHRoZSBwYXlsb2FkIGlzIGFjdHVhbGx5IHBhc3NlZCB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgbGF5ZXJzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBmb3IgbGF0ZXIuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBjb2RlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHRnb3RvIGRvbmU7XG4gNDAxOlx0XG4gNDAyOlx0XHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA0MDU6XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuIDQwODpcdFx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiA0MDk6XHRcdFx0ZWxzZSB7XG4gNDEwOlx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbiA0MTE6XHRcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gNDEyOlx0XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDQxMzpcdFx0XHR9XG4gNDE0Olx0XHRcdGlmIChlcnIpXG4gNDE1Olx0XHRcdFx0YnJlYWs7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0ZG9uZTpcbiA0MTk6XHRcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4gNDIwOlx0XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gNDIxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA0MjI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIDQyMzpcdFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDI3Olx0e1xuIDQyODpcdFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbiA0Mjk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXHUwMDNlZGF0YTtcbiA0MzA6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xuIDQzMTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbiA0MzI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiA0MzM6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcJiMzNDtcJiMzNDs7XG4gNDM0Olx0XHRjb25zdCB2b2lkICpoZWFkO1xuIDQzNTpcdFx0dTMyIGhvb2tudW07XG4gNDM2Olx0XG4gNDM3Olx0XHRob29rbnVtID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYVtORk5MQV9IT09LX0hPT0tOVU1dKSk7XG4gNDM4Olx0XHRpZiAoaG9va251bSBcdTAwM2UgMjU1KVxuIDQzOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDA6XHRcbiA0NDE6XHRcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19ORVRERVYpIHtcbiA0NDI6XHRcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19ERVZdKVxuIDQ0MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0XHRubGFfc3Ryc2NweShuYW1lLCBubGFbTkZOTEFfSE9PS19ERVZdLCBzaXplb2YobmFtZSkpO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdFxuIDQ0ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDQ0OTpcdFx0LyogTm90IGRlcmVmZXJlbmNlZDsgZm9yIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgKi9cbiA0NTA6XHRcdGhlYWQgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgaG9va251bSwgbmV0LCBuYW1lKTtcbiA0NTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDQ1MjpcdFxuIDQ1MzpcdFx0aWYgKGhlYWQgXHUwMDI2XHUwMDI2IElTX0VSUihoZWFkKSlcbiA0NTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoaGVhZCk7XG4gNDU1Olx0XG4gNDU2Olx0XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiA0NTc6XHRcdGlmICghY3R4KVxuIDQ1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0NTk6XHRcbiA0NjA6XHRcdHN0cnNjcHkoY3R4LVx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXHUwMDNlZGV2bmFtZSkpO1xuIDQ2MTpcdFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuIDQ2MjpcdFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiA0NjM6XHRcbiA0NjQ6XHRcdHJldHVybiAwO1xuIDQ2NTpcdH1cbiA0NjY6XHRcbiA0Njc6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0b3Aoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDQ2ODpcdHtcbiA0Njk6XHRcdGtmcmVlKGNiLVx1MDAzZWRhdGEpO1xuIDQ3MDpcdFx0cmV0dXJuIDA7XG4gNDcxOlx0fVxuIDQ3MjpcdFxuIDQ3MzpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDQ3NDpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIDQ3NTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4gNDc2Olx0e1xuIDQ3NzpcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcbiA0Nzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDc5Olx0XG4gNDgwOlx0XHRpZiAoaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfZmxhZ3MgXHUwMDI2IE5MTV9GX0RVTVApIHtcbiA0ODE6XHRcdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG4gNDgyOlx0XHRcdFx0LnN0YXJ0ID0gbmZubF9ob29rX2R1bXBfc3RhcnQsXG4gNDgzOlx0XHRcdFx0LmRvbmUgPSBuZm5sX2hvb2tfZHVtcF9zdG9wLFxuIDQ4NDpcdFx0XHRcdC5kdW1wID0gbmZubF9ob29rX2R1bXAsXG4gNDg1Olx0XHRcdFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxuIDQ4NjpcdFx0XHRcdC5kYXRhID0gKHZvaWQgKilubGEsXG4gNDg3Olx0XHRcdH07XG4gNDg4Olx0XG4gNDg5Olx0XHRcdHJldHVybiBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KGluZm8tXHUwMDNlc2ssIHNrYiwgaW5mby1cdTAwM2VubGgsIFx1MDAyNmMpO1xuIDQ5MDpcdFx0fVxuIDQ5MTpcdFxuIDQ5MjpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDQ5MzpcdH1cbiA0OTQ6XHRcbiA0OTU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9ob29rX2NiW05GTkxfTVNHX0hPT0tfTUFYXSA9IHtcbiA0OTY6XHRcdFtORk5MX01TR19IT09LX0dFVF0gPSB7XG4gNDk3Olx0XHRcdC5jYWxsXHRcdD0gbmZubF9ob29rX2dldCxcbiA0OTg6XHRcdFx0LnR5cGVcdFx0PSBORk5MX0NCX1JDVSxcbiA0OTk6XHRcdFx0LmF0dHJfY291bnRcdD0gTkZOTEFfSE9PS19NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzEyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgcGFydGljdWxhciBjb2RlOgoKKipEaXZpbmcgaW50byBuZm5ldGxpbmtfaG9vay5jKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlc3Qgb2YgYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIG5ldGZpbHRlciBob29rcyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYXQgdGhlIG5ldGxpbmsgbGV2ZWwuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBoaWdoLWxldmVsIGNvbmNlcHRzLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgYmVpbmcgdXNlZD8gSG93IGFyZSB0aGUgaG9va3MgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgbmV0bGluayBjb21tdW5pY2F0aW9uIGxheWVyLiBJIHdhbnQgdG8gbG9vayBmb3IgZGV0YWlscyBvbiBob3cgdGhlIGhvb2sgZnVuY3Rpb25zIGFyZSBjaGFpbmVkIGFuZCBob3cgdGhlIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgYW5kIHRyYW5zbWl0dGVkLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGZsb3csIGZyb20gdGhlIGtlcm5lbCBtb2R1bGUmIzM5O3MgcGVyc3BlY3RpdmUuIEl0JiMzOTtzIHRpbWUgdG8gc2VlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9ob29rX2NiW05GTkxfTVNHX0hPT0tfTUFYXSA9IHtcbiA0OTY6XHRcdFtORk5MX01TR19IT09LX0dFVF0gPSB7XG4gNDk3Olx0XHRcdC5jYWxsXHRcdD0gbmZubF9ob29rX2dldCxcbiA0OTg6XHRcdFx0LnR5cGVcdFx0PSBORk5MX0NCX1JDVSxcbiA0OTk6XHRcdFx0LmF0dHJfY291bnRcdD0gTkZOTEFfSE9PS19NQVgsXG4gNTAwOlx0XHRcdC5wb2xpY3lcdFx0PSBuZm5sX2hvb2tfbmxhX3BvbGljeVxuIDUwMTpcdFx0fSxcbiA1MDI6XHR9O1xuIDUwMzpcdFxuIDUwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSBuZmhvb2tfc3Vic3lzID0ge1xuIDUwNTpcdFx0Lm5hbWVcdFx0XHRcdD0gXCYjMzQ7bmZob29rXCYjMzQ7LFxuIDUwNjpcdFx0LnN1YnN5c19pZFx0XHRcdD0gTkZOTF9TVUJTWVNfSE9PSyxcbiA1MDc6XHRcdC5jYl9jb3VudFx0XHRcdD0gTkZOTF9NU0dfSE9PS19NQVgsXG4gNTA4Olx0XHQuY2JcdFx0XHRcdD0gbmZubF9ob29rX2NiLFxuIDUwOTpcdH07XG4gNTEwOlx0XG4gNTExOlx0TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0hPT0spO1xuIDUxMjpcdFxuIDUxMzpcdHN0YXRpYyBpbnQgX19pbml0IG5mbmV0bGlua19ob29rX2luaXQodm9pZClcbiA1MTQ6XHR7XG4gNTE1Olx0XHRyZXR1cm4gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcdTAwMjZuZmhvb2tfc3Vic3lzKTtcbiA1MTY6XHR9XG4gNTE3Olx0XG4gNTE4Olx0c3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19ob29rX2V4aXQodm9pZClcbiA1MTk6XHR7XG4gNTIwOlx0XHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXHUwMDI2bmZob29rX3N1YnN5cyk7XG4gNTIxOlx0fVxuIDUyMjpcdFxuIDUyMzpcdG1vZHVsZV9pbml0KG5mbmV0bGlua19ob29rX2luaXQpO1xuIDUyNDpcdG1vZHVsZV9leGl0KG5mbmV0bGlua19ob29rX2V4aXQpO1xuIDUyNTpcdFxuIDUyNjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gNTI3Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtGbG9yaWFuIFdlc3RwaGFsIFx1MDAzY2Z3QHN0cmxlbi5kZVx1MDAzZVwmIzM0Oyk7XG4gNTI4Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LiBGaXJzdCwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4gSXQmIzM5O3MgdG91Y2hpbmcgbmV0ZmlsdGVyIGhvb2sgc2VxdWVuY2UgdHJhY2tpbmcsIGltcGxlbWVudGluZyBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gdXNpbmcgYFJFQURfT05DRWAsIGBzbXBfbG9hZF9hY3F1aXJlYCwgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAgZHVyaW5nIG5ldGxpbmsgZHVtcGluZyBvZiBob29rcywgYW5kIE5BVCBob29rcywgcGFnaW5hdGlvbi9hcmdzIGhhbmRsaW5nIGFjcm9zcyBkdW1wIGNhbGxzLCBhbmQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggYG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudGAuIENydWNpYWxseSwgdGhpcyBuZXRmaWx0ZXIgaG9vayBkdW1wIGlzIHVzZXItdHJpZ2dlcmFibGUgdmlhIHRoZSBgbmZuZXRsaW5rYCBzb2NrZXQgKEFGX05FVExJTksgd2l0aCB0aGUgTkVUTElOS19ORVRGSUxURVIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYE5GTkxfU1VCU1lTX0hPT0tgKS4gVGhpcyBraW5kIG9mIGFjY2VzcyBpcyByaWdodCB1cCBvdXIgYWxsZXkg4oCTIGNvcmUgbmV0ZmlsdGVyL25mbmV0bGluayBjb2RlLCByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gVGhhdCBhbG9uZSBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LgoKTm93LCB3aGljaCBzeW1ib2xzIHNob3VsZCBiZSBvdXIgZm9jdXM/IExldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IHBsYXllcnMuIFdlJiMzOTt2ZSBnb3QgYG5mbmxfaG9va19nZXRgLCBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYG5mX25hdF9yZWdpc3Rlcl9mbmAsIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAsIGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AsIGFuZCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuCgpIYW5nIG9uLCB3ZSBuZWVkIHRvIGNsYXJpZnkgd2hhdCB0aGUgKmVudHJ5cG9pbnRzKiBhcmUsIGFuZCB3aGF0IGlzbiYjMzk7dCBzdGF0aWMuIGBuZm5sX2hvb2tfZ2V0YCBpcyBzdGF0aWMsIHJlZmVyZW5jZWQgd2l0aGluIGBuZm5sX2hvb2tfY2JgLiBUaGF0JiMzOTtzIGxlc3MgaWRlYWwsIHRob3VnaCBzeXprYWxsZXIgY2FuIHN0aWxsIHdvcmsgd2l0aCBpdCBpZiBpdCYjMzk7cyBub3QgaW5saW5lZC4gYG5mX25hdF9yZWdpc3Rlcl9mbmAgYW5kIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIGZyb20gYG5mX25hdF9jb3JlLmNgLiBTYW1lIHdpdGggYG5mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgIGZvdW5kIGluIGBjb3JlLmNgLiBJbiBgbmZuZXRsaW5rX2hvb2suY2AsIHdlJiMzOTt2ZSBnb3QgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGFuZCBgbmZubF9ob29rX2dldGAuICBJZGVhbGx5LCB3ZSYjMzk7cmUgbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sLCBlc3BlY2lhbGx5IG5vbi1zdGF0aWMgb3IgZW50cnlwb2ludHMuIFRoZXNlIGFyZSBpZGVhbCBmb3Igc3l6a2FsbGVyIEtDT1YgYW5kIGZvY3VzIHN5bWJvbCB0YXJnZXRpbmcuIFRoaXMgcG9pbnRzIHVzIHJpZ2h0IGJhY2sgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYG5mbmxfaG9va19nZXRgLCBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYG5mX25hdF9yZWdpc3Rlcl9mbmAsIGFuZCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AgaXMgaW5kZWVkIGluIGBjb3JlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9jb3JlLmM9Mzg5PXN0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtMzk3LVxubmV0L25ldGZpbHRlci9jb3JlLmM6Mzk4OnN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTM5OS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmM9NTU5PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2MC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU2MTppbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2Mi17XG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTY2LVx0XHRpZiAocmVnLVx1MDAzZWhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKSB7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1Njc6XHRcdFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSU5FVCwgcmVnKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2OC1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU3MC1cdFx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU3MTpcdFx0XHRlcnIgPSBfX25mX3JlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY0LCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTcyLVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTc0LVxubmV0L25ldGZpbHRlci9jb3JlLmM6NTc1Olx0XHRcdGVyciA9IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lQVjYsIHJlZyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzYtXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU4MS1cdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1ODI6XHRcdGVyciA9IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCByZWctXHUwMDNlcGYsIHJlZyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01ODMtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTg4LX1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU4OTpFWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX25ldF9ob29rKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU5MC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU5MTppbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTItXHRcdFx0ICB1bnNpZ25lZCBpbnQgbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTk4Olx0XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFx1MDAyNnJlZ1tpXSk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTktXHRcdGlmIChlcnIpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNjA4LX1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjYwOTpFWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX25ldF9ob29rcyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yNDIyPWludCBpcF92c19yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGFmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0My1cdGlmICghKGlwdnMtXHUwMDNlaG9va3NfYWZtYXNrIFx1MDAyNiBhZm1hc2spKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0NDQ6XHRcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhpcHZzLVx1MDAzZW5ldCwgb3BzLCBjb3VudCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI0NDUtXHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYz0yMTA9aW50IGJwZl9uZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM6MjU3Olx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcdTAwMjZsaW5rLVx1MDAzZWhvb2tfb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0yNTgtXHRpZiAoZXJyKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz00NDM9c3RhdGljIGludCBuZl9jdF9uZXRuc19kb19nZXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo0NjI6XHRcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNDYzLVx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NDgwOlx0XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ4MS1cdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjUwNzpcdFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmZfY3RfYnJpZGdlX2luZm8tXHUwMDNlb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MDgtXHRcdFx0XHRcdCAgICBuZl9jdF9icmlkZ2VfaW5mby1cdTAwM2VvcHNfc2l6ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTIzNC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzoxMjM1Olx0XHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEyMzYtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYz03NzI9aW50IG5mX3N5bnByb3h5X2lwdjRfaW5pdChzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtNzc3LVx0aWYgKHNuZXQtXHUwMDNlaG9va19yZWY0ID09IDApIHtcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jOjc3ODpcdFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2NF9zeW5wcm94eV9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy03NzktXHRcdFx0XHRcdCAgICBBUlJBWV9TSVpFKGlwdjRfc3lucHJveHlfb3BzKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM9MTIwMz1uZl9zeW5wcm94eV9pcHY2X2luaXQoc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTEyMDgtXHRpZiAoc25ldC1cdTAwM2Vob29rX3JlZjYgPT0gMCkge1xubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM6MTIwOTpcdFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9zeW5wcm94eV9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy0xMjEwLVx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMxNj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNS1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFx1MDAyNmhvb2stXHUwMDNlb3BzX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyNjpcdFx0XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjctXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjU9c3RhdGljIGludCBuZl90YWJsZXNfcmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ1Olx0cmV0dXJuIG5mX3JlZ2lzdGVyX25ldF9ob29rKG5ldCwgXHUwMDI2YmFzZWNoYWluLVx1MDAzZW9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDYtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMDk9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX29wcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTAxOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwMjA6XHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDIxLVx0aWYgKCFlcnIpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM9MzIyPXN0YXRpYyBpbnQgbmZ0X25ldGRldl9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jLTM1OS1cdFx0XHRpZiAoISh0YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RBQkxFX0ZfRE9STUFOVCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYzozNjA6XHRcdFx0ICAgIG5mX3JlZ2lzdGVyX25ldF9ob29rKGRldl9uZXQoZGV2KSwgb3BzKSkge1xubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmMtMzYxLVx0XHRcdFx0a2ZyZWUob3BzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTU1NT1zdHJ1Y3QgeHRfdGFibGUgKnh0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxMC1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNjExOlx0XHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBvcHMsIG51bV9vcHMpO1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2MTItXHRcdGlmIChyZXQgIT0gMCkge1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2MTMtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnh0W3RhYmxlLVx1MDAzZWFmXS5tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTYxNDpcdFx0XHQvKiBuZl9yZWdpc3Rlcl9uZXRfaG9va3MoKSBtaWdodCBoYXZlIHB1Ymxpc2hlZCBhXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxNS1cdFx0XHQgKiBiYXNlIGNoYWluIGJlZm9yZSBpbnRlcm5hbCBlcnJvciB1bndpbmQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktjb25maWcgRGVwZW5kZW5jeSBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGZvciBgTkVURklMVEVSX05FVExJTktfSE9PS2AgaXMgY29ycmVjdGx5IHNldCB1cC4gRmlyc3QsIGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgc2VlIGl0IGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAgYW5kIGBORl9UQUJMRVNgIGFuZCBhbHNvIHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYC4KCk5vdyBJIHNlZToKKiAgIGBDT05GSUdfTkVURklMVEVSYAoqICAgYENPTkZJR19ORl9OQVRgCiogICBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0tgCiogICBgQ09ORklHX05GX1RBQkxFU2AKClNvLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBwYXJlbnQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBgTkVURklMVEVSYCwgYE5GX05BVGAsIGFuZCBgTkZfVEFCTEVTYC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfTkFUYCB0byBtYXAgb3V0IHRoZSBmdWxsIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGluIG9yZGVyLCBvdGhlcndpc2UsIEkgbWlnaHQgaGF2ZSBzb21lIG5hc3R5IGJ1aWxkIGVycm9ycyBvciwgd29yc2UsIGZ1bmN0aW9uYWxpdHkgdGhhdCBkb2VzbiYjMzk7dCB3b3JrIGFzIGV4cGVjdGVkLiBUaW1lIHRvIHRyYWNlIHRoZSByYWJiaXQgaG9sZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cdGRlcGVuZHMgb24gSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY29uZmlnIE5GX05BVGAgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzLCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgYW5kIGRvdWJsZS1jaGVjayBob3cgYGNvbmZpZyBORl9OQVRgIGlzIGRlZmluZWQuIEkgd2FudCB0byBxdWlja2x5IHZlcmlmeSBpdHMgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCYjMzk7cyBzaXR1YXRlZCBpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suIElzIGl0IGEgY29yZSBtb2R1bGUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG90aGVyLCBtb3JlIGJhc2ljIE5BVCBjb21wb25lbnRzPyBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYW55IGNoYW5nZXMgSSBtaWdodCBiZSBjb25zaWRlcmluZy4gSSYjMzk7bSBhbHNvIGhvcGluZyB0aGUgaGVscCB0ZXh0IHdpbGwgcmVtaW5kIG1lIG9mIGFueSBvYnNjdXJlIG51YW5jZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzk4PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MDc6Y29uZmlnIE5GX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQwNy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGEgcmVsYXRlZCBibG9jayBvZiBvcHRpb25zLCBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIEtub3dpbmcgaG93IHRoaXMgaXMgbGFpZCBvdXQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIG9wdGlvbnMgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQgYW5kIG1hbmFnZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFueSBwcm9tcHRzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgbG9naWMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIGludmVzdGlnYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDU6XHRcdCAgdGhlIGVucXVldWVkIHZpYSBORk5FVExJTksuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIE5GX05BVFxuIDQwODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNDEwOlx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiA0MTE6XHRcdGhlbHBcbiA0MTI6XHRcdCAgVGhlIE5BVCBvcHRpb24gYWxsb3dzIG1hc3F1ZXJhZGluZywgcG9ydCBmb3J3YXJkaW5nIGFuZCBvdGhlclxuIDQxMzpcdFx0ICBmb3JtcyBvZiBmdWxsIE5ldHdvcmsgQWRkcmVzcyBQb3J0IFRyYW5zbGF0aW9uLiBUaGlzIGNhbiBiZVxuIDQxNDpcdFx0ICBjb250cm9sbGVkIGJ5IGlwdGFibGVzLCBpcDZ0YWJsZXMgb3IgbmZ0LlxuIDQxNTpcdFxuIDQxNjpcdGNvbmZpZyBORl9OQVRfQU1BTkRBXG4gNDE3Olx0XHR0cmlzdGF0ZVxuIDQxODpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVFxuIDQxOTpcdFx0ZGVmYXVsdCBORl9OQVQgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDS19BTUFOREFcbiA0MjA6XHRcbiA0MjE6XHRjb25maWcgTkZfTkFUX0ZUUFxuIDQyMjpcdFx0dHJpc3RhdGVcbiA0MjM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVRcbiA0MjQ6XHRcdGRlZmF1bHQgTkZfTkFUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0tfRlRQXG4gNDI1Olx0XG4gNDI2Olx0Y29uZmlnIE5GX05BVF9JUkNcbiA0Mjc6XHRcdHRyaXN0YXRlXG4gNDI4Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUXG4gNDI5Olx0XHRkZWZhdWx0IE5GX05BVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLX0lSQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uKioKCk9rYXksIHNvIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGVlcGVyIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmF0aW9uIHR3ZWFrcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYmFzaWNzIGFyZSBpbiBwbGFjZS4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpcyBhbWlzcywgcHJvYmFibHkgd2l0aCB0aGUgbmV0d29yayBjb25uZWN0aW9uIHRyYWNraW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSByZWxldmFudCBrZXJuZWwgbW9kdWxlIGlzIGV2ZW4gbG9hZGVkLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBjb25maWcgTkZfQ09OTlRSQUNLYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSWYgdGhhdCYjMzk7cyBub3QgcmlnaHQsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBqdXN0IHdhc3RlZCBlZmZvcnQuIE5vIHNlbnNlIGNoYXNpbmcgZ2hvc3RzIHVudGlsIEkmIzM5O20gY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBjb25maWd1cmVkIHByb3Blcmx5LiBJJiMzOTtsbCBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBjb25maWcgTkVURklMVEVSYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGNvbmZpZyBORVRGSUxURVJgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBjb21wb25lbnQsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBjb25maWd1cmF0aW9uLiBJ4oCZbSBpbW1lZGlhdGVseSBnb2luZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBwZXJmb3JtYW5jZSBhc3BlY3RzIGFzc29jaWF0ZWQgd2l0aCBpdC4gV2hhdCBhcmUgdGhlIGtleSBzZXR0aW5ncz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1pc2NvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcHJvYmxlbWF0aWMgb3IgcmVxdWlyaW5nIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTE1ND1jb25maWcgTkVUV09SS19QSFlfVElNRVNUQU1QSU5HXG4tLVxubmV0L0tjb25maWctMTY0LVxubmV0L0tjb25maWc6MTY1Om1lbnVjb25maWcgTkVURklMVEVSXG5uZXQvS2NvbmZpZy0xNjYtXHRib29sIFwmIzM0O05ldHdvcmsgcGFja2V0IGZpbHRlcmluZyBmcmFtZXdvcmsgKE5ldGZpbHRlcilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgQWR2YW5jZWQgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGhpcyBpcyB0aGUganVtcGluZy1vZmYgcG9pbnQgZm9yIGFueSBkZWVwZXIgTmV0ZmlsdGVyIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGlmIGFkdmFuY2VkIE5ldGZpbHRlciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhdCB0aGlzIGxldmVsIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBnZXR0aW5nIGludG8gdGhlIGRldGFpbHMuIFRoYXQgc2V0dGluZyB3aWxsIGRpY3RhdGUgd2hhdCB0b29scyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBtZSBhcyBJIGdvIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIHRoZSBmaXJzdCBmaWx0ZXIuIEtub3dpbmcgdGhhdCBzdGF0ZSBpbmZvcm1zIGFsbCB0aGUgZGVjaXNpb25zIEkmIzM5O2xsIGJlIG1ha2luZyBhYm91dCBydWxlcywgdGFyZ2V0cywgYW5kIGhvdyBJJiMzOTttIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHBhY2tldCBmaWx0ZXJpbmcgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIGJhc2ljLCBvciB0aGUgbW9yZSBleHBhbnNpdmUsIGZlYXR1cmVzIGFyZSBiZWluZyB1c2VkLiBTbywgbGV0JiMzOTtzIGNoZWNrIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMTg9aWYgTkVURklMVEVSXG5uZXQvS2NvbmZpZy0yMTktXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uICZhbXA7IEZ1bmN0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZy4gSSYjMzk7dmUgZ290IGEgY2hlY2tsaXN0OiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfSE9PS2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX05BVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBmb3VuZGF0aW9uIEkgbmVlZCBpbiBwbGFjZS4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgYW5kIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycywgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkIGhlcmUuIEkgc2VlIGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIHdoaWNoIHBvaW50IHRvIHRoZSBuZXR3b3JrIGZpbHRlciBuZXRsaW5rIGhvb2smIzM5O3MgZGVidWdnaW5nIGFuZCByZXRyaWV2YWwgbWVjaGFuaXNtcy4gVGhlbiB0aGVyZSBhcmUgdGhlIGBuZl9uYXRfcmVnaXN0ZXJfZm5gIGFuZCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCB3aGljaCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIGZvciBOQVQgb3BlcmF0aW9ucywgaG9va2luZyBhbmQgdW5ob29raW5nIE5BVC1yZWxhdGVkIGZ1bmN0aW9ucy4gQW5kIGZpbmFsbHksIHRoZSBzdGFuZGFyZCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIGFuZCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AsIHdoaWNoIGFyZSB0aGUgZnVuZGFtZW50YWwgbmV0d29yayBob29rIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zLgoKU2luY2UgSSYjMzk7bSBkZWFsaW5nIHdpdGggaG9va3MsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AgaXMgaW5kZWVkIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzbyB0aGF0IEkgY2FuIGNhbGwgaXQgZnJvbSBlbHNld2hlcmUuIFRoaXMgaXMga2V5IGZvciB0aGUgZHluYW1pYyBhc3BlY3RzIG9mIHRoaXMgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG5mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gTmV0ZmlsdGVyIFVucmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggaG93IE5ldGZpbHRlciBob29rcyBhcmUgdW5yZWdpc3RlcmVkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldHdvcmtpbmcgbmFtZXNwYWNlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbmV0L25ldGZpbHRlci9jb3JlLmNgLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgZWl0aGVyIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rYCBvciBwZXJoYXBzIGl0cyBwbHVyYWwgY291bnRlcnBhcnQsIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rc2AsIGlzIHRoZSBmdW5jdGlvbiBJJiMzOTttIGFmdGVyLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIHRoZSBzZWFyY2gsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBjb3JlIE5ldGZpbHRlciBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZpbGUgcmV2ZWFscy4uLiBUaW1lIHRvIHN0YXJ0IGdyZXBwaW5nIGFuZCBjcm9zcy1yZWZlcmVuY2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9jb3JlLmM9NDczPXN0YXRpYyBib29sIG5mX3JlbW92ZV9uZXRfaG9vayhzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpvbGQsXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNDkwLVxubmV0L25ldGZpbHRlci9jb3JlLmM6NDkxOnN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ5Mi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTMyLVxubmV0L25ldGZpbHRlci9jb3JlLmM6NTMzOnZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTM0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MzYtXHRcdGlmIChyZWctXHUwMDNlaG9va251bSA9PSBORl9JTkVUX0lOR1JFU1MpIHtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjUzNzpcdFx0XHRfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lORVQsIHJlZyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MzgtXHRcdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1Mzk6XHRcdFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY0LCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTQwOlx0XHRcdF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSVBWNiwgcmVnKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU0MS1cdFx0fVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQyLVx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU0MzpcdFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgcmVnLVx1MDAzZXBmLCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ0LVx0fVxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ1LX1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU0NjpFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfbmV0X2hvb2spO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTU2MT1pbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzYtXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTc3Olx0XHRcdFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY0LCByZWcpO1xubmV0L25ldGZpbHRlci9jb3JlLmMtNTc4LVx0XHRcdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz01OTE9aW50IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYwNS1cdGlmIChpIFx1MDAzZSAwKVxubmV0L25ldGZpbHRlci9jb3JlLmM6NjA2Olx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIHJlZywgaSk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MDctXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTYwOT1FWFBPUlRfU1lNQk9MKG5mX3JlZ2lzdGVyX25ldF9ob29rcyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTAtXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MTE6dm9pZCBuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjEyLVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGhvb2tjb3VudClcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBob29rY291bnQ7IGkmIzQzOyYjNDM7KVxubmV0L25ldGZpbHRlci9jb3JlLmM6NjE3Olx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgXHUwMDI2cmVnW2ldKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYxOC19XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MTk6RVhQT1JUX1NZTUJPTChuZl91bnJlZ2lzdGVyX25ldF9ob29rcyk7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MjAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yNDUxPXZvaWQgaXBfdnNfdW5yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGFmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ3MS1cdGlmIChpcHZzLVx1MDAzZWhvb2tzX2FmbWFzayBcdTAwMjYgYWZtYXNrKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI0NzI6XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKGlwdnMtXHUwMDNlbmV0LCBvcHMsIGNvdW50KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ3My1cdFx0aXB2cy1cdTAwM2Vob29rc19hZm1hc2sgXHUwMDI2PSB+YWZtYXNrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYz0xMTM9c3RhdGljIHZvaWQgYnBmX25mX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTEyMS1cdGlmICghY21weGNoZyhcdTAwMjZuZl9saW5rLVx1MDAzZWRlYWQsIDAsIDEpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM6MTIyOlx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5mX2xpbmstXHUwMDNlbmV0LCBcdTAwMjZuZl9saW5rLVx1MDAzZWhvb2tfb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0xMjMtXHRcdGJwZl9uZl9kaXNhYmxlX2RlZnJhZyhuZl9saW5rKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTUzMj1zdGF0aWMgdm9pZCBuZl9jdF9uZXRuc19kb19wdXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTM5LVx0XHRpZiAoY25ldC1cdTAwM2V1c2VyczQgXHUwMDI2XHUwMDI2ICgtLWNuZXQtXHUwMDNldXNlcnM0ID09IDApKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MDpcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTQxLVx0XHRcdFx0XHRcdEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NDctXHRcdGlmIChjbmV0LVx1MDAzZXVzZXJzNiBcdTAwMjZcdTAwMjYgKC0tY25ldC1cdTAwM2V1c2VyczYgPT0gMCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NTQ4Olx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9jb25udHJhY2tfb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NDktXHRcdFx0XHRcdFx0QVJSQVlfU0laRShpcHY2X2Nvbm50cmFja19vcHMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU1Ny1cdFx0aWYgKGNuZXQtXHUwMDNldXNlcnNfYnJpZGdlIFx1MDAyNlx1MDAyNiAoLS1jbmV0LVx1MDAzZXVzZXJzX2JyaWRnZSA9PSAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NTU4Olx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmZfY3RfYnJpZGdlX2luZm8tXHUwMDNlb3BzLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NTktXHRcdFx0XHRcdFx0bmZfY3RfYnJpZGdlX2luZm8tXHUwMDNlb3BzX3NpemUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0xMjY2PXZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDAtXHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTMwMTpcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDItXG4tLVxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM9NzkxPXZvaWQgbmZfc3lucHJveHlfaXB2NF9maW5pKHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy03OTUtXHRpZiAoc25ldC1cdTAwM2Vob29rX3JlZjQgPT0gMClcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jOjc5NjpcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY0X3N5bnByb3h5X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTc5Ny1cdFx0XHRcdFx0QVJSQVlfU0laRShpcHY0X3N5bnByb3h5X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jPTEyMjM9bmZfc3lucHJveHlfaXB2Nl9maW5pKHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy0xMjI3LVx0aWYgKHNuZXQtXHUwMDNlaG9va19yZWY2ID09IDApXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYzoxMjI4Olx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfc3lucHJveHlfb3BzLFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtMTIyOS1cdFx0XHRcdFx0QVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMxNj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM0MTpcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0Mi1cdFx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTM4Nz1zdGF0aWMgdm9pZCBuZnRfbmV0ZGV2X3VucmVnaXN0ZXJfdHJhbnNfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzk5LVx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcdTAwMjZob29rLVx1MDAzZW9wc19saXN0LCBsaXN0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDAwOlx0XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MDEtXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MDc9c3RhdGljIHZvaWQgbmZ0X25ldGRldl91bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MTctXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFx1MDAyNmhvb2stXHUwMDNlb3BzX2xpc3QsIGxpc3QpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MTg6XHRcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQxOS1cdFx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQ0OD1zdGF0aWMgdm9pZCBfX25mX3RhYmxlc191bnJlZ2lzdGVyX2hvb2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ3NDpcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcdTAwMjZiYXNlY2hhaW4tXHUwMDNlb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3NS19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5MT1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzA3Ni1cdFx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcdTAwMjZoLVx1MDAzZW9wc19saXN0LCBsaXN0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzA3NzpcdFx0XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhjdHgtXHUwMDNlbmV0LCBvcHMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzA3OC1cdFx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODk3Nz1zdGF0aWMgdm9pZCBuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfb3BzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTgwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg5ODE6XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5ODItXHRmbG93dGFibGUtXHUwMDNlZGF0YS50eXBlLVx1MDAzZXNldHVwKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VkYXRhLCBvcHMtXHUwMDNlZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jPTMyMj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYy0zNDAtXHRcdFx0aWYgKCEodGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9UQUJMRV9GX0RPUk1BTlQpKVxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM6MzQxOlx0XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhkZXZfbmV0KGRldiksIG9wcyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYy0zNDItXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTE2NTg9dm9pZCB4dF91bnJlZ2lzdGVyX3RhYmxlX3ByZV9leGl0KHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2NjktXHRcdFx0aWYgKHQtXHUwMDNlb3BzKSAvKiBuYXQgdGFibGUgcmVnaXN0ZXJzIHdpdGggbmF0IGNvcmUsIHQtXHUwMDNlb3BzIGlzIE5VTEwuICovXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTY3MDpcdFx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgdC1cdTAwM2VvcHMsIGh3ZWlnaHQzMih0LVx1MDAzZXZhbGlkX2hvb2tzKSk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTY3MS1cdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQ0CgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXImIzM5O3MgRnV6emluZyBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YXNrZWQgd2l0aCBtYXBwaW5nIG91dCB0aGUga2V5IGNvbXBvbmVudHMgZm9yIGZ1enppbmcgTmV0ZmlsdGVyLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8ga2VlcCBteSBleWUgb24gYXJlIGNsZWFybHk6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBUaGVzZSBhcmUgdGhlIG5lcnZlIGNlbnRlcnMgb2YgaG9vayBtYW5hZ2VtZW50IGFuZCBOQVQgb3BlcmF0aW9ucywgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBleHBsb2l0YWJsZSBidWdzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIHRvIHRhcmdldCB0aGVzZSBmdW5jdGlvbnMuIFRoZSBlc3NlbnRpYWwgY29uZmlncyBhcmUgYE5FVEZJTFRFUmAsIG9idmlvdXNseSwgYnV0IGFsc28gdGhlIGFkdmFuY2VkIG9wdGlvbnMgdW5kZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfSE9PS2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgY3J1Y2lhbGx5LCBgTkZfTkFUYC4gV2l0aG91dCB0aGVzZSwgbXkgZnV6emluZyBlZmZvcnRzIGFyZSBnb2luZyB0byBiZSBjcmlwcGxlZC4KCkFscmlnaHQsIHRoZSBmaW5hbCBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGFsbCB0aGUgcGllY2VzIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlLi4uIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLCB0aGF0JiMzOTtzIGEgbm8tYnJhaW5lciBnaXZlbiB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzLiBUaGUgYFJlYXNvbmluZ2AgbmVlZHMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiBmb3IgdGhlIHZlcmRpY3QsIHdoaWNoIEkmIzM5O3ZlIGFscmVhZHkgaW50ZXJuYWxseSB2ZXJpZmllZC4gVGhlbiwgZm9yIHRoZSBlbmFibGluZyBjb25maWdzLCBJJiMzOTtsbCBuZWVkIGFuIGFycmF5IG9mIHN0cmluZ3MsIGJ1dCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LiBGaW5hbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgaGFzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIG5hbWVzIEkgaWRlbnRpZmllZCBlYXJsaWVyLgoKV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIGFjY291bnRlZCBmb3IsIGl0JiMzOTtzIHRpbWUgdG8gdHJpZ2dlciB0aGF0IGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0hPT0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfaG9va19kdW1wJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZ2V0JiMzNDssCiAgICAmIzM0O25mX25hdF9yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9uYXRfdW5yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICAgJiMzNDtuZl91bnJlZ2lzdGVyX25ldF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0hPT0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfaG9va19kdW1wJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZ2V0JiMzNDssCiAgICAmIzM0O25mX25hdF9yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9uYXRfdW5yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICAgJiMzNDtuZl91bnJlZ2lzdGVyX25ldF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnksIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHNsaWNlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG4tIEFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBSQ1UgZGVyZWZlcmVuY2luZyBvciBob29rIGl0ZXJhdGlvbiBkdXJpbmcgY29uY3VycmVudCByZWdpc3RyYXRpb25zIGFyZSBsaWZldGltZS9jb25jdXJyZW5jeSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IEtBU0FOL0xPQ0tERVAsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTozNzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKQEAgLTMzLDUgJiM0MzszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpCiAJdW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzOwogI2VuZGlmCiYjNDM7CXVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxOwomIzQzOwl1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0zODYsNiAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKQogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CXdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMCkKJiM0MzsJCTsKJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZykKIHsKQEAgLTQyOCw2ICYjNDM7NDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCW5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7CiAKIAlpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJaG9va3NfdmFsaWRhdGUobmV3X2hvb2tzKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKCpwcCwgbmV3X2hvb2tzKTsKIAl9CkBAIC01MDYsNiAmIzQzOzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAkJCW5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7CiAjZW5kaWYKIAkJbmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAl9IGVsc2UgewogCQlXQVJOX09OQ0UoMSwgJiMzNDtob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkJiMzNDssIHBmLCByZWctJmd0O2hvb2tudW0pOwogCX0KQEAgLTc4NCw2ICYjNDM7Nzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwluZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEgPSAxOwomIzQzOwluZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsCiB9CiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwl3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApCiYjNDM7CQk7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0gewogCS5uYW1lCQk9ICYjMzQ7bmF0LWZvbGxvdy1tYXN0ZXImIzM0OywKIAkuZXhwZWN0Zm4JPSBuZl9uYXRfZm9sbG93X21hc3RlciwKQEAgLTEyNDUsOCAmIzQzOzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAl9CiAKIAlyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7Ci0JaWYgKHJldCA9PSAwKQomIzQzOwlpZiAocmV0ID09IDApIHsKJiM0MzsJCWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJbmF0X3Byb3RvX25ldC0mZ3Q7dXNlcnMmIzQzOyYjNDM7OwomIzQzOwl9CiAKIAltdXRleF91bmxvY2soJmFtcDtuZl9uYXRfcHJvdG9fbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMjg0LDYgJiM0MzsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAkJZ290byB1bmxvY2s7CiAJcHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjsKIAluZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7CiYjNDM7CWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAogCWlmIChuYXRfcHJvdG9fbmV0LSZndDt1c2VycyA9PSAwKSB7CiAJCW5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwppbmRleCA5NTAwNWU5YTYwNjY4Li4zMTAxM2MzMjEwOTk2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCkBAIC01NCw3ICYjNDM7NTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHsKIAljaGFyIGRldm5hbWVbSUZOQU1TSVpdOwotCXVuc2lnbmVkIGxvbmcgaGVhZHY7CiAJdTggaG9vazsKIH07CiAKQEAgLTMzOCwyNyAmIzQzOzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZQogfQogCiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LAotCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCi0JCQkgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKQomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtJmd0O3ByaXY7Ci0Jc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKJiM0MzsJc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7Ci0JaW50IGksIGVycjsKJiM0MzsJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1sxXTsKJiM0MzsJc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTsKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxOwomIzQzOwlpbnQgZXJyID0gMDsKIAomIzQzOwliYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKIAlpZiAoIWUpCiAJCXJldHVybiAwOwogCiAJbmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sCi0JCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksIHNlcSk7CiYjNDM7CWZvciAoOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LAomIzQzOwkJCQkJIFJFQURfT05DRShuYXRfb3BzW2ldKSwKJiM0MzsJCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksCiYjNDM7CQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJfQotCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWVycikgewomIzQzOwkJaSA9IDA7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMV0gPSBpOwomIzQzOwomIzQzOwlpZiAoY2ItJmd0O2FyZ3NbMl0gJmFtcDsmYW1wOyBiYXNlX3NlcSAhPSBjYi0mZ3Q7YXJnc1syXSkgewomIzQzOwkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQllcnIgPSAtRUlOVFI7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMl0gPSBiYXNlX3NlcTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCkBAIC0zNzMsMzUgJiM0MzszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCiAJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1swXTsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY2ItJmd0O3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpOwogCiAJZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtJmd0O2hvb2ssIG5ldCwgY3R4LSZndDtkZXZuYW1lKTsKLQlpZiAoIWUpCiYjNDM7CWlmICghZSB8fCBJU19FUlIoZSkpCiAJCWdvdG8gZG9uZTsKIAotCWlmIChJU19FUlIoZSkpIHsKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtJmd0O2hlYWR2IHx8IGkgJmd0Oz0gZS0mZ3Q7bnVtX2hvb2tfZW50cmllcykKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0KIAlvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpOwogCiAJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQlpZiAob3BzW2ldLSZndDtob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKQotCQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LAotCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7Ci0JCWVsc2UKLQkJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sCi0JCQkJCQkgb3BzW2ldLSZndDtwcmlvcml0eSwgZmFtaWx5LAomIzQzOwkJY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTsKJiM0MzsKJiM0MzsJCWlmIChjdXItJmd0O2hvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpCiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1ciwKJiM0MzsJCQkJCQkgY3VyLSZndDtwcmlvcml0eSwgZmFtaWx5LAogCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7CiYjNDM7CQl9CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKJiM0MzsJaWYgKG5sc2tiLSZndDtsZW4gJmd0OyAwKQomIzQzOwkJbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CiAJcmV0dXJuIG5sc2tiLSZndDtsZW47CkBAIC00NDIsMTAgJiM0Mzs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdHJzY3B5KGN0eC0mZ3Q7ZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC0mZ3Q7ZGV2bmFtZSkpOwotCWN0eC0mZ3Q7aGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkOwogCWN0eC0mZ3Q7aG9vayA9IGhvb2tudW07Ci0KLQljYi0mZ3Q7c2VxID0gMTsKIAljYi0mZ3Q7ZGF0YSA9IGN0eDsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgS01TQU4uIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyB0aGlzIGlzIGFib3V0IHNlcXVlbmNlIG51bWJlciBtYW5hZ2VtZW50LCB3aGljaCAqY291bGQqIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZS4KCkZpcnN0LCBJIHNlZSBhZGRpdGlvbnMgdG8gYG5ldG5zX25mYCBpbiBgbmV0ZmlsdGVyLmhgOiBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAuIFRoZXNlIGxvb2sgbGlrZSBzZXF1ZW5jZSBjb3VudGVycywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJhY2VzIGFuZCB1bmluaXRpYWxpemVkIHZhbHVlcy4gV2UgbmVlZCB0byBmb2xsb3cgd2hlcmUgdGhleSBhcmUgaW5pdGlhbGl6ZWQsIHJlYWQsIGFuZCB3cml0dGVuLgoKYGNvcmUuY2AgaGFzIGBidW1wX2hvb2tfYmFzZV9zZXFgLCBhIGZ1bmN0aW9uIHRvIGluY3JlbWVudCB0aGUgaG9vayBzZXF1ZW5jZS4gSSBzZWUgaXQgdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHNtcF9zdG9yZV9yZWxlYXNlYCwgd2hpY2ggaXMgZ29vZCDigJMgaGludGluZyBhdCBjb25jdXJyZW50IGFjY2Vzcy4gVGhlIGluaXRpYWxpemF0aW9uIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGxvb2tzIHNhZmUsIHNldHRpbmcgYm90aCBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgdG8gMS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIHNob3VsZCBtaXRpZ2F0ZSBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZCByaXNrcy4gVGhlIGNhbGxzIHRvIGBidW1wX2hvb2tfYmFzZV9zZXFgIG9uIGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBtYWtlIHNlbnNlOyBrZWVwIHRob3NlIHZhbHVlcyB1cGRhdGVkLgoKYG5mX25hdF9jb3JlLmNgIGludHJvZHVjZXMgYSBzaW1pbGFyIGBidW1wX25hdF9ob29rX2Jhc2Vfc2VxYCBmb3IgTkFUIGhvb2tzLCB3aXRoIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGFuZCBpbmNyZW1lbnQgcGF0dGVybi4gU3RhbmRhcmQgc3R1ZmYuCgpOb3csIGBuZm5ldGxpbmtfaG9vay5jYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSBjaGFuZ2VzIGluIGBuZm5sX2R1bXBfaG9va19kYXRhYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIFRoZSByZW1vdmFsIG9mIGBoZWFkdmAgaW4gYG5mbmxfZHVtcF9ob29rX2RhdGFgIGlzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS4gVGhlIHVwZGF0ZSB0byB0YWtlIGBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2JgIGluIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGFuZCBpdHMgdXNhZ2Ugb2YgYGNiLSZndDthcmdzYCBmb3IgaXRlcmF0aW5nIHRocm91Z2ggTkFUIGhvb2tzIGFuZCBjaGVja2luZyBjb25zaXN0ZW5jeSAoYGJhc2Vfc2VxICE9IGNiLSZndDthcmdzWzJdYCkgaXMgYSBjcnVjaWFsIGFyZWEuIFdlJiMzOTtyZSBjaGVja2luZyBmb3IgdmVyc2lvbmluZywgd2hpY2ggaXMgYSBnb29kIHNpZ24sIGFuZCBpdCYjMzk7cyBuaWNlIHRoYXQgY29uc2lzdGVuY3kgY2hlY2tzIGFyZSBpbiBwbGFjZS4gVGhlIGZhY3QgdGhhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGxvYWRlZCB3aXRoIGBzbXBfbG9hZF9hY3F1aXJlYCBhbmQgdGhlbiBjaGVja2VkIGZvciBjb25zaXN0ZW5jeSB3aXRoaW4gdGhhdCBzYW1lIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUga2V5LiBJIGFsc28gc2VlIHRoYXQgYG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudGAgaXMgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBpZiBgbmxza2ItJmd0O2xlbiAmZ3Q7IDBgLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgYSBwb3NzaWJsZSBzY2VuYXJpbyB3aGVyZSBhIGNvbnNpc3RlbnQgZHVtcCBvcGVyYXRpb24gY2FuIGJlIHNraXBwZWQuIEl0JiMzOTtzIGltcGVyYXRpdmUgdGhhdCB0aGUgY29kZSBwYXRoIGFuZCBsb2dpYyBmb3IgdGhpcyBiZSBpbnNwZWN0ZWQuCgpJbiBgbmZubF9ob29rX2R1bXBgLCBJIHNlZSBgY2ItJmd0O3NlcWAgaXMgbG9hZGVkIHdpdGggdGhlIGhvb2sgc2VxdWVuY2UuIEl0JiMzOTtzIGEgbmljZSBkZXNpZ24gdGhhdCB2ZXJzaW9uaW5nIGFuZCBjb25zaXN0ZW5jeSBhcmUgaW4gcGxhY2UuIEhvd2V2ZXIsIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGBpZiAobmxza2ItJmd0O2xlbiAmZ3Q7IDApYCBtZXJpdHMgZXh0cmEgYXR0ZW50aW9uOiB3aHkgaXMgdGhlIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgcGVyZm9ybWVkIHdoZW4gdGhlIG5ldGxpbmsgc29ja2V0IGJ1ZmZlciBsZW5ndGggaXMgbm90IHplcm8/CgpUaGUgcmVtb3ZhbCBvZiBgY3R4LSZndDtoZWFkdmAgYW5kIGBjYi0mZ3Q7c2VxID0gMWAgaW4gYG5mbmxfaG9va19kdW1wX3N0YXJ0YCBpcyBzb21ldGhpbmcgdG8gbm90ZS4gSSB3YW50IHRvIGNoZWNrIHRoYXQgYGhlYWR2YCBpc24mIzM5O3QgdXNlZCBlbHNld2hlcmUuCgpJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gTm93IGxldCYjMzk7cyBjYXJlZnVsbHkgcmV2aWV3IGBuZm5sX2hvb2tfZHVtcF9vbmVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIHVzZSBvZiBzZXF1ZW5jZSBudW1iZXJzIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIE5BVC1zcGVjaWZpYyBzZXF1ZW5jZSBudW1iZXJzIHBvaW50IHRvd2FyZCBhIGdvb2QgZWZmb3J0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gR2l2ZW4gdGhlIGluaXRpYWxpemF0aW9uLCBhbmQgY2hlY2tzIGZvciBpbmNvbnNpc3RlbmN5IGFuZCBjb25kaXRpb25hbCBgbmxza2ItJmd0O2xlbmAgY29uc2lzdGVuY3kgY2hlY2tzLCBJIGFtIG5vdCBzZWVpbmcgb2J2aW91cyBpc3N1ZXMuIEJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBjb2RlIHBhdGhzIGFuZCBsb2dpYyB3aXRoIHRoZSBjb25kaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVjayBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9ob29rX2R1bXBfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTE1OD1zdGF0aWMgaW50IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MTkwOnN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xOTEtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9MzM5PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozNjE6XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM2Mi1cdFx0XHRcdFx0IFJFQURfT05DRShuYXRfb3BzW2ldKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy00MDktXHRcdGVsc2Uge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjQxMDpcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MDEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIHRoZSBNYXR0ZXI6IE5GTkVUTElOSyBIb29rIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIGludGVyYWN0cyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGxpbmVzIDE4MCB0byAyNTAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgbWFnaWMgb2YgaG9va2luZyBuZXRmaWx0ZXIgZnVuY3Rpb25zIGludG8gdGhlIG5ldGxpbmsgbWVzc2FnaW5nIHN5c3RlbSBoYXBwZW5zLCBvciBtYXliZSBpdCBkZWFscyB3aXRoIHRoZSByZWdpc3RyYXRpb24gb3IgZGVyZWdpc3RyYXRpb24gb2YgbmV0ZmlsdGVyIGhvb2tzLiBJIHN1c3BlY3QgaXQgaG9sZHMgdGhlIGNvcmUgbG9naWMgZm9yIGVpdGhlciBzZXR0aW5nIHVwIG9yIHRlYXJpbmcgZG93biB0aGUgbmV0bGluayBjb21tdW5pY2F0aW9uIHBhdGhzIGZvciBwYWNrZXQgaW5zcGVjdGlvbiBhbmQgbWFuaXB1bGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYWN0dWFsbHkgcmVjZWl2ZSBhbmQgcHJvY2VzcyB0aGUgZGF0YSBzZW50IHRocm91Z2ggdGhlc2UgaG9va3MuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGZvciBhbnkgcm9idXN0IG5ldGZpbHRlciBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGVuY291bnRlciBzb21lIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJlc3Rpbmcgc3BpbmxvY2sgdXNhZ2UgZm9yIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQuIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCBmYWlsdXJlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdFx0XHQgIGZ0LVx1MDAzZW5hbWUsIGZ0LVx1MDAzZXRhYmxlLVx1MDAzZWZhbWlseSk7XG4gMTgxOlx0XHRpZiAocmV0KSB7XG4gMTgyOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChubHNrYiwgbmVzdCk7XG4gMTgzOlx0XHRcdHJldHVybiByZXQ7XG4gMTg0Olx0XHR9XG4gMTg1Olx0XG4gMTg2Olx0XHRubGFfbmVzdF9lbmQobmxza2IsIG5lc3QpO1xuIDE4NzpcdFx0cmV0dXJuIDA7XG4gMTg4Olx0fVxuIDE4OTpcdFxuIDE5MDpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbiAxOTE6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuIDE5MjpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgcHJpb3JpdHksXG4gMTkzOlx0XHRcdFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcbiAxOTQ6XHR7XG4gMTk1Olx0XHR1MTYgZXZlbnQgPSBuZm5sX21zZ190eXBlKE5GTkxfU1VCU1lTX0hPT0ssIE5GTkxfTVNHX0hPT0tfR0VUKTtcbiAxOTY6XHRcdHVuc2lnbmVkIGludCBwb3J0aWQgPSBORVRMSU5LX0NCKG5sc2tiKS5wb3J0aWQ7XG4gMTk3Olx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbiAxOTg6XHRcdGludCByZXQgPSAtRU1TR1NJWkU7XG4gMTk5Olx0XHR1MzIgaG9va251bTtcbiAyMDA6XHQjaWZkZWYgQ09ORklHX0tBTExTWU1TXG4gMjAxOlx0XHRjaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dO1xuIDIwMjpcdFx0Y2hhciAqbW9kdWxlX25hbWU7XG4gMjAzOlx0I2VuZGlmXG4gMjA0Olx0XHRubGggPSBuZm5sX21zZ19wdXQobmxza2IsIHBvcnRpZCwgc2VxLCBldmVudCxcbiAyMDU6XHRcdFx0XHQgICBOTE1fRl9NVUxUSSwgZmFtaWx5LCBORk5FVExJTktfVjAsIDApO1xuIDIwNjpcdFx0aWYgKCFubGgpXG4gMjA3Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIwODpcdFxuIDIwOTpcdCNpZmRlZiBDT05GSUdfS0FMTFNZTVNcbiAyMTA6XHRcdHJldCA9IHNucHJpbnRmKHN5bSwgc2l6ZW9mKHN5bSksIFwmIzM0OyVwc1wmIzM0Oywgb3BzLVx1MDAzZWhvb2spO1xuIDIxMTpcdFx0aWYgKHJldCBcdTAwM2U9IHNpemVvZihzeW0pKSB7XG4gMjEyOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4gMjEzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIxNDpcdFx0fVxuIDIxNTpcdFxuIDIxNjpcdFx0bW9kdWxlX25hbWUgPSBzdHJzdHIoc3ltLCBcJiMzNDsgW1wmIzM0Oyk7XG4gMjE3Olx0XHRpZiAobW9kdWxlX25hbWUpIHtcbiAyMTg6XHRcdFx0Y2hhciAqZW5kO1xuIDIxOTpcdFxuIDIyMDpcdFx0XHQqbW9kdWxlX25hbWUgPSAmIzM5O1xcMCYjMzk7O1xuIDIyMTpcdFx0XHRtb2R1bGVfbmFtZSAmIzQzOz0gMjtcbiAyMjI6XHRcdFx0ZW5kID0gc3RyY2hyKG1vZHVsZV9uYW1lLCAmIzM5O10mIzM5Oyk7XG4gMjIzOlx0XHRcdGlmIChlbmQpIHtcbiAyMjQ6XHRcdFx0XHQqZW5kID0gMDtcbiAyMjU6XHRcbiAyMjY6XHRcdFx0XHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19NT0RVTEVfTkFNRSwgbW9kdWxlX25hbWUpO1xuIDIyNzpcdFx0XHRcdGlmIChyZXQpXG4gMjI4Olx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyMjk6XHRcdFx0fVxuIDIzMDpcdFx0fVxuIDIzMTpcdFxuIDIzMjpcdFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobmxza2IsIE5GTkxBX0hPT0tfRlVOQ1RJT05fTkFNRSwgc3ltKTtcbiAyMzM6XHRcdGlmIChyZXQpXG4gMjM0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIzNTpcdCNlbmRpZlxuIDIzNjpcdFxuIDIzNzpcdFx0aWYgKG9wcy1cdTAwM2VwZiA9PSBORlBST1RPX0lORVQgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2Vob29rbnVtID09IE5GX0lORVRfSU5HUkVTUylcbiAyMzg6XHRcdFx0aG9va251bSA9IE5GX05FVERFVl9JTkdSRVNTO1xuIDIzOTpcdFx0ZWxzZVxuIDI0MDpcdFx0XHRob29rbnVtID0gb3BzLVx1MDAzZWhvb2tudW07XG4gMjQxOlx0XG4gMjQyOlx0XHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfSE9PS05VTSwgaHRvbmwoaG9va251bSkpO1xuIDI0MzpcdFx0aWYgKHJldClcbiAyNDQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjQ1Olx0XG4gMjQ2Olx0XHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfUFJJT1JJVFksIGh0b25sKHByaW9yaXR5KSk7XG4gMjQ3Olx0XHRpZiAocmV0KVxuIDI0ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyNDk6XHRcbiAyNTA6XHRcdHN3aXRjaCAob3BzLVx1MDAzZWhvb2tfb3BzX3R5cGUpIHtcbiAyNTE6XHRcdGNhc2UgTkZfSE9PS19PUF9ORl9UQUJMRVM6XG4gMjUyOlx0XHRcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2NoYWluX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXHUwMDNlcHJpdik7XG4gMjUzOlx0XHRcdGJyZWFrO1xuIDI1NDpcdFx0Y2FzZSBORl9IT09LX09QX0JQRjpcbiAyNTU6XHRcdFx0cmV0ID0gbmZubF9ob29rX3B1dF9icGZfcHJvZ19pbmZvKG5sc2tiLCBjdHgsIHNlcSwgb3BzLVx1MDAzZXByaXYpO1xuIDI1NjpcdFx0XHRicmVhaztcbiAyNTc6XHRcdGNhc2UgTkZfSE9PS19PUF9ORlRfRlQ6XG4gMjU4Olx0XHRcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXHUwMDNlcHJpdik7XG4gMjU5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTkxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBuZm5ldGxpbmtfaG9vay5jKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgYG5mbmxfaG9va19kdW1wYCwgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZSBzdGFydCBhbmQgZG9uZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGVzZSBuZXRsaW5rIGhvb2tzLiBVbmRlcnN0YW5kaW5nIGhvdyBkdW1waW5nIGlzIGluaXRpYXRlZCwgaG93IGRhdGEgaXMgYXNzZW1ibGVkIGFuZCBzZW50LCBhbmQgaG93IHRoZSBwcm9jZXNzIGlzIGZpbmFsaXplZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgYW50aWNpcGF0ZSBwb3RlbnRpYWwgbnVhbmNlcyBpbiByZXNvdXJjZSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHN5bmNocm9uaXphdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiB3aXRoaW4gdGhlc2UgY3J1Y2lhbCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGUgaG9vayBmcmFtZXdvcmsgdHJ1bHkgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODA6XHRcbiAzODE6XHRcdHJldHVybiBlcnI7XG4gMzgyOlx0fVxuIDM4MzpcdFxuIDM4NDpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIDM4NTpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDM4NjpcdHtcbiAzODc6XHRcdHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCk7XG4gMzg4Olx0XHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXHUwMDNlZGF0YTtcbiAzODk6XHRcdGludCBlcnIsIGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiAzOTA6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVx1MDAzZXNrKTtcbiAzOTE6XHRcdHN0cnVjdCBuZl9ob29rX29wcyAqIGNvbnN0ICpvcHM7XG4gMzkyOlx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuIDM5MzpcdFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIDM5NDpcdFxuIDM5NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM5NjpcdFx0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gMzk3Olx0XG4gMzk4Olx0XHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbiAzOTk6XHRcdGlmICghZSB8fCBJU19FUlIoZSkpXG4gNDAwOlx0XHRcdGdvdG8gZG9uZTtcbiA0MDE6XHRcbiA0MDI6XHRcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gNDAzOlx0XG4gNDA0Olx0XHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDQwNTpcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xuIDQwNjpcdFxuIDQwNzpcdFx0XHRpZiAoY3VyLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4gNDA4Olx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xuIDQwOTpcdFx0XHRlbHNlIHtcbiA0MTA6XHRcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxuIDQxMTpcdFx0XHRcdFx0XHRcdCBjdXItXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiA0MTI6XHRcdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4gNDEzOlx0XHRcdH1cbiA0MTQ6XHRcdFx0aWYgKGVycilcbiA0MTU6XHRcdFx0XHRicmVhaztcbiA0MTY6XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRkb25lOlxuIDQxOTpcdFx0aWYgKG5sc2tiLVx1MDAzZWxlbiBcdTAwM2UgMClcbiA0MjA6XHRcdFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcbiA0MjE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDQyMjpcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4gNDIzOlx0XHRyZXR1cm4gbmxza2ItXHUwMDNlbGVuO1xuIDQyNDpcdH1cbiA0MjU6XHRcbiA0MjY6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiA0Mjc6XHR7XG4gNDI4Olx0XHRjb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDQyOTpcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpubGEgPSBjYi1cdTAwM2VkYXRhO1xuIDQzMDpcdFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IE5VTEw7XG4gNDMxOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjYi1cdTAwM2Vza2ItXHUwMDNlc2spO1xuIDQzMjpcdFx0dTggZmFtaWx5ID0gbmZtc2ctXHUwMDNlbmZnZW5fZmFtaWx5O1xuIDQzMzpcdFx0Y2hhciBuYW1lW0lGTkFNU0laXSA9IFwmIzM0O1wmIzM0OztcbiA0MzQ6XHRcdGNvbnN0IHZvaWQgKmhlYWQ7XG4gNDM1Olx0XHR1MzIgaG9va251bTtcbiA0MzY6XHRcbiA0Mzc6XHRcdGhvb2tudW0gPSBudG9obChubGFfZ2V0X2JlMzIobmxhW05GTkxBX0hPT0tfSE9PS05VTV0pKTtcbiA0Mzg6XHRcdGlmIChob29rbnVtIFx1MDAzZSAyNTUpXG4gNDM5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0MDpcdFxuIDQ0MTpcdFx0aWYgKGZhbWlseSA9PSBORlBST1RPX05FVERFVikge1xuIDQ0MjpcdFx0XHRpZiAoIW5sYVtORk5MQV9IT09LX0RFVl0pXG4gNDQzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ0Olx0XG4gNDQ1Olx0XHRcdG5sYV9zdHJzY3B5KG5hbWUsIG5sYVtORk5MQV9IT09LX0RFVl0sIHNpemVvZihuYW1lKSk7XG4gNDQ2Olx0XHR9XG4gNDQ3Olx0XG4gNDQ4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNDQ5Olx0XHQvKiBOb3QgZGVyZWZlcmVuY2VkOyBmb3IgY29uc2lzdGVuY3kgY2hlY2sgb25seSAqL1xuIDQ1MDpcdFx0aGVhZCA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBob29rbnVtLCBuZXQsIG5hbWUpO1xuIDQ1MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNDUyOlx0XG4gNDUzOlx0XHRpZiAoaGVhZCBcdTAwMjZcdTAwMjYgSVNfRVJSKGhlYWQpKVxuIDQ1NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihoZWFkKTtcbiA0NTU6XHRcbiA0NTY6XHRcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIDQ1NzpcdFx0aWYgKCFjdHgpXG4gNDU4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQ1OTpcdFxuIDQ2MDpcdFx0c3Ryc2NweShjdHgtXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cdTAwM2VkZXZuYW1lKSk7XG4gNDYxOlx0XHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4gNDYyOlx0XHRjYi1cdTAwM2VkYXRhID0gY3R4O1xuIDQ2MzpcdFxuIDQ2NDpcdFx0cmV0dXJuIDA7XG4gNDY1Olx0fVxuIDQ2NjpcdFxuIDQ2NzpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RvcChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDY4Olx0e1xuIDQ2OTpcdFx0a2ZyZWUoY2ItXHUwMDNlZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjgKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogMTIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBcHBsaWNhYmlsaXR5IEFzc2Vzc21lbnQgZm9yIE5ldGZpbHRlciBIb29rIER1bXAgQ29uc2lzdGVuY3kgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIGFkZHJlc3NlcyBhIGNvbnNpc3RlbmN5IGlzc3VlIGluIG5ldGZpbHRlciBob29rIGR1bXBpbmcgd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYCwgaXNuJiMzOTt0IGEgY2FuZGlkYXRlIGZvciBLTVNBTi4gVGhlIGNvcmUgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIHRyeWluZyB0byBzb2x2ZSBpcyB0aGF0IHRoZSBleGlzdGluZyBtZXRob2Qgb2YgZGV0ZWN0aW5nIGNoYW5nZXMgaW4gdGhlIGhvb2sgdGFibGUgcmVsaWVkIG9uIGNoZWNraW5nIGBlICE9IGN0eC0mZ3Q7aGVhZHZgLiBUaGlzIHdhcyBmbGF3ZWQgYmVjYXVzZSByZWFsbG9jYXRpb25zLCBtb2RpZmljYXRpb25zLCBvciBjaGFuZ2VzIHRvIE5BVCBob29rIGVudHJpZXMgd2VyZW4mIzM5O3QgYWx3YXlzIGRldGVjdGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbnQgbmV0bGluayBkdW1wcy4KClRoZSBmaXggaW50cm9kdWNlcyBzZXF1ZW5jZSBudW1iZXJzLCBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAsIHdpdGhpbiB0aGUgYG5ldG5zX25mYCBzdHJ1Y3R1cmUuIFdoZW4gaG9va3MgYXJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkLCB0aGVzZSBzZXF1ZW5jZSBudW1iZXJzIGFyZSBpbmNyZW1lbnRlZCB1c2luZyBgYnVtcF9ob29rX2Jhc2Vfc2VxYCBhbmQgYGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXFgLiBEdXJpbmcgbmV0bGluayBkdW1wcyAoYG5mbmxfaG9va19kdW1wYCBhbmQgYG5mbmxfaG9va19kdW1wX25hdGApLCB0aGVzZSBzZXF1ZW5jZSBudW1iZXJzIGFyZSBzdG9yZWQgYW5kIGNoZWNrZWQgdXNpbmcgYGNiLSZndDtzZXFgIGFuZCBgY2ItJmd0O2FyZ3NbMl1gLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBMZXQmIzM5O3Mgc2VlLgoKKiAgICoqU3RydWN0dXJlIEluaXRpYWxpemF0aW9uICZhbXA7IFVzZXItU3BhY2UgRXhwb3N1cmU6KiogRmlyc3QsIGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZCwgb3Igd2hlcmUgc3RydWN0dXJlIHBhZGRpbmcgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkPyBOby4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyBidWlsdCBhcmUgdW5jaGFuZ2VkLCBhbmQgdGhlIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGBjdHhgLCBgbmV0bnNfbmZgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKHVzaW5nIGBremFsbG9jYCBvciBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCkuIGBuZXRuc19uZmAgaXMgcGFydCBvZiBgc3RydWN0IG5ldGAsIHdoaWNoIGlzIHplcm9lZCBvbiBhbGxvY2F0aW9uLCBhbmQgYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKKiAgICoqQ29uZGl0aW9uYWwgTG9naWMgJmFtcDsgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4gSSYjMzk7bSBzZWVpbmcgYWxsIHZhcmlhYmxlcywgbGlrZSBgYmFzZV9zZXFgLCBgaWAsIGBlcnJgLCBhbmQgYGN1cmAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGNiLSZndDthcmdzYCBhcnJheSBpcyB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgY29yZSB3aGVuIHRoZSBjYWxsYmFjayBpcyBzdGFydGVkLCBhbmQgdGhlbiB0aGUgcmVsZXZhbnQgZmllbGRzIGFyZSBhc3NpZ25lZCB2YWx1ZXMuCgoqICAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBEb2VzIHRoaXMgcGF0Y2ggYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBOby4gQWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgc2VlbSB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHkuCgoqICAgKipCb3VuZHMgQ2hlY2tzICZhbXA7IE1lbW9yeSBBY2Nlc3M6KiogRmluYWxseSwgZG9lcyB0aGUgcGF0Y2ggYWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBObywgYmFzZWQgb24gd2hhdCBJIHNlZS4KCkFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBpbmNsdWRpbmcgZXhhbWluaW5nIHRoZSB2YXJpYWJsZXMgaW4gYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYCwgYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBTcGVjaWZpY2FsbHksIHRoZSBzZXF1ZW5jZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgdG8gYDFgIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgLCBhbmQgdGhlIHN0YWNrIHZhcmlhYmxlcyBpbiB0aGUgZHVtcCBmdW5jdGlvbnMgYXJlIGFsbCBpbml0aWFsaXplZCBiZWZvcmUgdGhlaXIgdXNlLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSB0eXBlcyBvZiBidWdzIHRoYXQgKmNvdWxkKiBiZSBwcmVzZW50IGFyZSBwcmltYXJpbHkgY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zIChLQ1NBTi9MT0NLREVQL2NvZGUgcmV2aWV3KSwgbG9naWMgZXJyb3JzIGluIHRoZSBuZXRsaW5rIGR1bXAgcmVzdGFydC9wYWdpbmF0aW9uIHByb2Nlc3MgKGZ1bmN0aW9uYWwgdGVzdGluZyksIG9yIHBvdGVudGlhbCBwb2ludGVyIGRlcmVmZXJlbmNpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVuZGVyIFJDVSAoS0FTQU4pLiBCdXQgbm9uZSBvZiB0aGVzZSByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCBiZSBkZXRlY3RhYmxlICpvbmx5KiBieSBLTVNBTi4KClRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBwcmltYXJpbHkgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCBzZXF1ZW5jZSBjb3VudGVycyBmb3IgbmV0ZmlsdGVyIGhvb2sgbmV0bGluayBkdW1wcy4gQWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHNlcXVlbmNlIGNvdW50ZXJzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHJlbWFpbmluZyBjb25jZXJucyBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQL2Z1bmN0aW9uYWwgdGVzdGluZyByYXRoZXIgdGhhbiBLTVNBTi4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBuZXRsaW5rIGR1bXBpbmcgb2YgbmV0ZmlsdGVyIGhvb2tzIGJ5IHJlcGxhY2luZyBwb2ludGVyLWJhc2VkIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIHNlcXVlbmNlIGNvdW50ZXJzIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYHN0cnVjdCBuZXRuc19uZmApLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSBBbGwgYWRkZWQgZmllbGRzIGFuZCBsb2NhbCB2YXJpYWJsZXMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgYGJhc2Vfc2VxYCwgYGVycmAsIGBpYCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGBuZXRmaWx0ZXJfbmV0X2luaXRgIHNldHMgYmFzZSBzZXF1ZW5jZXMgdG8gMSwgYW5kIGR1bXAgY2FsbGJhY2tzIHByb3Blcmx5IGluaXRpYWxpemUgc3RhY2sgdmFyaWFibGVzIGFuZCBuZXRsaW5rIGNhbGxiYWNrIGFyZ3MpLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggUkNVIGRlcmVmZXJlbmNpbmcgb3IgaG9vayBpdGVyYXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9ucyBhcmUgbGlmZXRpbWUvY29uY3VycmVuY3kgaXNzdWVzIGFkZHJlc3NlZCBieSBLQVNBTi9MT0NLREVQLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBuZXRsaW5rIGR1bXBpbmcgb2YgbmV0ZmlsdGVyIGhvb2tzIGJ5IHJlcGxhY2luZyBwb2ludGVyLWJhc2VkIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIHNlcXVlbmNlIGNvdW50ZXJzIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYHN0cnVjdCBuZXRuc19uZmApLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSBBbGwgYWRkZWQgZmllbGRzIGFuZCBsb2NhbCB2YXJpYWJsZXMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgYGJhc2Vfc2VxYCwgYGVycmAsIGBpYCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGBuZXRmaWx0ZXJfbmV0X2luaXRgIHNldHMgYmFzZSBzZXF1ZW5jZXMgdG8gMSwgYW5kIGR1bXAgY2FsbGJhY2tzIHByb3Blcmx5IGluaXRpYWxpemUgc3RhY2sgdmFyaWFibGVzIGFuZCBuZXRsaW5rIGNhbGxiYWNrIGFyZ3MpLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggUkNVIGRlcmVmZXJlbmNpbmcgb3IgaG9vayBpdGVyYXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9ucyBhcmUgbGlmZXRpbWUvY29uY3VycmVuY3kgaXNzdWVzIGFkZHJlc3NlZCBieSBLQVNBTi9MT0NLREVQLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTozNzo0MS42NjQyMTg2MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA3MzM2ODc5MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mbmxfaG9va19kdW1wXCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9uYXRcIixcbiAgICBcIm5mbmxfaG9va19nZXRcIixcbiAgICBcIm5mX25hdF9yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfbmF0X3VucmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX3JlZ2lzdGVyX25ldF9ob29rXCIsXG4gICAgXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjM3OjQxLjY2NDIyNDYyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1Mjk2MzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6Mzc6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxcbmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxcbkBAIC0zMyw1ICszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9ERUZSQUdfSVBWNilcXG4gXFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xcbiAjZW5kaWZcXG4rXFx0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XFxuK1xcdHVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTtcXG4gfTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcXG5pbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcXG5AQCAtMzg2LDYgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcXG4rXFxuK1xcdHdoaWxlICgrK2Jhc2Vfc2VxID09IDApXFxuK1xcdFxcdDtcXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNm5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXFxuIHtcXG5AQCAtNDI4LDYgKzQzNyw3IEBAIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4gXFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcXG4gXFxuIFxcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcXG4rXFx0XFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcdFxcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XFxuIFxcdH1cXG5AQCAtNTA2LDYgKzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4gXFx0XFx0XFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcXG4gI2VuZGlmXFxuIFxcdFxcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xcbitcXHRcXHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXFxcIiwgcGYsIHJlZy1cXHUwMDNlaG9va251bSk7XFxuIFxcdH1cXG5AQCAtNzg0LDYgKzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiAjZW5kaWZcXG4rXFx0bmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcXG4rXFx0bmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG5pbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbkBAIC0xMTYwLDYgKzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbitzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XFxuK1xcbitcXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxcbitcXHRcXHQ7XFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuZXQtXFx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0ge1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcIm5hdC1mb2xsb3ctbWFzdGVyXFxcIixcXG4gXFx0LmV4cGVjdGZuXFx0PSBuZl9uYXRfZm9sbG93X21hc3RlcixcXG5AQCAtMTI0NSw4ICsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFxcdTAwMjZwcml2LVxcdTAwM2VlbnRyaWVzLCBvcHMpO1xcbi1cXHRpZiAocmV0ID09IDApXFxuK1xcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcdFxcdG5hdF9wcm90b19uZXQtXFx1MDAzZXVzZXJzKys7XFxuK1xcdH1cXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTI4NCw2ICsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XFxuIFxcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFxcdTAwMjZwcml2LVxcdTAwM2VlbnRyaWVzLCBvcHMpO1xcbitcXHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcbiBcXHRpZiAobmF0X3Byb3RvX25ldC1cXHUwMDNldXNlcnMgPT0gMCkge1xcbiBcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbmluZGV4IDk1MDA1ZTlhNjA2NjguLjMxMDEzYzMyMTA5OTYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXFxuQEAgLTU0LDcgKzU0LDYgQEAgc3RhdGljIGludCBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEge1xcbiBcXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xcbi1cXHR1bnNpZ25lZCBsb25nIGhlYWR2O1xcbiBcXHR1OCBob29rO1xcbiB9O1xcbiBcXG5AQCAtMzM4LDI3ICszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGVcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxcbi1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXFx1MDAzZXByaXY7XFxuLVxcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cXHUwMDNlZW50cmllcyk7XFxuK1xcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcXG4tXFx0aW50IGksIGVycjtcXG4rXFx0dW5zaWduZWQgaW50IGkgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4rXFx0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4rXFx0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuK1xcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XFxuK1xcbitcXHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXFx1MDAzZWVudHJpZXMpO1xcbiBcXHRpZiAoIWUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0bmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxcbi1cXHRcXHRcXHRcXHRcXHQgb3BzLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LCBzZXEpO1xcbitcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0IFJFQURfT05DRShuYXRfb3BzW2ldKSxcXG4rXFx0XFx0XFx0XFx0XFx0IG9wcy1cXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcXG4rXFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdGkgPSAwO1xcbitcXHR9XFxuK1xcdGNiLVxcdTAwM2VhcmdzWzFdID0gaTtcXG4rXFxuK1xcdGlmIChjYi1cXHUwMDNlYXJnc1syXSBcXHUwMDI2XFx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cXHUwMDNlYXJnc1syXSkge1xcbitcXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuK1xcdFxcdGVyciA9IC1FSU5UUjtcXG4rXFx0fVxcbitcXHRjYi1cXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRjYi1cXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcXG4gXFxuIFxcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVxcdTAwM2Vob29rLCBuZXQsIGN0eC1cXHUwMDNlZGV2bmFtZSk7XFxuLVxcdGlmICghZSlcXG4rXFx0aWYgKCFlIHx8IElTX0VSUihlKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXG4tXFx0aWYgKElTX0VSUihlKSkge1xcbi1cXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuLVxcdFxcdGdvdG8gZG9uZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LVxcdTAwM2VoZWFkdiB8fCBpIFxcdTAwM2U9IGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXMpXFxuLVxcdFxcdGNiLVxcdTAwM2VzZXErKztcXG4tXFxuIFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIFxcbiBcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbi1cXHRcXHRpZiAob3BzW2ldLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbi1cXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBvcHNbaV0tXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuK1xcbitcXHRcXHRpZiAoY3VyLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuK1xcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG4tXFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcXG4rXFx0aWYgKG5sc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbiBcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRzdHJzY3B5KGN0eC1cXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cXHUwMDNlZGV2bmFtZSkpO1xcbi1cXHRjdHgtXFx1MDAzZWhlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDtcXG4gXFx0Y3R4LVxcdTAwM2Vob29rID0gaG9va251bTtcXG4tXFxuLVxcdGNiLVxcdTAwM2VzZXEgPSAxO1xcbiBcXHRjYi1cXHUwMDNlZGF0YSA9IGN0eDtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTozNzo0My4yMTgzMDgwMTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNzg1NTg2NTE3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9ob29rX2R1bXBcIixcbiAgICBcIm5mbmxfaG9va19kdW1wX25hdFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIG51bWJlciB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBjb25zaXN0ZW5jeSBkdXJpbmcgbmV0bGluayBkdW1wcyBvZiBuZXRmaWx0ZXIgYmFzZSBob29rcyBhbmQgTkFUIGhvb2tzIHZpYSBuZm5ldGxpbmtfaG9vay4gSXQgYWx0ZXJzIGxvY2tsZXNzIGl0ZXJhdGlvbiwgcGFnaW5hdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nIGFjcm9zcyBkdW1wIGNhbGxiYWNrcywgd2hpY2ggaXMgdXNlci1yZWFjaGFibGUgdmlhIG5mbmV0bGluayBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDkzMTczOWRmOWVjNjE4M2RhMDZmYmE5NzgyYTI1NDJiYzQ5MzI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6Mzc6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5pbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG5AQCAtMzMsNSArMzMsNyBAQCBzdHJ1Y3QgbmV0bnNfbmYge1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9ERUZSQUdfSVBWNilcbiBcdHVuc2lnbmVkIGludCBkZWZyYWdfaXB2Nl91c2VycztcbiAjZW5kaWZcbitcdHVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxO1xuK1x0dW5zaWduZWQgaW50IG5hdF9ob29rX2Jhc2Vfc2VxO1xuIH07XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuQEAgLTM4Niw2ICszODYsMTUgQEAgc3RhdGljIHZvaWQgbmZfc3RhdGljX2tleV9kZWMoY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIGludCBwZilcbiAjZW5kaWZcbiB9XG4gXG4rc3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuK1xuK1x0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcbitcdFx0O1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcbit9XG4rXG4gc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcbiB7XG5AQCAtNDI4LDYgKzQzNyw3IEBAIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdG5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7XG4gXG4gXHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XG4rXHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xuIFx0fVxuQEAgLTUwNiw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcbiAjZW5kaWZcbiBcdFx0bmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7XG4rXHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0V0FSTl9PTkNFKDEsIFwiaG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZFwiLCBwZiwgcmVnLVx1MDAzZWhvb2tudW0pO1xuIFx0fVxuQEAgLTc4NCw2ICs3OTUsOCBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmV0ZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gI2VuZGlmXG4rXHRuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSA9IDE7XG4rXHRuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTE2MCw2ICsxMTYwLDE1IEBAIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIH1cbiAjZW5kaWZcbiBcbitzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXEgPSBSRUFEX09OQ0UobmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxKTtcbitcbitcdHdoaWxlICgrK2Jhc2Vfc2VxID09IDApXG4rXHRcdDtcbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCJuYXQtZm9sbG93LW1hc3RlclwiLFxuIFx0LmV4cGVjdGZuXHQ9IG5mX25hdF9mb2xsb3dfbWFzdGVyLFxuQEAgLTEyNDUsOCArMTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0fVxuIFxuIFx0cmV0ID0gbmZfaG9va19lbnRyaWVzX2luc2VydF9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuLVx0aWYgKHJldCA9PSAwKVxuK1x0aWYgKHJldCA9PSAwKSB7XG4rXHRcdGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdFx0bmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycysrO1xuK1x0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTEyODQsNiArMTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0cHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjtcbiBcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbitcdGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcbiBcdGlmIChuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzID09IDApIHtcbiBcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuaW5kZXggOTUwMDVlOWE2MDY2OC4uMzEwMTNjMzIxMDk5NiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5AQCAtNTQsNyArNTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEge1xuIFx0Y2hhciBkZXZuYW1lW0lGTkFNU0laXTtcbi1cdHVuc2lnbmVkIGxvbmcgaGVhZHY7XG4gXHR1OCBob29rO1xuIH07XG4gXG5AQCAtMzM4LDI3ICszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGVcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4tXHRcdFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpXG4ge1xuIFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVx1MDAzZXByaXY7XG4tXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4rXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7XG4tXHRpbnQgaSwgZXJyO1xuK1x0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzFdO1xuK1x0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcTtcbitcdGludCBlcnIgPSAwO1xuIFxuK1x0YmFzZV9zZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4rXG4rXHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4gXHRpZiAoIWUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xuLVx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSxcbi1cdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LCBzZXEpO1xuK1x0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4rXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxuK1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuK1x0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4rXHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuK1xuIFx0fVxuLVx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWVycikge1xuK1x0XHRpID0gMDtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMV0gPSBpO1xuK1xuK1x0aWYgKGNiLVx1MDAzZWFyZ3NbMl0gXHUwMDI2XHUwMDI2IGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl0pIHtcbitcdFx0Y2ItXHUwMDNlc2VxKys7XG4rXHRcdGVyciA9IC1FSU5UUjtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gXG4gXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbi1cdGlmICghZSlcbitcdGlmICghZSB8fCBJU19FUlIoZSkpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdGlmIChJU19FUlIoZSkpIHtcbi1cdFx0Y2ItXHUwMDNlc2VxKys7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbi1cbi1cdGlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC1cdTAwM2VoZWFkdiB8fCBpIFx1MDAzZT0gZS1cdTAwM2VudW1faG9va19lbnRyaWVzKVxuLVx0XHRjYi1cdTAwM2VzZXErKztcbi1cbiBcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4gXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbi1cdFx0aWYgKG9wc1tpXS1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY3R4LCBvcHNbaV0sIGZhbWlseSxcbi1cdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgb3BzW2ldLFxuLVx0XHRcdFx0XHRcdCBvcHNbaV0tXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbitcbitcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuK1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbitcdFx0ZWxzZSB7XG4rXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbitcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuK1x0XHR9XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gZG9uZTpcbi1cdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4rXHRpZiAobmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwKVxuK1x0XHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gaTtcbiBcdHJldHVybiBubHNrYi1cdTAwM2VsZW47XG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdHJzY3B5KGN0eC1cdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVx1MDAzZWRldm5hbWUpKTtcbi1cdGN0eC1cdTAwM2VoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7XG4gXHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4tXG4tXHRjYi1cdTAwM2VzZXEgPSAxO1xuIFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6Mzc6NDMuMjE4MzA5Nzc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY2MDQzMTgxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIE15IGluaXRpYWwgc3RlcCBpcyBhbHdheXMgdG8gbG9vayBhdCB0aGUgdG91Y2hlZCBmaWxlcy4gQWxyaWdodCwgc28gd2UncmUgc2VlaW5nOiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLCBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCB3aGF0J3MgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9pbmcqPyBBaCwgaXQgYXBwZWFycyB0byBiZSB0cmFja2luZyBzZXF1ZW5jZSBudW1iZXJzLCBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAsIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcy4gSW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaW4gYG5mbmV0bGlua19ob29rLmNgLCBgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCBhcmUgdXNpbmcgYGNiLVx1MDAzZXNlcWAgYW5kIGBiYXNlX3NlcWAgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2hlbiBkdW1waW5nIG5ldGZpbHRlciBob29rcyBvdmVyIG5ldGxpbmsuIFBsdXMsIGl0IHNlZW1zIHRvIGJlIGZpeGluZyBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGl0ZXJhdGluZyBhbmQgcmVzdW1pbmcgYWNyb3NzIG5ldGxpbmsgZHVtcHMgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCByYWNlcywgd2hpY2ggSSd2ZSBzZWVuIGJlIGEgZ29vZCBzcG90IGZvciBmdXp6aW5nLlxuXG5NeSBuZXh0IG1vdmUgaXMgYWx3YXlzIHRvIGV4YW1pbmUgdGhlIGNvZGUgYW5kIGBLY29uZmlnYCBvcHRpb25zIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHN1YnN5c3RlbSBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBjb250ZXh0IGFuZCBlbnRyeSBwb2ludHMgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjM4OjM5LjgyMjYzMTk4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2NjM1MDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9ORVRMSU5LX0hPT0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6Mzg6NDEuMjc5Mjc1MTE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzOTYxNTM0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjpcblxuKipGaW5kaW5nIHRoZSBTb3VyY2Ugb2YgdGhlIEhvb2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYG5mbmV0bGlua19ob29rLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBuYXZpZ2F0ZSB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGZvciBhbnl0aGluZyBuZXR3b3JrIGZpbHRlcmluZyByZWxhdGVkLiBCdXQgSSdtIG5vdCBnb2luZyB0byBqdXN0IHN0YXJ0IHBva2luZyBhcm91bmQuIEknbSBnb2luZyB0byBmaW5kIGl0IHN5c3RlbWF0aWNhbGx5LlxuXG5XaGVyZSB3b3VsZCBJIG5vcm1hbGx5IGxvb2s/IE1ha2VmaWxlISBZZWFoLCB0aGF0J3MgaXQuIFRoYXQgaXMgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgb3RoZXIgb2JqZWN0cyBhcmUgZGVmaW5lZC5cbkl0J3MgbGlrZWx5IGxpc3RlZCBpbiBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIEhvcGVmdWxseSwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdXNpb24sIGJ1dCBldmVuIGlmIGl0J3MgcmVmZXJlbmNlZCB0aHJvdWdoIHNvbWUgaW5kaXJlY3QgZGVwZW5kZW5jeSwgdGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgYnVpbGQgcHJvY2Vzcy4gQWxyaWdodCwgbGV0J3MgZ2V0IHRvIGl0LiBUaW1lIHRvIGdyZXAgdGhyb3VnaCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTozOTowMS42NzU0MzA3MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxODc2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19PU0YpICs9IG5mbmV0bGlua19vc2Yub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICs9IG5mbmV0bGlua19ob29rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTMyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTIwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjIxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMjItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9NTExPU1PRFVMRV9BTElBU19ORk5MX1NVQlNZUyhORk5MX1NVQlNZU19IT09LKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtNTEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MTM6c3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2hvb2tfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy01MTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NTE4OnN0YXRpYyB2b2lkIF9fZXhpdCBuZm5ldGxpbmtfaG9va19leGl0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTUxOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtNTIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo1MjM6bW9kdWxlX2luaXQobmZuZXRsaW5rX2hvb2tfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjUyNDptb2R1bGVfZXhpdChuZm5ldGxpbmtfaG9va19leGl0KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtNTI1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTUyNz1NT0RVTEVfQVVUSE9SKFxcXCJGbG9yaWFuIFdlc3RwaGFsIFxcdTAwM2Nmd0BzdHJsZW4uZGVcXHUwMDNlXFxcIik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjUyODpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIm5mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjM5OjAxLjczMTYyMjc5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNzY5NTAwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBvZiBteSBvd24gaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgTmV0ZmlsdGVyIE5ldGxpbmsgSG9va3MqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTmV0ZmlsdGVyIE5ldGxpbmsgSG9vayBmdW5jdGlvbmFsaXR5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0tgLiBUaGF0J3MgdGhlIHByaW1hcnkgdGFyZ2V0LCB0aGUga2V5IEkgbmVlZCB0byB0dXJuIHRvIHVubG9jayB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGNhcGFiaWxpdGllcy4gQnV0LCBpdCdzIG5ldmVyIGp1c3QgdGhhdCBzaW1wbGUsIGlzIGl0P1xuXG5JIGtub3cgSSBjYW4ndCBqdXN0IGFzc3VtZSBpdOKAmXMgZW5hYmxlZCBkaXJlY3RseSwgc28gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gV2hhdCBvdGhlciBmZWF0dXJlcyBvciB1bmRlcmx5aW5nIGNvbXBvbmVudHMgKm11c3QqIGJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGV2ZW4gc2VlIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PS2AgYXMgYW4gb3B0aW9uLCBsZXQgYWxvbmUgZW5hYmxlIGl0IG15c2VsZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgS2NvbmZpZyBoaWVyYXJjaHksIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljYWwgZ2F0ZXMgYW5kIGd1YXJkcmFpbHMgdGhhdCBjb250cm9sIHRoZSB2aXNpYmlsaXR5IGFuZCBhdmFpbGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBjb25maWcgb3B0aW9uLiBUaGlzIGlzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlICpjb25zdHJhaW50cyogYW5kIHRoZSAqcGF0aHdheXMqLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50aXJlIGVuYWJsaW5nIHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MDowNC41MDExMjYyMjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTc1OTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDA6MDYuMDIwODk5OTk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE1OTUyMjQ4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBhcm91bmQgbGluZSAzNi4gVGhhdCBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXRmaWx0ZXIgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBJ4oCZbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmb3Igc29tZSBvZiB0aGUgZmlsdGVyaW5nIHJ1bGVzIGlzIGRlZmluZWQuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgaG93IGEgc3BlY2lmaWMgbmV0d29yayBwYWNrZXQgaXMgcHJvY2Vzc2VkIGFuZCB3aGljaCBydWxlcyBpdCBnb2VzIHRocm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MDozNy42MTYxMjY5NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdFxcdGJvb2xcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICAyODpcXHRcXHRib29sXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxcbiAgMzE6XFx0XFx0Ym9vbFxcbiAgMzI6XFx0XFxuICAzMzpcXHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuICAzNDpcXHRcXHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbiAgMzc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuICA0MDpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNDM6XFx0XFx0ICB0byBsaXN0IHRoZSBiYXNlIG5ldGZpbHRlciBob29rcyB2aWEgTkZORVRMSU5LLlxcbiAgNDQ6XFx0XFx0ICBUaGlzIGlzIGhlbHBmdWwgZm9yIGRlYnVnZ2luZy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4gIDQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA0OTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNTI6XFx0XFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4gIDU1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgNTc6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcXG4gIDYwOlxcdFxcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQwOjM3LjYxNjIyMjg2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA1OTI1Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBORl9OQVQgY29uZmlndXJhdGlvbnMuIEl0J3MgZWFzeSB0byBnZXQgY2F1Z2h0IHVwIGluIHRoZSBoaWdoLWxldmVsIHN0dWZmLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aXRoIE5BVC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbXBpbGF0aW9uIHBhdGggZm9yIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIGJhY2sgdG8gd2hlcmUgaXQncyBjb21waWxlZCwgd2hpY2ggSSBzdHJvbmdseSBzdXNwZWN0IHdpbGwgYmUgaW4gYG5mX25hdF9jb3JlLmNgLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgcmVhbGx5IGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBhbmQgbGlua2VkLiBObyBzdG9uZSB1bnR1cm5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDA6NTkuNjc1NDc5MDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcyNjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9uYXRfY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19URlRQKSArPSBuZl9jb25udHJhY2tfdGZ0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS01NS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU2Om5mX25hdC15XFx0Oj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfcHJvdG8ubyBuZl9uYXRfaGVscGVyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTU3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMTg3LSNpZm5kZWYgTU9EVUxFXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjExODg6XFx0LyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMTg5LVxcdCAqIG1vZHVsZXMgbGlrZSBuZnRfY2hhaW5fbmF0LmtvIG1heSBzdGlsbCBjYWxsIHRoaXMgZnVuY3Rpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQwOjU5Ljc3MjIxMTI3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTcyMzEyMzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBuZXQvbmV0ZmlsdGVyYCBkaXJlY3RvcnkgYW5kIHNwZWNpZmljYWxseSBsaW5lIDU2IGluIHRoZSBgTWFrZWZpbGVgLiBUaGF0IGxpbmUgaXMgdGhlIHRhcmdldCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEkga25vdyBJJ20gaW50ZXJlc3RlZCBpbiBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyB0aGUgTWFrZWZpbGUgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbSBsaWtlbHkgbG9va2luZyBmb3IgaG93IGEgcGFydGljdWxhciBtb2R1bGUgb3IgY29tcG9uZW50IHdpdGhpbiBuZXRmaWx0ZXIgaXMgY29tcGlsZWQsIGxpbmtlZCwgb3IgaW5jbHVkZWQuIFBlcmhhcHMgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBhZGQgYSBuZXcgcnVsZSwgZGVidWcgYSBwcm9ibGVtLCBvciB1bmRlcnN0YW5kIHNvbWUgYnVpbGQtdGltZSBmbGFnLiBMaW5lIDU2IGlzIHRoZSBjcml0aWNhbCBwb2ludCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgc3RhcnQgdG8gZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgbmV0ZmlsdGVyJ3MgaW5uZXIgd29ya2luZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MTo1NS40OTUzMzgxMjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICs9IG5mX2Nvbm50cmFja19zbm1wLm9cXG4gIDUxOlxcdG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCkgKz0gbmZfY29ubnRyYWNrX3BwdHAub1xcbiAgNTI6XFx0b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TQU5FKSArPSBuZl9jb25udHJhY2tfc2FuZS5vXFxuICA1MzpcXHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCkgKz0gbmZfY29ubnRyYWNrX3NpcC5vXFxuICA1NDpcXHRvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFApICs9IG5mX2Nvbm50cmFja190ZnRwLm9cXG4gIDU1OlxcdFxcbiAgNTY6XFx0bmZfbmF0LXlcXHQ6PSBuZl9uYXRfY29yZS5vIG5mX25hdF9wcm90by5vIG5mX25hdF9oZWxwZXIub1xcbiAgNTc6XFx0XFxuICA1ODpcXHRvYmotJChDT05GSUdfTkZfTE9HX1NZU0xPRykgKz0gbmZfbG9nX3N5c2xvZy5vXFxuICA1OTpcXHRcXG4gIDYwOlxcdG9iai0kKENPTkZJR19ORl9OQVQpICs9IG5mX25hdC5vXFxuICA2MTpcXHRuZl9uYXQtJChDT05GSUdfTkZfTkFUX1JFRElSRUNUKSArPSBuZl9uYXRfcmVkaXJlY3Qub1xcbiAgNjI6XFx0bmZfbmF0LSQoQ09ORklHX05GX05BVF9NQVNRVUVSQURFKSArPSBuZl9uYXRfbWFzcXVlcmFkZS5vXFxuICA2MzpcXHRuZl9uYXQtJChDT05GSUdfTkZfTkFUX09WUykgKz0gbmZfbmF0X292cy5vXFxuICA2NDpcXHRcXG4gIDY1OlxcdGlmZXEgKCQoQ09ORklHX05GX05BVCksbSlcXG4gIDY2OlxcdG5mX25hdC0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSArPSBuZl9uYXRfYnBmLm9cXG4gIDY3OlxcdGVsc2UgaWZlcSAoJChDT05GSUdfTkZfTkFUKSx5KVxcbiAgNjg6XFx0bmZfbmF0LSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBuZl9uYXRfYnBmLm9cXG4gIDY5OlxcdGVuZGlmXFxuICA3MDpcXHRcXG4gIDcxOlxcdCMgTkFUIGhlbHBlcnNcXG4gIDcyOlxcdG9iai0kKENPTkZJR19ORl9OQVRfQU1BTkRBKSArPSBuZl9uYXRfYW1hbmRhLm9cXG4gIDczOlxcdG9iai0kKENPTkZJR19ORl9OQVRfRlRQKSArPSBuZl9uYXRfZnRwLm9cXG4gIDc0OlxcdG9iai0kKENPTkZJR19ORl9OQVRfSVJDKSArPSBuZl9uYXRfaXJjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDE6NTUuNDk1NDE4MTQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzQ2MTI3NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEhvb2sgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgTmV0ZmlsdGVyIGhvb2tzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgdGhlIE5ldGxpbmsgaW50ZXJmYWNlLiBSaWdodCwgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgcmVnaXN0cmF0aW9uIGFuZCBkaXNwYXRjaGluZyBtZWNoYW5pc21zLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiBob3cgTmV0bGluayBtZXNzYWdlcyBnZXQgcHJvY2Vzc2VkIGFuZCB1bHRpbWF0ZWx5IHBhc3NlZCB0byB0aGUgcmVnaXN0ZXJlZCBob29rIGZ1bmN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgbmV0bGluayBtZXNzYWdlIGhhbmRsZXJzLCB0aGUgaG9vayByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGUgcGF5bG9hZCBpcyBhY3R1YWxseSBwYXNzZWQgdGhyb3VnaCB0aGUgZGlmZmVyZW50IGxheWVycy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgZm9yIGxhdGVyLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBjb2RlIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDkyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MjoxMi44NDE1NDc5ODFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4gNDA1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdGlmIChjdXItXFx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXFxuIDQwODpcXHRcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuIDQwOTpcXHRcXHRcXHRlbHNlIHtcXG4gNDEwOlxcdFxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxuIDQxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuIDQxMzpcXHRcXHRcXHR9XFxuIDQxNDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdGRvbmU6XFxuIDQxOTpcXHRcXHRpZiAobmxza2ItXFx1MDAzZWxlbiBcXHUwMDNlIDApXFxuIDQyMDpcXHRcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiA0MjE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQyMjpcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IGk7XFxuIDQyMzpcXHRcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG4gNDI0OlxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDQyNzpcXHR7XFxuIDQyODpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNDI5OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXFx1MDAzZWRhdGE7XFxuIDQzMDpcXHRcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gTlVMTDtcXG4gNDMxOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGNiLVxcdTAwM2Vza2ItXFx1MDAzZXNrKTtcXG4gNDMyOlxcdFxcdHU4IGZhbWlseSA9IG5mbXNnLVxcdTAwM2VuZmdlbl9mYW1pbHk7XFxuIDQzMzpcXHRcXHRjaGFyIG5hbWVbSUZOQU1TSVpdID0gXFxcIlxcXCI7XFxuIDQzNDpcXHRcXHRjb25zdCB2b2lkICpoZWFkO1xcbiA0MzU6XFx0XFx0dTMyIGhvb2tudW07XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdGhvb2tudW0gPSBudG9obChubGFfZ2V0X2JlMzIobmxhW05GTkxBX0hPT0tfSE9PS05VTV0pKTtcXG4gNDM4OlxcdFxcdGlmIChob29rbnVtIFxcdTAwM2UgMjU1KVxcbiA0Mzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19ORVRERVYpIHtcXG4gNDQyOlxcdFxcdFxcdGlmICghbmxhW05GTkxBX0hPT0tfREVWXSlcXG4gNDQzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHRcXHRubGFfc3Ryc2NweShuYW1lLCBubGFbTkZOTEFfSE9PS19ERVZdLCBzaXplb2YobmFtZSkpO1xcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDQ0OTpcXHRcXHQvKiBOb3QgZGVyZWZlcmVuY2VkOyBmb3IgY29uc2lzdGVuY3kgY2hlY2sgb25seSAqL1xcbiA0NTA6XFx0XFx0aGVhZCA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBob29rbnVtLCBuZXQsIG5hbWUpO1xcbiA0NTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdFxcdGlmIChoZWFkIFxcdTAwMjZcXHUwMDI2IElTX0VSUihoZWFkKSlcXG4gNDU0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGhlYWQpO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcXG4gNDU3OlxcdFxcdGlmICghY3R4KVxcbiA0NTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdFxcdHN0cnNjcHkoY3R4LVxcdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVxcdTAwM2VkZXZuYW1lKSk7XFxuIDQ2MTpcXHRcXHRjdHgtXFx1MDAzZWhvb2sgPSBob29rbnVtO1xcbiA0NjI6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBjdHg7XFxuIDQ2MzpcXHRcXG4gNDY0OlxcdFxcdHJldHVybiAwO1xcbiA0NjU6XFx0fVxcbiA0NjY6XFx0XFxuIDQ2NzpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0b3Aoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA0Njg6XFx0e1xcbiA0Njk6XFx0XFx0a2ZyZWUoY2ItXFx1MDAzZWRhdGEpO1xcbiA0NzA6XFx0XFx0cmV0dXJuIDA7XFxuIDQ3MTpcXHR9XFxuIDQ3MjpcXHRcXG4gNDczOlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0NzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIDQ3NTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbiA0NzY6XFx0e1xcbiA0Nzc6XFx0XFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcXG4gNDc4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0RVTVApIHtcXG4gNDgxOlxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbiA0ODI6XFx0XFx0XFx0XFx0LnN0YXJ0ID0gbmZubF9ob29rX2R1bXBfc3RhcnQsXFxuIDQ4MzpcXHRcXHRcXHRcXHQuZG9uZSA9IG5mbmxfaG9va19kdW1wX3N0b3AsXFxuIDQ4NDpcXHRcXHRcXHRcXHQuZHVtcCA9IG5mbmxfaG9va19kdW1wLFxcbiA0ODU6XFx0XFx0XFx0XFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxcbiA0ODY6XFx0XFx0XFx0XFx0LmRhdGEgPSAodm9pZCAqKW5sYSxcXG4gNDg3OlxcdFxcdFxcdH07XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdFxcdHJldHVybiBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KGluZm8tXFx1MDAzZXNrLCBza2IsIGluZm8tXFx1MDAzZW5saCwgXFx1MDAyNmMpO1xcbiA0OTA6XFx0XFx0fVxcbiA0OTE6XFx0XFxuIDQ5MjpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZm5sX2hvb2tfY2JbTkZOTF9NU0dfSE9PS19NQVhdID0ge1xcbiA0OTY6XFx0XFx0W05GTkxfTVNHX0hPT0tfR0VUXSA9IHtcXG4gNDk3OlxcdFxcdFxcdC5jYWxsXFx0XFx0PSBuZm5sX2hvb2tfZ2V0LFxcbiA0OTg6XFx0XFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfUkNVLFxcbiA0OTk6XFx0XFx0XFx0LmF0dHJfY291bnRcXHQ9IE5GTkxBX0hPT0tfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0MjoxMi44NDE2ODYyNDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY3MTczMzA1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBwYXJ0aWN1bGFyIGNvZGU6XG5cbioqRGl2aW5nIGludG8gbmZuZXRsaW5rX2hvb2suYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlc3Qgb2YgYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIG5ldGZpbHRlciBob29rcyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYXQgdGhlIG5ldGxpbmsgbGV2ZWwuIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGhpZ2gtbGV2ZWwgY29uY2VwdHMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyBiZWluZyB1c2VkPyBIb3cgYXJlIHRoZSBob29rcyByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQ/IEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjb3JlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIG5ldGxpbmsgY29tbXVuaWNhdGlvbiBsYXllci4gSSB3YW50IHRvIGxvb2sgZm9yIGRldGFpbHMgb24gaG93IHRoZSBob29rIGZ1bmN0aW9ucyBhcmUgY2hhaW5lZCBhbmQgaG93IHRoZSBwYXlsb2FkIGlzIGNvbnN0cnVjdGVkIGFuZCB0cmFuc21pdHRlZC4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGZsb3csIGZyb20gdGhlIGtlcm5lbCBtb2R1bGUncyBwZXJzcGVjdGl2ZS4gSXQncyB0aW1lIHRvIHNlZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDI6MjkuNTU5MDE5NzA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9ob29rX2NiW05GTkxfTVNHX0hPT0tfTUFYXSA9IHtcXG4gNDk2OlxcdFxcdFtORk5MX01TR19IT09LX0dFVF0gPSB7XFxuIDQ5NzpcXHRcXHRcXHQuY2FsbFxcdFxcdD0gbmZubF9ob29rX2dldCxcXG4gNDk4OlxcdFxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX1JDVSxcXG4gNDk5OlxcdFxcdFxcdC5hdHRyX2NvdW50XFx0PSBORk5MQV9IT09LX01BWCxcXG4gNTAwOlxcdFxcdFxcdC5wb2xpY3lcXHRcXHQ9IG5mbmxfaG9va19ubGFfcG9saWN5XFxuIDUwMTpcXHRcXHR9LFxcbiA1MDI6XFx0fTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5maG9va19zdWJzeXMgPSB7XFxuIDUwNTpcXHRcXHQubmFtZVxcdFxcdFxcdFxcdD0gXFxcIm5maG9va1xcXCIsXFxuIDUwNjpcXHRcXHQuc3Vic3lzX2lkXFx0XFx0XFx0PSBORk5MX1NVQlNZU19IT09LLFxcbiA1MDc6XFx0XFx0LmNiX2NvdW50XFx0XFx0XFx0PSBORk5MX01TR19IT09LX01BWCxcXG4gNTA4OlxcdFxcdC5jYlxcdFxcdFxcdFxcdD0gbmZubF9ob29rX2NiLFxcbiA1MDk6XFx0fTtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0TU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0hPT0spO1xcbiA1MTI6XFx0XFxuIDUxMzpcXHRzdGF0aWMgaW50IF9faW5pdCBuZm5ldGxpbmtfaG9va19pbml0KHZvaWQpXFxuIDUxNDpcXHR7XFxuIDUxNTpcXHRcXHRyZXR1cm4gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcXHUwMDI2bmZob29rX3N1YnN5cyk7XFxuIDUxNjpcXHR9XFxuIDUxNzpcXHRcXG4gNTE4OlxcdHN0YXRpYyB2b2lkIF9fZXhpdCBuZm5ldGxpbmtfaG9va19leGl0KHZvaWQpXFxuIDUxOTpcXHR7XFxuIDUyMDpcXHRcXHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXFx1MDAyNm5maG9va19zdWJzeXMpO1xcbiA1MjE6XFx0fVxcbiA1MjI6XFx0XFxuIDUyMzpcXHRtb2R1bGVfaW5pdChuZm5ldGxpbmtfaG9va19pbml0KTtcXG4gNTI0OlxcdG1vZHVsZV9leGl0KG5mbmV0bGlua19ob29rX2V4aXQpO1xcbiA1MjU6XFx0XFxuIDUyNjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDUyNzpcXHRNT0RVTEVfQVVUSE9SKFxcXCJGbG9yaWFuIFdlc3RwaGFsIFxcdTAwM2Nmd0BzdHJsZW4uZGVcXHUwMDNlXFxcIik7XFxuIDUyODpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIm5mbmV0bGlua19ob29rOiBsaXN0IHJlZ2lzdGVyZWQgbmV0ZmlsdGVyIGhvb2tzXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQyOjI5LjU2MTE4MjYyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ1OTIxNjU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIHNlZSBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enouIEZpcnN0LCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBJdCdzIHRvdWNoaW5nIG5ldGZpbHRlciBob29rIHNlcXVlbmNlIHRyYWNraW5nLCBpbXBsZW1lbnRpbmcgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uIHVzaW5nIGBSRUFEX09OQ0VgLCBgc21wX2xvYWRfYWNxdWlyZWAsIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIGR1cmluZyBuZXRsaW5rIGR1bXBpbmcgb2YgaG9va3MsIGFuZCBOQVQgaG9va3MsIHBhZ2luYXRpb24vYXJncyBoYW5kbGluZyBhY3Jvc3MgZHVtcCBjYWxscywgYW5kIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIGBubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnRgLiBDcnVjaWFsbHksIHRoaXMgbmV0ZmlsdGVyIGhvb2sgZHVtcCBpcyB1c2VyLXRyaWdnZXJhYmxlIHZpYSB0aGUgYG5mbmV0bGlua2Agc29ja2V0IChBRl9ORVRMSU5LIHdpdGggdGhlIE5FVExJTktfTkVURklMVEVSIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGBORk5MX1NVQlNZU19IT09LYCkuIFRoaXMga2luZCBvZiBhY2Nlc3MgaXMgcmlnaHQgdXAgb3VyIGFsbGV5IOKAkyBjb3JlIG5ldGZpbHRlci9uZm5ldGxpbmsgY29kZSwgcmVhY2hhYmxlIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoYXQgYWxvbmUgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC5cblxuTm93LCB3aGljaCBzeW1ib2xzIHNob3VsZCBiZSBvdXIgZm9jdXM/IExldCdzIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycy4gV2UndmUgZ290IGBuZm5sX2hvb2tfZ2V0YCwgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLlxuXG5IYW5nIG9uLCB3ZSBuZWVkIHRvIGNsYXJpZnkgd2hhdCB0aGUgKmVudHJ5cG9pbnRzKiBhcmUsIGFuZCB3aGF0IGlzbid0IHN0YXRpYy4gYG5mbmxfaG9va19nZXRgIGlzIHN0YXRpYywgcmVmZXJlbmNlZCB3aXRoaW4gYG5mbmxfaG9va19jYmAuIFRoYXQncyBsZXNzIGlkZWFsLCB0aG91Z2ggc3l6a2FsbGVyIGNhbiBzdGlsbCB3b3JrIHdpdGggaXQgaWYgaXQncyBub3QgaW5saW5lZC4gYG5mX25hdF9yZWdpc3Rlcl9mbmAgYW5kIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIGZyb20gYG5mX25hdF9jb3JlLmNgLiBTYW1lIHdpdGggYG5mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgIGZvdW5kIGluIGBjb3JlLmNgLiBJbiBgbmZuZXRsaW5rX2hvb2suY2AsIHdlJ3ZlIGdvdCBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYW5kIGBuZm5sX2hvb2tfZ2V0YC4gIElkZWFsbHksIHdlJ3JlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHN5bWJvbCwgZXNwZWNpYWxseSBub24tc3RhdGljIG9yIGVudHJ5cG9pbnRzLiBUaGVzZSBhcmUgaWRlYWwgZm9yIHN5emthbGxlciBLQ09WIGFuZCBmb2N1cyBzeW1ib2wgdGFyZ2V0aW5nLiBUaGlzIHBvaW50cyB1cyByaWdodCBiYWNrIHRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBuZm5sX2hvb2tfZ2V0YCwgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYC4gVGltZSB0byB2ZXJpZnkgdGhhdCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIGlzIGluZGVlZCBpbiBgY29yZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0Mjo0My4wMjA0MDE0NDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTQ1ODg3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2NvcmUuYz0zODk9c3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTM5Ny1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzozOTg6c3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTM5OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9NTU5PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NjAtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTYxOmludCBuZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU2Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NjYtXFx0XFx0aWYgKHJlZy1cXHUwMDNlaG9va251bSA9PSBORl9JTkVUX0lOR1JFU1MpIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1Njc6XFx0XFx0XFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSU5FVCwgcmVnKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NjgtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzAtXFx0XFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1NzE6XFx0XFx0XFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSVBWNCwgcmVnKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzItXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NzQtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTc1OlxcdFxcdFxcdGVyciA9IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lQVjYsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTc2LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01ODEtXFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1ODI6XFx0XFx0ZXJyID0gX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIHJlZy1cXHUwMDNlcGYsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTgzLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTg4LX1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1ODk6RVhQT1JUX1NZTUJPTChuZl9yZWdpc3Rlcl9uZXRfaG9vayk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTkwLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU5MTppbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTkyLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01OTctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKykge1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU5ODpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFxcdTAwMjZyZWdbaV0pO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU5OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjA4LX1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MDk6RVhQT1JUX1NZTUJPTChuZl9yZWdpc3Rlcl9uZXRfaG9va3MpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYxMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQyMj1pbnQgaXBfdnNfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0My1cXHRpZiAoIShpcHZzLVxcdTAwM2Vob29rc19hZm1hc2sgXFx1MDAyNiBhZm1hc2spKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDQ0OlxcdFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhpcHZzLVxcdTAwM2VuZXQsIG9wcywgY291bnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ0NS1cXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM9MjEwPWludCBicGZfbmZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0yNTYtXFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jOjI1NzpcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFxcdTAwMjZsaW5rLVxcdTAwM2Vob29rX29wcyk7XFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTI1OC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTQ0Mz1zdGF0aWMgaW50IG5mX2N0X25ldG5zX2RvX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHU4IG5mcHJvdG8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ2MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ2MjpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY0X2Nvbm50cmFja19vcHMsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy00NjMtXFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjQ4MDpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY2X2Nvbm50cmFja19vcHMsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy00ODEtXFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTUwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjUwNzpcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuZl9jdF9icmlkZ2VfaW5mby1cXHUwMDNlb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTA4LVxcdFxcdFxcdFxcdFxcdCAgICBuZl9jdF9icmlkZ2VfaW5mby1cXHUwMDNlb3BzX3NpemUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNzc9aW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMjM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzoxMjM1OlxcdFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEyMzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jPTc3Mj1pbnQgbmZfc3lucHJveHlfaXB2NF9pbml0KHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTc3Ny1cXHRpZiAoc25ldC1cXHUwMDNlaG9va19yZWY0ID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYzo3Nzg6XFx0XFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2NF9zeW5wcm94eV9vcHMsXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtNzc5LVxcdFxcdFxcdFxcdFxcdCAgICBBUlJBWV9TSVpFKGlwdjRfc3lucHJveHlfb3BzKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYz0xMjAzPW5mX3N5bnByb3h5X2lwdjZfaW5pdChzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy0xMjA4LVxcdGlmIChzbmV0LVxcdTAwM2Vob29rX3JlZjYgPT0gMCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jOjEyMDk6XFx0XFx0ZXJyID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgaXB2Nl9zeW5wcm94eV9vcHMsXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtMTIxMC1cXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzE2PXN0YXRpYyBpbnQgbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjUtXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZob29rLVxcdTAwM2VvcHNfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyNjpcXHRcXHRcXHRlcnIgPSBuZl9yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIG9wcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI3LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDI1PXN0YXRpYyBpbnQgbmZfdGFibGVzX3JlZ2lzdGVyX2hvb2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ0NTpcXHRyZXR1cm4gbmZfcmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2VvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0Ni19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDA5PXN0YXRpYyBpbnQgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9vcHMoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTAxOS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MDIwOlxcdGVyciA9IG5mX3JlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDIxLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM9MzIyPXN0YXRpYyBpbnQgbmZ0X25ldGRldl9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmMtMzU5LVxcdFxcdFxcdGlmICghKHRhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9UQUJMRV9GX0RPUk1BTlQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmM6MzYwOlxcdFxcdFxcdCAgICBuZl9yZWdpc3Rlcl9uZXRfaG9vayhkZXZfbmV0KGRldiksIG9wcykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYy0zNjEtXFx0XFx0XFx0XFx0a2ZyZWUob3BzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xNTU1PXN0cnVjdCB4dF90YWJsZSAqeHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE2MTAtXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjE2MTE6XFx0XFx0cmV0ID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgb3BzLCBudW1fb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxMi1cXHRcXHRpZiAocmV0ICE9IDApIHtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxMy1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnh0W3RhYmxlLVxcdTAwM2VhZl0ubXV0ZXgpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNjE0OlxcdFxcdFxcdC8qIG5mX3JlZ2lzdGVyX25ldF9ob29rcygpIG1pZ2h0IGhhdmUgcHVibGlzaGVkIGFcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTYxNS1cXHRcXHRcXHQgKiBiYXNlIGNoYWluIGJlZm9yZSBpbnRlcm5hbCBlcnJvciB1bndpbmQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQyOjQ0LjkxNDk5NDgwNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTg0MDE2MTQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIERlcGVuZGVuY3kgUmV2aWV3KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBORVRGSUxURVJfTkVUTElOS19IT09LYCBpcyBjb3JyZWN0bHkgc2V0IHVwLiBGaXJzdCwgbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgSSBzZWUgaXQgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgYE5GX1RBQkxFU2AgYW5kIGFsc28gc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLlxuXG5Ob3cgSSBzZWU6XG4qICAgYENPTkZJR19ORVRGSUxURVJgXG4qICAgYENPTkZJR19ORl9OQVRgXG4qICAgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LYFxuKiAgIGBDT05GSUdfTkZfVEFCTEVTYFxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgcGFyZW50IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgYE5FVEZJTFRFUmAsIGBORl9OQVRgLCBhbmQgYE5GX1RBQkxFU2AuIEknbGwgc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfTkFUYCB0byBtYXAgb3V0IHRoZSBmdWxsIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gb3JkZXIsIG90aGVyd2lzZSwgSSBtaWdodCBoYXZlIHNvbWUgbmFzdHkgYnVpbGQgZXJyb3JzIG9yLCB3b3JzZSwgZnVuY3Rpb25hbGl0eSB0aGF0IGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZC4gVGltZSB0byB0cmFjZSB0aGUgcmFiYml0IGhvbGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQzOjU0Ljc1NTE2MDM2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTM0MzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDM6NTYuNTE2NTEwOTc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTYwNTY5MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbmZpZyBORl9OQVRgIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiAoTkFUKSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGFuZCBkb3VibGUtY2hlY2sgaG93IGBjb25maWcgTkZfTkFUYCBpcyBkZWZpbmVkLiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaXQncyBzaXR1YXRlZCBpbiB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suIElzIGl0IGEgY29yZSBtb2R1bGUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG90aGVyLCBtb3JlIGJhc2ljIE5BVCBjb21wb25lbnRzPyBLbm93aW5nIGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYW55IGNoYW5nZXMgSSBtaWdodCBiZSBjb25zaWRlcmluZy4gSSdtIGFsc28gaG9waW5nIHRoZSBoZWxwIHRleHQgd2lsbCByZW1pbmQgbWUgb2YgYW55IG9ic2N1cmUgbnVhbmNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDQ6MDcuNDc3MTA2NTk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk5NjY1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM5OD1jb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDA3OmNvbmZpZyBORl9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDQ6MDcuNjE3MDc3NTg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzUwNDc2Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQwNy4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgYSByZWxhdGVkIGJsb2NrIG9mIG9wdGlvbnMsIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gS25vd2luZyBob3cgdGhpcyBpcyBsYWlkIG91dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhbmQgbWFuYWdlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbnkgcHJvbXB0cywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3Igd2hhdGV2ZXIgSSdtIGludmVzdGlnYXRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDQ6MzIuMzY3NTU2OTMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdFxcdCAgdGhlIGVucXVldWVkIHZpYSBORk5FVExJTksuXFxuIDQwNjpcXHRcXG4gNDA3OlxcdGNvbmZpZyBORl9OQVRcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gc3VwcG9ydFxcXCJcXG4gNDA5OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDQxMDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gNDExOlxcdFxcdGhlbHBcXG4gNDEyOlxcdFxcdCAgVGhlIE5BVCBvcHRpb24gYWxsb3dzIG1hc3F1ZXJhZGluZywgcG9ydCBmb3J3YXJkaW5nIGFuZCBvdGhlclxcbiA0MTM6XFx0XFx0ICBmb3JtcyBvZiBmdWxsIE5ldHdvcmsgQWRkcmVzcyBQb3J0IFRyYW5zbGF0aW9uLiBUaGlzIGNhbiBiZVxcbiA0MTQ6XFx0XFx0ICBjb250cm9sbGVkIGJ5IGlwdGFibGVzLCBpcDZ0YWJsZXMgb3IgbmZ0LlxcbiA0MTU6XFx0XFxuIDQxNjpcXHRjb25maWcgTkZfTkFUX0FNQU5EQVxcbiA0MTc6XFx0XFx0dHJpc3RhdGVcXG4gNDE4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVFxcbiA0MTk6XFx0XFx0ZGVmYXVsdCBORl9OQVQgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRjb25maWcgTkZfTkFUX0ZUUFxcbiA0MjI6XFx0XFx0dHJpc3RhdGVcXG4gNDIzOlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVFxcbiA0MjQ6XFx0XFx0ZGVmYXVsdCBORl9OQVQgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX0ZUUFxcbiA0MjU6XFx0XFxuIDQyNjpcXHRjb25maWcgTkZfTkFUX0lSQ1xcbiA0Mjc6XFx0XFx0dHJpc3RhdGVcXG4gNDI4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVFxcbiA0Mjk6XFx0XFx0ZGVmYXVsdCBORl9OQVQgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX0lSQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NDozMi4zNjc3MTcyNDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwNjI3ODI2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uKipcblxuT2theSwgc28gYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBkZWVwZXIgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyYXRpb24gdHdlYWtzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBiYXNpY3MgYXJlIGluIHBsYWNlLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIGFtaXNzLCBwcm9iYWJseSB3aXRoIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gdHJhY2tpbmcuIExldCdzIHNlZSBpZiB0aGUgcmVsZXZhbnQga2VybmVsIG1vZHVsZSBpcyBldmVuIGxvYWRlZC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBjb25maWcgTkZfQ09OTlRSQUNLYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBJZiB0aGF0J3Mgbm90IHJpZ2h0LCBldmVyeXRoaW5nIGVsc2UgaXMganVzdCB3YXN0ZWQgZWZmb3J0LiBObyBzZW5zZSBjaGFzaW5nIGdob3N0cyB1bnRpbCBJJ20gY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBjb25maWd1cmVkIHByb3Blcmx5LiBJJ2xsIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDU6MDkuNDMwNTAzMjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTM3MjE1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDU6MTEuMjg0MjMxMDY5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDg4ODAzOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvbmZpZyBORVRGSUxURVJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBjb25maWcgTkVURklMVEVSYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJdCdzIGEgZm91bmRhdGlvbmFsIGNvbXBvbmVudCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGNvbmZpZ3VyYXRpb24uIEnigJltIGltbWVkaWF0ZWx5IGdvaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpc3N1ZXMsIHZ1bG5lcmFiaWxpdGllcywgYW5kIHBlcmZvcm1hbmNlIGFzcGVjdHMgYXNzb2NpYXRlZCB3aXRoIGl0LiBXaGF0IGFyZSB0aGUga2V5IHNldHRpbmdzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgbWlzY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIGFueXRoaW5nIGp1bXBzIG91dCBhcyBwcm9ibGVtYXRpYyBvciByZXF1aXJpbmcgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NTozMy43NzMwMzk3NzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjU2OTczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0xNTQ9Y29uZmlnIE5FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xcbi0tXFxubmV0L0tjb25maWctMTY0LVxcbm5ldC9LY29uZmlnOjE2NTptZW51Y29uZmlnIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTE2Ni1cXHRib29sIFxcXCJOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgZnJhbWV3b3JrIChOZXRmaWx0ZXIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NTozMy45MTk2MTY2MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5Mzk2NzE4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBBZHZhbmNlZCBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGhpcyBpcyB0aGUganVtcGluZy1vZmYgcG9pbnQgZm9yIGFueSBkZWVwZXIgTmV0ZmlsdGVyIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGlmIGFkdmFuY2VkIE5ldGZpbHRlciBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhdCB0aGlzIGxldmVsIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBnZXR0aW5nIGludG8gdGhlIGRldGFpbHMuIFRoYXQgc2V0dGluZyB3aWxsIGRpY3RhdGUgd2hhdCB0b29scyBhbmQgY29uZmlndXJhdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBtZSBhcyBJIGdvIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0uIEl0J3MgdGhlIGZpcnN0IGZpbHRlci4gS25vd2luZyB0aGF0IHN0YXRlIGluZm9ybXMgYWxsIHRoZSBkZWNpc2lvbnMgSSdsbCBiZSBtYWtpbmcgYWJvdXQgcnVsZXMsIHRhcmdldHMsIGFuZCBob3cgSSdtIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHBhY2tldCBmaWx0ZXJpbmcgc3Vic3lzdGVtcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgYmFzaWMsIG9yIHRoZSBtb3JlIGV4cGFuc2l2ZSwgZmVhdHVyZXMgYXJlIGJlaW5nIHVzZWQuIFNvLCBsZXQncyBjaGVjayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NTo1Ni44NTkyOTE5NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MzcxNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcXG5uZXQvS2NvbmZpZy0yMTktXFxubmV0L0tjb25maWc6MjIwOmNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvS2NvbmZpZy0yMjEtXFx0Ym9vbCBcXFwiQWR2YW5jZWQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQ1OjU2Ljk5ODY2OTU3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk5ODcwODY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFx1MDAyNiBGdW5jdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZy4gSSd2ZSBnb3QgYSBjaGVja2xpc3Q6IGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5GX1RBQkxFU2AsIGBORVRGSUxURVJfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19IT09LYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfTkFUYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGNvcmUgZm91bmRhdGlvbiBJIG5lZWQgaW4gcGxhY2UuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBhbmQgaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzLCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQgaGVyZS4gSSBzZWUgYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZm5sX2hvb2tfZ2V0YCwgd2hpY2ggcG9pbnQgdG8gdGhlIG5ldHdvcmsgZmlsdGVyIG5ldGxpbmsgaG9vaydzIGRlYnVnZ2luZyBhbmQgcmV0cmlldmFsIG1lY2hhbmlzbXMuIFRoZW4gdGhlcmUgYXJlIHRoZSBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYCwgd2hpY2ggYXJlIG9idmlvdXNseSBjcml0aWNhbCBmb3IgTkFUIG9wZXJhdGlvbnMsIGhvb2tpbmcgYW5kIHVuaG9va2luZyBOQVQtcmVsYXRlZCBmdW5jdGlvbnMuIEFuZCBmaW5hbGx5LCB0aGUgc3RhbmRhcmQgYG5mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLCB3aGljaCBhcmUgdGhlIGZ1bmRhbWVudGFsIG5ldHdvcmsgaG9vayByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cblxuU2luY2UgSSdtIGRlYWxpbmcgd2l0aCBob29rcywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBuZl91bnJlZ2lzdGVyX25ldF9ob29rYCBpcyBpbmRlZWQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHNvIHRoYXQgSSBjYW4gY2FsbCBpdCBmcm9tIGVsc2V3aGVyZS4gVGhpcyBpcyBrZXkgZm9yIHRoZSBkeW5hbWljIGFzcGVjdHMgb2YgdGhpcyBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwOTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NDY6MTUuOTk3MzgxMTk5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1NzcyNDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo0NjoxNy42MTMxNjI0MDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU1OTQyNzg5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBOZXRmaWx0ZXIgVW5yZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGhvdyBOZXRmaWx0ZXIgaG9va3MgYXJlIHVucmVnaXN0ZXJlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXR3b3JraW5nIG5hbWVzcGFjZS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCBlaXRoZXIgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgIG9yIHBlcmhhcHMgaXRzIHBsdXJhbCBjb3VudGVycGFydCwgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzYCwgaXMgdGhlIGZ1bmN0aW9uIEknbSBhZnRlci4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIHRoZSBzZWFyY2gsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBjb3JlIE5ldGZpbHRlciBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLi4uIFRpbWUgdG8gc3RhcnQgZ3JlcHBpbmcgYW5kIGNyb3NzLXJlZmVyZW5jaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQ2OjUzLjIwNzQ0MzczWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY4ODYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9jb3JlLmM9NDczPXN0YXRpYyBib29sIG5mX3JlbW92ZV9uZXRfaG9vayhzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpvbGQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00OTAtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NDkxOnN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00OTItXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUzMi1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1MzM6dm9pZCBuZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTM0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUzNi1cXHRcXHRpZiAocmVnLVxcdTAwM2Vob29rbnVtID09IE5GX0lORVRfSU5HUkVTUykge1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjUzNzpcXHRcXHRcXHRfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lORVQsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTM4LVxcdFxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTM5OlxcdFxcdFxcdF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIE5GUFJPVE9fSVBWNCwgcmVnKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1NDA6XFx0XFx0XFx0X19uZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgTkZQUk9UT19JUFY2LCByZWcpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU0MS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQyLVxcdH0gZWxzZSB7XFxubmV0L25ldGZpbHRlci9jb3JlLmM6NTQzOlxcdFxcdF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIHJlZy1cXHUwMDNlcGYsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTQ0LVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01NDUtfVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU0NjpFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfbmV0X2hvb2spO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU0Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTU2MT1pbnQgbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTU3Ni1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjU3NzpcXHRcXHRcXHRcXHRfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBORlBST1RPX0lQVjQsIHJlZyk7XFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTc4LVxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz01OTE9aW50IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjA1LVxcdGlmIChpIFxcdTAwM2UgMClcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MDY6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCByZWcsIGkpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYwNy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9NjA5PUVYUE9SVF9TWU1CT0wobmZfcmVnaXN0ZXJfbmV0X2hvb2tzKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTAtXFxubmV0L25ldGZpbHRlci9jb3JlLmM6NjExOnZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va3Moc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZyxcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy02MTItXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaG9va2NvdW50KVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNjE2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBob29rY291bnQ7IGkrKylcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo2MTc6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZXQsIFxcdTAwMjZyZWdbaV0pO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYxOC19XFxubmV0L25ldGZpbHRlci9jb3JlLmM6NjE5OkVYUE9SVF9TWU1CT0wobmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTYyMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQ1MT12b2lkIGlwX3ZzX3VucmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjQ3MS1cXHRpZiAoaXB2cy1cXHUwMDNlaG9va3NfYWZtYXNrIFxcdTAwMjYgYWZtYXNrKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNDcyOlxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKGlwdnMtXFx1MDAzZW5ldCwgb3BzLCBjb3VudCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNDczLVxcdFxcdGlwdnMtXFx1MDAzZWhvb2tzX2FmbWFzayBcXHUwMDI2PSB+YWZtYXNrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jPTExMz1zdGF0aWMgdm9pZCBicGZfbmZfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYy0xMjEtXFx0aWYgKCFjbXB4Y2hnKFxcdTAwMjZuZl9saW5rLVxcdTAwM2VkZWFkLCAwLCAxKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYzoxMjI6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhuZl9saW5rLVxcdTAwM2VuZXQsIFxcdTAwMjZuZl9saW5rLVxcdTAwM2Vob29rX29wcyk7XFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTEyMy1cXHRcXHRicGZfbmZfZGlzYWJsZV9kZWZyYWcobmZfbGluayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTUzMj1zdGF0aWMgdm9pZCBuZl9jdF9uZXRuc19kb19wdXQoc3RydWN0IG5ldCAqbmV0LCB1OCBuZnByb3RvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01MzktXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzNCBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2VyczQgPT0gMCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0MDpcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjRfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU0MS1cXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGlwdjRfY29ubnRyYWNrX29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NDctXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzNiBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2VyczYgPT0gMCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjU0ODpcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfY29ubnRyYWNrX29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTU0OS1cXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy01NTctXFx0XFx0aWYgKGNuZXQtXFx1MDAzZXVzZXJzX2JyaWRnZSBcXHUwMDI2XFx1MDAyNiAoLS1jbmV0LVxcdTAwM2V1c2Vyc19icmlkZ2UgPT0gMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo1NTg6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuZl9jdF9icmlkZ2VfaW5mby1cXHUwMDNlb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNTU5LVxcdFxcdFxcdFxcdFxcdFxcdG5mX2N0X2JyaWRnZV9pbmZvLVxcdTAwM2VvcHNfc2l6ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MTI2Nj12b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDAtXFx0aWYgKG5hdF9wcm90b19uZXQtXFx1MDAzZXVzZXJzID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTMwMTpcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTEzMDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYz03OTE9dm9pZCBuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtNzk1LVxcdGlmIChzbmV0LVxcdTAwM2Vob29rX3JlZjQgPT0gMClcXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYzo3OTY6XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBpcHY0X3N5bnByb3h5X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5X2NvcmUuYy03OTctXFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShpcHY0X3N5bnByb3h5X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM9MTIyMz1uZl9zeW5wcm94eV9pcHY2X2Zpbmkoc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmMtMTIyNy1cXHRpZiAoc25ldC1cXHUwMDNlaG9va19yZWY2ID09IDApXFxubmV0L25ldGZpbHRlci9uZl9zeW5wcm94eV9jb3JlLmM6MTIyODpcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGlwdjZfc3lucHJveHlfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfc3lucHJveHlfY29yZS5jLTEyMjktXFx0XFx0XFx0XFx0XFx0QVJSQVlfU0laRShpcHY2X3N5bnByb3h5X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzE2PXN0YXRpYyBpbnQgbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzQxOlxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0Mi1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zODc9c3RhdGljIHZvaWQgbmZ0X25ldGRldl91bnJlZ2lzdGVyX3RyYW5zX2hvb2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzk5LVxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcXHUwMDI2aG9vay1cXHUwMDNlb3BzX2xpc3QsIGxpc3QpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDAwOlxcdFxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQwMS1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MDc9c3RhdGljIHZvaWQgbmZ0X25ldGRldl91bnJlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQxNy1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wcywgXFx1MDAyNmhvb2stXFx1MDAzZW9wc19saXN0LCBsaXN0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQxODpcXHRcXHRcXHRcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MTktXFx0XFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDQ4PXN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NzMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDc0OlxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2sobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2VvcHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3NS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODkxPXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMwNzYtXFx0XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZoLVxcdTAwM2VvcHNfbGlzdCwgbGlzdClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDc3OlxcdFxcdFxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2soY3R4LVxcdTAwM2VuZXQsIG9wcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzA3OC1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04OTc3PXN0YXRpYyB2b2lkIG5mdF91bnJlZ2lzdGVyX2Zsb3d0YWJsZV9vcHMoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODk4MC17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODk4MTpcXHRuZl91bnJlZ2lzdGVyX25ldF9ob29rKG5ldCwgb3BzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTgyLVxcdGZsb3d0YWJsZS1cXHUwMDNlZGF0YS50eXBlLVxcdTAwM2VzZXR1cChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VkYXRhLCBvcHMtXFx1MDAzZWRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jPTMyMj1zdGF0aWMgaW50IG5mdF9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NoYWluX2ZpbHRlci5jLTM0MC1cXHRcXHRcXHRpZiAoISh0YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVEFCTEVfRl9ET1JNQU5UKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9jaGFpbl9maWx0ZXIuYzozNDE6XFx0XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhkZXZfbmV0KGRldiksIG9wcyk7XFxubmV0L25ldGZpbHRlci9uZnRfY2hhaW5fZmlsdGVyLmMtMzQyLVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTE2NTg9dm9pZCB4dF91bnJlZ2lzdGVyX3RhYmxlX3ByZV9leGl0KHN0cnVjdCBuZXQgKm5ldCwgdTggYWYsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTY2OS1cXHRcXHRcXHRpZiAodC1cXHUwMDNlb3BzKSAvKiBuYXQgdGFibGUgcmVnaXN0ZXJzIHdpdGggbmF0IGNvcmUsIHQtXFx1MDAzZW9wcyBpcyBOVUxMLiAqL1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxNjcwOlxcdFxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgdC1cXHUwMDNlb3BzLCBod2VpZ2h0MzIodC1cXHUwMDNldmFsaWRfaG9va3MpKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTY3MS1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjQ2OjUzLjMwMzEzNzM4OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjgzOTU4MjA4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0ZmlsdGVyJ3MgRnV6emluZyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggbWFwcGluZyBvdXQgdGhlIGtleSBjb21wb25lbnRzIGZvciBmdXp6aW5nIE5ldGZpbHRlciwgYW5kIGhlcmUncyBteSBicmVha2Rvd24uIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8ga2VlcCBteSBleWUgb24gYXJlIGNsZWFybHk6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBUaGVzZSBhcmUgdGhlIG5lcnZlIGNlbnRlcnMgb2YgaG9vayBtYW5hZ2VtZW50IGFuZCBOQVQgb3BlcmF0aW9ucywgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBhcmUgcG90ZW50aWFsIGFyZWFzIGZvciBleHBsb2l0YWJsZSBidWdzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoaW5ncy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zLiBUaGUgZXNzZW50aWFsIGNvbmZpZ3MgYXJlIGBORVRGSUxURVJgLCBvYnZpb3VzbHksIGJ1dCBhbHNvIHRoZSBhZHZhbmNlZCBvcHRpb25zIHVuZGVyIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfVEFCTEVTYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGNydWNpYWxseSwgYE5GX05BVGAuIFdpdGhvdXQgdGhlc2UsIG15IGZ1enppbmcgZWZmb3J0cyBhcmUgZ29pbmcgdG8gYmUgY3JpcHBsZWQuXG5cbkFscmlnaHQsIHRoZSBmaW5hbCBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSBwaWVjZXMgdG9nZXRoZXIuIExldCdzIHNlZS4uLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZSwgdGhhdCdzIGEgbm8tYnJhaW5lciBnaXZlbiB0aGUgZnVuY3Rpb25zIGFuZCBjb25maWdzLiBUaGUgYFJlYXNvbmluZ2AgbmVlZHMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiBmb3IgdGhlIHZlcmRpY3QsIHdoaWNoIEkndmUgYWxyZWFkeSBpbnRlcm5hbGx5IHZlcmlmaWVkLiBUaGVuLCBmb3IgdGhlIGVuYWJsaW5nIGNvbmZpZ3MsIEknbGwgbmVlZCBhbiBhcnJheSBvZiBzdHJpbmdzLCBidXQgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4gRmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5IGhhcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBuYW1lcyBJIGlkZW50aWZpZWQgZWFybGllci5cblxuV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIGFjY291bnRlZCBmb3IsIGl0J3MgdGltZSB0byB0cmlnZ2VyIHRoYXQgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk0NCwiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTU6NDEuNjk4OTYwOTg0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5OTY0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mbmxfaG9va19kdW1wXCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9uYXRcIixcbiAgICBcIm5mbmxfaG9va19nZXRcIixcbiAgICBcIm5mX25hdF9yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfbmF0X3VucmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX3JlZ2lzdGVyX25ldF9ob29rXCIsXG4gICAgXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBudW1iZXIgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGFuZCBlbnN1cmUgY29uc2lzdGVuY3kgZHVyaW5nIG5ldGxpbmsgZHVtcHMgb2YgbmV0ZmlsdGVyIGJhc2UgaG9va3MgYW5kIE5BVCBob29rcyB2aWEgbmZuZXRsaW5rX2hvb2suIEl0IGFsdGVycyBsb2NrbGVzcyBpdGVyYXRpb24sIHBhZ2luYXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgZHVtcCBjYWxsYmFja3MsIHdoaWNoIGlzIHVzZXItcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfSE9PS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZ2V0XCIsXG4gICAgXCJuZl9uYXRfcmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX25hdF91bnJlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9yZWdpc3Rlcl9uZXRfaG9va1wiLFxuICAgIFwibmZfdW5yZWdpc3Rlcl9uZXRfaG9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgbnVtYmVyIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGR1cmluZyBuZXRsaW5rIGR1bXBzIG9mIG5ldGZpbHRlciBiYXNlIGhvb2tzIGFuZCBOQVQgaG9va3MgdmlhIG5mbmV0bGlua19ob29rLiBJdCBhbHRlcnMgbG9ja2xlc3MgaXRlcmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgYWNyb3NzIGR1bXAgY2FsbGJhY2tzLCB3aGljaCBpcyB1c2VyLXJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjU1OjQxLjc3Njk2MzE3MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MjI0MTEwMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTU6NDEuNzc3NDIzNTMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI3MjIzNjQ1NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwOTMxNzM5ZGY5ZWM2MTgzZGEwNmZiYTk3ODJhMjU0MmJjNDkzMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTozNzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbkBAIC0zMyw1ICszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KVxuIFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xuICNlbmRpZlxuK1x0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XG4rXHR1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7XG4gfTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5pbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5AQCAtMzg2LDYgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxuICNlbmRpZlxuIH1cbiBcbitzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4rXG4rXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxuK1x0XHQ7XG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuK31cbitcbiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxuIHtcbkBAIC00MjgsNiArNDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcbiBcbiBcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XG4gXHR9XG5AQCAtNTA2LDYgKzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRuZXRfZGVjX2VncmVzc19xdWV1ZSgpO1xuICNlbmRpZlxuIFx0XHRuZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OQ0UoMSwgXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXCIsIHBmLCByZWctXHUwMDNlaG9va251bSk7XG4gXHR9XG5AQCAtNzg0LDYgKzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiAjZW5kaWZcbitcdG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcbitcdG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbkBAIC0xMTYwLDYgKzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuK1xuK1x0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcbitcdFx0O1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIm5hdC1mb2xsb3ctbWFzdGVyXCIsXG4gXHQuZXhwZWN0Zm5cdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXG5AQCAtMTI0NSw4ICsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHR9XG4gXG4gXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4tXHRpZiAocmV0ID09IDApXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzKys7XG4rXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTI4NCw2ICsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdFx0Z290byB1bmxvY2s7XG4gXHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xuIFx0bmZfaG9va19lbnRyaWVzX2RlbGV0ZV9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuK1x0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFxuIFx0aWYgKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgPT0gMCkge1xuIFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4zMTAxM2MzMjEwOTk2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC01NCw3ICs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7XG4gXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xuLVx0dW5zaWduZWQgbG9uZyBoZWFkdjtcbiBcdHU4IGhvb2s7XG4gfTtcbiBcbkBAIC0zMzgsMjcgKzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi1cdFx0XHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiB7XG4gXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbitcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cdTAwM2VkYXRhO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbi1cdGludCBpLCBlcnI7XG4rXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMV07XG4rXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xuK1x0aW50IGVyciA9IDA7XG4gXG4rXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxKTtcbitcbitcdGUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiBcdGlmICghZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4tXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxuLVx0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksIHNlcSk7XG4rXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbitcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4rXHRcdFx0XHRcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXG4rXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0YnJlYWs7XG4rXG4gXHR9XG4tXHRyZXR1cm4gMDtcbitcbitcdGlmICghZXJyKSB7XG4rXHRcdGkgPSAwO1xuK1x0fVxuK1x0Y2ItXHUwMDNlYXJnc1sxXSA9IGk7XG4rXG4rXHRpZiAoY2ItXHUwMDNlYXJnc1syXSBcdTAwMjZcdTAwMjYgYmFzZV9zZXEgIT0gY2ItXHUwMDNlYXJnc1syXSkge1xuK1x0XHRjYi1cdTAwM2VzZXErKztcbitcdFx0ZXJyID0gLUVJTlRSO1xuK1x0fVxuK1x0Y2ItXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG5AQCAtMzczLDM1ICszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4gXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMF07XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRjYi1cdTAwM2VzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcbiBcbiBcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVx1MDAzZWhvb2ssIG5ldCwgY3R4LVx1MDAzZWRldm5hbWUpO1xuLVx0aWYgKCFlKVxuK1x0aWYgKCFlIHx8IElTX0VSUihlKSlcbiBcdFx0Z290byBkb25lO1xuIFxuLVx0aWYgKElTX0VSUihlKSkge1xuLVx0XHRjYi1cdTAwM2VzZXErKztcbi1cdFx0Z290byBkb25lO1xuLVx0fVxuLVxuLVx0aWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LVx1MDAzZWhlYWR2IHx8IGkgXHUwMDNlPSBlLVx1MDAzZW51bV9ob29rX2VudHJpZXMpXG4tXHRcdGNiLVx1MDAzZXNlcSsrO1xuLVxuIFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbiBcdGZvciAoOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xuLVx0XHRpZiAob3BzW2ldLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LFxuLVx0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXG4tXHRcdFx0XHRcdFx0IG9wc1tpXS1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuK1x0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xuK1xuK1x0XHRpZiAoY3VyLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4rXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xuK1x0XHRlbHNlIHtcbitcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxuK1x0XHRcdFx0XHRcdCBjdXItXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiBcdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4rXHRcdH1cbiBcdFx0aWYgKGVycilcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBkb25lOlxuLVx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcbitcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4rXHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbkBAIC00NDIsMTAgKzQ1OCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHN0cnNjcHkoY3R4LVx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXHUwMDNlZGV2bmFtZSkpO1xuLVx0Y3R4LVx1MDAzZWhlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDtcbiBcdGN0eC1cdTAwM2Vob29rID0gaG9va251bTtcbi1cbi1cdGNiLVx1MDAzZXNlcSA9IDE7XG4gXHRjYi1cdTAwM2VkYXRhID0gY3R4O1xuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NTo0MS43Nzc0MjQ0OTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2NjY5NDM2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBLTVNBTi4gTXkgaW5pdGlhbCByZWFkIHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgc2VxdWVuY2UgbnVtYmVyIG1hbmFnZW1lbnQsIHdoaWNoICpjb3VsZCogaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB3ZSdyZSBub3QgY2FyZWZ1bC4gTGV0J3MgYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZS5cblxuRmlyc3QsIEkgc2VlIGFkZGl0aW9ucyB0byBgbmV0bnNfbmZgIGluIGBuZXRmaWx0ZXIuaGA6IGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYC4gVGhlc2UgbG9vayBsaWtlIHNlcXVlbmNlIGNvdW50ZXJzLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZXMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBXZSBuZWVkIHRvIGZvbGxvdyB3aGVyZSB0aGV5IGFyZSBpbml0aWFsaXplZCwgcmVhZCwgYW5kIHdyaXR0ZW4uXG5cbmBjb3JlLmNgIGhhcyBgYnVtcF9ob29rX2Jhc2Vfc2VxYCwgYSBmdW5jdGlvbiB0byBpbmNyZW1lbnQgdGhlIGhvb2sgc2VxdWVuY2UuIEkgc2VlIGl0IHVzZXMgYFJFQURfT05DRWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAsIHdoaWNoIGlzIGdvb2Qg4oCTIGhpbnRpbmcgYXQgY29uY3VycmVudCBhY2Nlc3MuIFRoZSBpbml0aWFsaXphdGlvbiBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCBsb29rcyBzYWZlLCBzZXR0aW5nIGJvdGggYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIHRvIDEuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIHNob3VsZCBtaXRpZ2F0ZSBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZCByaXNrcy4gVGhlIGNhbGxzIHRvIGBidW1wX2hvb2tfYmFzZV9zZXFgIG9uIGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBtYWtlIHNlbnNlOyBrZWVwIHRob3NlIHZhbHVlcyB1cGRhdGVkLlxuXG5gbmZfbmF0X2NvcmUuY2AgaW50cm9kdWNlcyBhIHNpbWlsYXIgYGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXFgIGZvciBOQVQgaG9va3MsIHdpdGggdGhlIHNhbWUgaW5pdGlhbGl6YXRpb24gYW5kIGluY3JlbWVudCBwYXR0ZXJuLiBTdGFuZGFyZCBzdHVmZi5cblxuTm93LCBgbmZuZXRsaW5rX2hvb2suY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgY2hhbmdlcyBpbiBgbmZubF9kdW1wX2hvb2tfZGF0YWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgcmVtb3ZhbCBvZiBgaGVhZHZgIGluIGBuZm5sX2R1bXBfaG9va19kYXRhYCBpcyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuIFRoZSB1cGRhdGUgdG8gdGFrZSBgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiYCBpbiBgbmZubF9ob29rX2R1bXBfbmF0YCBhbmQgaXRzIHVzYWdlIG9mIGBjYi1cdTAwM2VhcmdzYCBmb3IgaXRlcmF0aW5nIHRocm91Z2ggTkFUIGhvb2tzIGFuZCBjaGVja2luZyBjb25zaXN0ZW5jeSAoYGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl1gKSBpcyBhIGNydWNpYWwgYXJlYS4gV2UncmUgY2hlY2tpbmcgZm9yIHZlcnNpb25pbmcsIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBhbmQgaXQncyBuaWNlIHRoYXQgY29uc2lzdGVuY3kgY2hlY2tzIGFyZSBpbiBwbGFjZS4gVGhlIGZhY3QgdGhhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGxvYWRlZCB3aXRoIGBzbXBfbG9hZF9hY3F1aXJlYCBhbmQgdGhlbiBjaGVja2VkIGZvciBjb25zaXN0ZW5jeSB3aXRoaW4gdGhhdCBzYW1lIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUga2V5LiBJIGFsc28gc2VlIHRoYXQgYG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudGAgaXMgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBpZiBgbmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwYC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgaW1wbGllcyB0aGF0IHRoZXJlIGlzIGEgcG9zc2libGUgc2NlbmFyaW8gd2hlcmUgYSBjb25zaXN0ZW50IGR1bXAgb3BlcmF0aW9uIGNhbiBiZSBza2lwcGVkLiBJdCdzIGltcGVyYXRpdmUgdGhhdCB0aGUgY29kZSBwYXRoIGFuZCBsb2dpYyBmb3IgdGhpcyBiZSBpbnNwZWN0ZWQuXG5cbkluIGBuZm5sX2hvb2tfZHVtcGAsIEkgc2VlIGBjYi1cdTAwM2VzZXFgIGlzIGxvYWRlZCB3aXRoIHRoZSBob29rIHNlcXVlbmNlLiBJdCdzIGEgbmljZSBkZXNpZ24gdGhhdCB2ZXJzaW9uaW5nIGFuZCBjb25zaXN0ZW5jeSBhcmUgaW4gcGxhY2UuIEhvd2V2ZXIsIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGBpZiAobmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwKWAgbWVyaXRzIGV4dHJhIGF0dGVudGlvbjogd2h5IGlzIHRoZSBjb25zaXN0ZW5jeSBjaGVjayBvbmx5IHBlcmZvcm1lZCB3aGVuIHRoZSBuZXRsaW5rIHNvY2tldCBidWZmZXIgbGVuZ3RoIGlzIG5vdCB6ZXJvP1xuXG5UaGUgcmVtb3ZhbCBvZiBgY3R4LVx1MDAzZWhlYWR2YCBhbmQgYGNiLVx1MDAzZXNlcSA9IDFgIGluIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAgaXMgc29tZXRoaW5nIHRvIG5vdGUuIEkgd2FudCB0byBjaGVjayB0aGF0IGBoZWFkdmAgaXNuJ3QgdXNlZCBlbHNld2hlcmUuXG5cbkkgdGhpbmsgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIE5vdyBsZXQncyBjYXJlZnVsbHkgcmV2aWV3IGBuZm5sX2hvb2tfZHVtcF9vbmVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhlIHVzZSBvZiBzZXF1ZW5jZSBudW1iZXJzIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIE5BVC1zcGVjaWZpYyBzZXF1ZW5jZSBudW1iZXJzIHBvaW50IHRvd2FyZCBhIGdvb2QgZWZmb3J0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gR2l2ZW4gdGhlIGluaXRpYWxpemF0aW9uLCBhbmQgY2hlY2tzIGZvciBpbmNvbnNpc3RlbmN5IGFuZCBjb25kaXRpb25hbCBgbmxza2ItXHUwMDNlbGVuYCBjb25zaXN0ZW5jeSBjaGVja3MsIEkgYW0gbm90IHNlZWluZyBvYnZpb3VzIGlzc3Vlcy4gQnV0IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29kZSBwYXRocyBhbmQgbG9naWMgd2l0aCB0aGUgY29uZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2sgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NjowMC40NDQzNzExNDRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODIyOTE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZubF9ob29rX2R1bXBfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0xNTg9c3RhdGljIGludCBuZm5sX2hvb2tfcHV0X25mdF9mdF9pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjE5MDpzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTE5MS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTMzOT1zdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVxcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjM2MTpcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYyLVxcdFxcdFxcdFxcdFxcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQwOS1cXHRcXHRlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NDEwOlxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NjowMS45MjY2NzU4NTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyNDE3MTU2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSGVhcnQgb2YgdGhlIE1hdHRlcjogTkZORVRMSU5LIEhvb2sgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAxODAgdG8gMjUwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIG9mIGhvb2tpbmcgbmV0ZmlsdGVyIGZ1bmN0aW9ucyBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2luZyBzeXN0ZW0gaGFwcGVucywgb3IgbWF5YmUgaXQgZGVhbHMgd2l0aCB0aGUgcmVnaXN0cmF0aW9uIG9yIGRlcmVnaXN0cmF0aW9uIG9mIG5ldGZpbHRlciBob29rcy4gSSBzdXNwZWN0IGl0IGhvbGRzIHRoZSBjb3JlIGxvZ2ljIGZvciBlaXRoZXIgc2V0dGluZyB1cCBvciB0ZWFyaW5nIGRvd24gdGhlIG5ldGxpbmsgY29tbXVuaWNhdGlvbiBwYXRocyBmb3IgcGFja2V0IGluc3BlY3Rpb24gYW5kIG1hbmlwdWxhdGlvbi4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYWN0dWFsbHkgcmVjZWl2ZSBhbmQgcHJvY2VzcyB0aGUgZGF0YSBzZW50IHRocm91Z2ggdGhlc2UgaG9va3MuIEl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgZm9yIGFueSByb2J1c3QgbmV0ZmlsdGVyIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZW5jb3VudGVyIHNvbWUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gYW5kIHBlcmhhcHMgc29tZSBpbnRlcmVzdGluZyBzcGlubG9jayB1c2FnZSBmb3IgY29uY3VycmVuY3kgbWFuYWdlbWVudC4gSSB3aWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBzZWUgaG93IHRoZXkgZGVhbCB3aXRoIGZhaWx1cmUgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTY6MTkuMTY4Mzk3OTY2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBmdC1cXHUwMDNlbmFtZSwgZnQtXFx1MDAzZXRhYmxlLVxcdTAwM2VmYW1pbHkpO1xcbiAxODE6XFx0XFx0aWYgKHJldCkge1xcbiAxODI6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKG5sc2tiLCBuZXN0KTtcXG4gMTgzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4NDpcXHRcXHR9XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdG5sYV9uZXN0X2VuZChubHNrYiwgbmVzdCk7XFxuIDE4NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTg4OlxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbiAxOTE6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcXG4gMTkyOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgcHJpb3JpdHksXFxuIDE5MzpcXHRcXHRcXHRcXHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxcbiAxOTQ6XFx0e1xcbiAxOTU6XFx0XFx0dTE2IGV2ZW50ID0gbmZubF9tc2dfdHlwZShORk5MX1NVQlNZU19IT09LLCBORk5MX01TR19IT09LX0dFVCk7XFxuIDE5NjpcXHRcXHR1bnNpZ25lZCBpbnQgcG9ydGlkID0gTkVUTElOS19DQihubHNrYikucG9ydGlkO1xcbiAxOTc6XFx0XFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuIDE5ODpcXHRcXHRpbnQgcmV0ID0gLUVNU0dTSVpFO1xcbiAxOTk6XFx0XFx0dTMyIGhvb2tudW07XFxuIDIwMDpcXHQjaWZkZWYgQ09ORklHX0tBTExTWU1TXFxuIDIwMTpcXHRcXHRjaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dO1xcbiAyMDI6XFx0XFx0Y2hhciAqbW9kdWxlX25hbWU7XFxuIDIwMzpcXHQjZW5kaWZcXG4gMjA0OlxcdFxcdG5saCA9IG5mbmxfbXNnX3B1dChubHNrYiwgcG9ydGlkLCBzZXEsIGV2ZW50LFxcbiAyMDU6XFx0XFx0XFx0XFx0ICAgTkxNX0ZfTVVMVEksIGZhbWlseSwgTkZORVRMSU5LX1YwLCAwKTtcXG4gMjA2OlxcdFxcdGlmICghbmxoKVxcbiAyMDc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDIwODpcXHRcXG4gMjA5OlxcdCNpZmRlZiBDT05GSUdfS0FMTFNZTVNcXG4gMjEwOlxcdFxcdHJldCA9IHNucHJpbnRmKHN5bSwgc2l6ZW9mKHN5bSksIFxcXCIlcHNcXFwiLCBvcHMtXFx1MDAzZWhvb2spO1xcbiAyMTE6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSBzaXplb2Yoc3ltKSkge1xcbiAyMTI6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMjEzOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMTQ6XFx0XFx0fVxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRtb2R1bGVfbmFtZSA9IHN0cnN0cihzeW0sIFxcXCIgW1xcXCIpO1xcbiAyMTc6XFx0XFx0aWYgKG1vZHVsZV9uYW1lKSB7XFxuIDIxODpcXHRcXHRcXHRjaGFyICplbmQ7XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdFxcdCptb2R1bGVfbmFtZSA9ICdcXFxcMCc7XFxuIDIyMTpcXHRcXHRcXHRtb2R1bGVfbmFtZSArPSAyO1xcbiAyMjI6XFx0XFx0XFx0ZW5kID0gc3RyY2hyKG1vZHVsZV9uYW1lLCAnXScpO1xcbiAyMjM6XFx0XFx0XFx0aWYgKGVuZCkge1xcbiAyMjQ6XFx0XFx0XFx0XFx0KmVuZCA9IDA7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdFxcdFxcdFxcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG5sc2tiLCBORk5MQV9IT09LX01PRFVMRV9OQU1FLCBtb2R1bGVfbmFtZSk7XFxuIDIyNzpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbiAyMjg6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDIyOTpcXHRcXHRcXHR9XFxuIDIzMDpcXHRcXHR9XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG5sc2tiLCBORk5MQV9IT09LX0ZVTkNUSU9OX05BTUUsIHN5bSk7XFxuIDIzMzpcXHRcXHRpZiAocmV0KVxcbiAyMzQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDIzNTpcXHQjZW5kaWZcXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0aWYgKG9wcy1cXHUwMDNlcGYgPT0gTkZQUk9UT19JTkVUIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlaG9va251bSA9PSBORl9JTkVUX0lOR1JFU1MpXFxuIDIzODpcXHRcXHRcXHRob29rbnVtID0gTkZfTkVUREVWX0lOR1JFU1M7XFxuIDIzOTpcXHRcXHRlbHNlXFxuIDI0MDpcXHRcXHRcXHRob29rbnVtID0gb3BzLVxcdTAwM2Vob29rbnVtO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfSE9PS05VTSwgaHRvbmwoaG9va251bSkpO1xcbiAyNDM6XFx0XFx0aWYgKHJldClcXG4gMjQ0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfUFJJT1JJVFksIGh0b25sKHByaW9yaXR5KSk7XFxuIDI0NzpcXHRcXHRpZiAocmV0KVxcbiAyNDg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdHN3aXRjaCAob3BzLVxcdTAwM2Vob29rX29wc190eXBlKSB7XFxuIDI1MTpcXHRcXHRjYXNlIE5GX0hPT0tfT1BfTkZfVEFCTEVTOlxcbiAyNTI6XFx0XFx0XFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfY2hhaW5faW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cXHUwMDNlcHJpdik7XFxuIDI1MzpcXHRcXHRcXHRicmVhaztcXG4gMjU0OlxcdFxcdGNhc2UgTkZfSE9PS19PUF9CUEY6XFxuIDI1NTpcXHRcXHRcXHRyZXQgPSBuZm5sX2hvb2tfcHV0X2JwZl9wcm9nX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXFx1MDAzZXByaXYpO1xcbiAyNTY6XFx0XFx0XFx0YnJlYWs7XFxuIDI1NzpcXHRcXHRjYXNlIE5GX0hPT0tfT1BfTkZUX0ZUOlxcbiAyNTg6XFx0XFx0XFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfZnRfaW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cXHUwMDNlcHJpdik7XFxuIDI1OTpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTY6MTkuMTY4NDg4OTM2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDU0NTAzMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIG5mbmV0bGlua19ob29rLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgYG5mbmxfaG9va19kdW1wYCwgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZSBzdGFydCBhbmQgZG9uZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgbG9naWMgc3Vycm91bmRpbmcgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHRoZXNlIG5ldGxpbmsgaG9va3MuIFVuZGVyc3RhbmRpbmcgaG93IGR1bXBpbmcgaXMgaW5pdGlhdGVkLCBob3cgZGF0YSBpcyBhc3NlbWJsZWQgYW5kIHNlbnQsIGFuZCBob3cgdGhlIHByb2Nlc3MgaXMgZmluYWxpemVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBhbnRpY2lwYXRlIHBvdGVudGlhbCBudWFuY2VzIGluIHJlc291cmNlIGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgc3luY2hyb25pemF0aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdpdGhpbiB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoZSBob29rIGZyYW1ld29yayB0cnVseSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTY6NTkuMjIyOTk4NTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFxuIDM4MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcXG4gMzg1OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiAzODY6XFx0e1xcbiAzODc6XFx0XFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuIDM4ODpcXHRcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXFx1MDAzZWRhdGE7XFxuIDM4OTpcXHRcXHRpbnQgZXJyLCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbiAzOTA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXFx1MDAzZXNrKTtcXG4gMzkxOlxcdFxcdHN0cnVjdCBuZl9ob29rX29wcyAqIGNvbnN0ICpvcHM7XFxuIDM5MjpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xcbiAzOTM6XFx0XFx0dW5zaWduZWQgaW50IGkgPSBjYi1cXHUwMDNlYXJnc1swXTtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzOTY6XFx0XFx0Y2ItXFx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVxcdTAwM2Vob29rLCBuZXQsIGN0eC1cXHUwMDNlZGV2bmFtZSk7XFxuIDM5OTpcXHRcXHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxcbiA0MDA6XFx0XFx0XFx0Z290byBkb25lO1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRcXHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xcbiA0MDM6XFx0XFxuIDQwNDpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbiA0MDU6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcXG4gNDA2OlxcdFxcbiA0MDc6XFx0XFx0XFx0aWYgKGN1ci1cXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcXG4gNDA4OlxcdFxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcXG4gNDA5OlxcdFxcdFxcdGVsc2Uge1xcbiA0MTA6XFx0XFx0XFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcXG4gNDExOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjdXItXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksXFxuIDQxMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4gNDEzOlxcdFxcdFxcdH1cXG4gNDE0OlxcdFxcdFxcdGlmIChlcnIpXFxuIDQxNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDE2OlxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0ZG9uZTpcXG4gNDE5OlxcdFxcdGlmIChubHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgMClcXG4gNDIwOlxcdFxcdFxcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XFxuIDQyMTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNDIyOlxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gaTtcXG4gNDIzOlxcdFxcdHJldHVybiBubHNrYi1cXHUwMDNlbGVuO1xcbiA0MjQ6XFx0fVxcbiA0MjU6XFx0XFxuIDQyNjpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gNDI3OlxcdHtcXG4gNDI4OlxcdFxcdGNvbnN0IHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbiA0Mjk6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpubGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4gNDMwOlxcdFxcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xcbiA0MzE6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXFx1MDAzZXNrYi1cXHUwMDNlc2spO1xcbiA0MzI6XFx0XFx0dTggZmFtaWx5ID0gbmZtc2ctXFx1MDAzZW5mZ2VuX2ZhbWlseTtcXG4gNDMzOlxcdFxcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcXFwiXFxcIjtcXG4gNDM0OlxcdFxcdGNvbnN0IHZvaWQgKmhlYWQ7XFxuIDQzNTpcXHRcXHR1MzIgaG9va251bTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aG9va251bSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGFbTkZOTEFfSE9PS19IT09LTlVNXSkpO1xcbiA0Mzg6XFx0XFx0aWYgKGhvb2tudW0gXFx1MDAzZSAyNTUpXFxuIDQzOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQwOlxcdFxcbiA0NDE6XFx0XFx0aWYgKGZhbWlseSA9PSBORlBST1RPX05FVERFVikge1xcbiA0NDI6XFx0XFx0XFx0aWYgKCFubGFbTkZOTEFfSE9PS19ERVZdKVxcbiA0NDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdFxcdG5sYV9zdHJzY3B5KG5hbWUsIG5sYVtORk5MQV9IT09LX0RFVl0sIHNpemVvZihuYW1lKSk7XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNDQ5OlxcdFxcdC8qIE5vdCBkZXJlZmVyZW5jZWQ7IGZvciBjb25zaXN0ZW5jeSBjaGVjayBvbmx5ICovXFxuIDQ1MDpcXHRcXHRoZWFkID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGhvb2tudW0sIG5ldCwgbmFtZSk7XFxuIDQ1MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0aWYgKGhlYWQgXFx1MDAyNlxcdTAwMjYgSVNfRVJSKGhlYWQpKVxcbiA0NTQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoaGVhZCk7XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdFxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbiA0NTc6XFx0XFx0aWYgKCFjdHgpXFxuIDQ1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0c3Ryc2NweShjdHgtXFx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXFx1MDAzZWRldm5hbWUpKTtcXG4gNDYxOlxcdFxcdGN0eC1cXHUwMDNlaG9vayA9IGhvb2tudW07XFxuIDQ2MjpcXHRcXHRjYi1cXHUwMDNlZGF0YSA9IGN0eDtcXG4gNDYzOlxcdFxcbiA0NjQ6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2NTpcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RvcChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDQ2ODpcXHR7XFxuIDQ2OTpcXHRcXHRrZnJlZShjYi1cXHUwMDNlZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjU2OjU5LjIyMzExNjU5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Nzc3OTMxNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFwcGxpY2FiaWxpdHkgQXNzZXNzbWVudCBmb3IgTmV0ZmlsdGVyIEhvb2sgRHVtcCBDb25zaXN0ZW5jeSBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIGFkZHJlc3NlcyBhIGNvbnNpc3RlbmN5IGlzc3VlIGluIG5ldGZpbHRlciBob29rIGR1bXBpbmcgd2l0aGluIGBuZm5ldGxpbmtfaG9vay5jYCwgaXNuJ3QgYSBjYW5kaWRhdGUgZm9yIEtNU0FOLiBUaGUgY29yZSBwcm9ibGVtIHRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIHNvbHZlIGlzIHRoYXQgdGhlIGV4aXN0aW5nIG1ldGhvZCBvZiBkZXRlY3RpbmcgY2hhbmdlcyBpbiB0aGUgaG9vayB0YWJsZSByZWxpZWQgb24gY2hlY2tpbmcgYGUgIT0gY3R4LVx1MDAzZWhlYWR2YC4gVGhpcyB3YXMgZmxhd2VkIGJlY2F1c2UgcmVhbGxvY2F0aW9ucywgbW9kaWZpY2F0aW9ucywgb3IgY2hhbmdlcyB0byBOQVQgaG9vayBlbnRyaWVzIHdlcmVuJ3QgYWx3YXlzIGRldGVjdGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbnQgbmV0bGluayBkdW1wcy5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIHNlcXVlbmNlIG51bWJlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgd2l0aGluIHRoZSBgbmV0bnNfbmZgIHN0cnVjdHVyZS4gV2hlbiBob29rcyBhcmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQsIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgYXJlIGluY3JlbWVudGVkIHVzaW5nIGBidW1wX2hvb2tfYmFzZV9zZXFgIGFuZCBgYnVtcF9uYXRfaG9va19iYXNlX3NlcWAuIER1cmluZyBuZXRsaW5rIGR1bXBzIChgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCksIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgYXJlIHN0b3JlZCBhbmQgY2hlY2tlZCB1c2luZyBgY2ItXHUwMDNlc2VxYCBhbmQgYGNiLVx1MDAzZWFyZ3NbMl1gLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIExldCdzIHNlZS5cblxuKiAgICoqU3RydWN0dXJlIEluaXRpYWxpemF0aW9uIFx1MDAyNiBVc2VyLVNwYWNlIEV4cG9zdXJlOioqIEZpcnN0LCBkb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQsIG9yIHdoZXJlIHN0cnVjdHVyZSBwYWRkaW5nIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkPyBOby4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyBidWlsdCBhcmUgdW5jaGFuZ2VkLCBhbmQgdGhlIHN0cnVjdHVyZXMgaW52b2x2ZWQgKGBjdHhgLCBgbmV0bnNfbmZgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKHVzaW5nIGBremFsbG9jYCBvciBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCkuIGBuZXRuc19uZmAgaXMgcGFydCBvZiBgc3RydWN0IG5ldGAsIHdoaWNoIGlzIHplcm9lZCBvbiBhbGxvY2F0aW9uLCBhbmQgYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxuXG4qICAgKipDb25kaXRpb25hbCBMb2dpYyBcdTAwMjYgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBOby4gSSdtIHNlZWluZyBhbGwgdmFyaWFibGVzLCBsaWtlIGBiYXNlX3NlcWAsIGBpYCwgYGVycmAsIGFuZCBgY3VyYCwgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgY2ItXHUwMDNlYXJnc2AgYXJyYXkgaXMgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgd2hlbiB0aGUgY2FsbGJhY2sgaXMgc3RhcnRlZCwgYW5kIHRoZW4gdGhlIHJlbGV2YW50IGZpZWxkcyBhcmUgYXNzaWduZWQgdmFsdWVzLlxuXG4qICAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBEb2VzIHRoaXMgcGF0Y2ggYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBOby4gQWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgc2VlbSB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHkuXG5cbiogICAqKkJvdW5kcyBDaGVja3MgXHUwMDI2IE1lbW9yeSBBY2Nlc3M6KiogRmluYWxseSwgZG9lcyB0aGUgcGF0Y2ggYWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBObywgYmFzZWQgb24gd2hhdCBJIHNlZS5cblxuQWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGluY2x1ZGluZyBleGFtaW5pbmcgdGhlIHZhcmlhYmxlcyBpbiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLCBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCwgYW5kIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLCBpdCdzIGNsZWFyIHRoYXQgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gU3BlY2lmaWNhbGx5LCB0aGUgc2VxdWVuY2UgY291bnRlcnMgYXJlIGluaXRpYWxpemVkIHRvIGAxYCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YCwgYW5kIHRoZSBzdGFjayB2YXJpYWJsZXMgaW4gdGhlIGR1bXAgZnVuY3Rpb25zIGFyZSBhbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZWlyIHVzZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSB0eXBlcyBvZiBidWdzIHRoYXQgKmNvdWxkKiBiZSBwcmVzZW50IGFyZSBwcmltYXJpbHkgY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zIChLQ1NBTi9MT0NLREVQL2NvZGUgcmV2aWV3KSwgbG9naWMgZXJyb3JzIGluIHRoZSBuZXRsaW5rIGR1bXAgcmVzdGFydC9wYWdpbmF0aW9uIHByb2Nlc3MgKGZ1bmN0aW9uYWwgdGVzdGluZyksIG9yIHBvdGVudGlhbCBwb2ludGVyIGRlcmVmZXJlbmNpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHVuZGVyIFJDVSAoS0FTQU4pLiBCdXQgbm9uZSBvZiB0aGVzZSByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCBiZSBkZXRlY3RhYmxlICpvbmx5KiBieSBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIHNlcXVlbmNlIGNvdW50ZXJzIGZvciBuZXRmaWx0ZXIgaG9vayBuZXRsaW5rIGR1bXBzLiBBbGwgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgc2VxdWVuY2UgY291bnRlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcmVtYWluaW5nIGNvbmNlcm5zIGZhbGwgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOL0xPQ0tERVAvZnVuY3Rpb25hbCB0ZXN0aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBMZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjgsIk91dHB1dFRva2VucyI6MjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjU3OjQ5LjAwMTA1MTI4OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBuZXRsaW5rIGR1bXBpbmcgb2YgbmV0ZmlsdGVyIGhvb2tzIGJ5IHJlcGxhY2luZyBwb2ludGVyLWJhc2VkIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIHNlcXVlbmNlIGNvdW50ZXJzIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYHN0cnVjdCBuZXRuc19uZmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSBBbGwgYWRkZWQgZmllbGRzIGFuZCBsb2NhbCB2YXJpYWJsZXMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgYGJhc2Vfc2VxYCwgYGVycmAsIGBpYCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGBuZXRmaWx0ZXJfbmV0X2luaXRgIHNldHMgYmFzZSBzZXF1ZW5jZXMgdG8gMSwgYW5kIGR1bXAgY2FsbGJhY2tzIHByb3Blcmx5IGluaXRpYWxpemUgc3RhY2sgdmFyaWFibGVzIGFuZCBuZXRsaW5rIGNhbGxiYWNrIGFyZ3MpLlxcbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgc2xpY2VzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG4tIEFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBSQ1UgZGVyZWZlcmVuY2luZyBvciBob29rIGl0ZXJhdGlvbiBkdXJpbmcgY29uY3VycmVudCByZWdpc3RyYXRpb25zIGFyZSBsaWZldGltZS9jb25jdXJyZW5jeSBpc3N1ZXMgYWRkcmVzc2VkIGJ5IEtBU0FOL0xPQ0tERVAsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5ldGxpbmsgZHVtcGluZyBvZiBuZXRmaWx0ZXIgaG9va3MgYnkgcmVwbGFjaW5nIHBvaW50ZXItYmFzZWQgY29uc2lzdGVuY3kgY2hlY2tzIHdpdGggc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCBpbiBgc3RydWN0IG5ldG5zX25mYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tIEFsbCBhZGRlZCBmaWVsZHMgYW5kIGxvY2FsIHZhcmlhYmxlcyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgLCBgYmFzZV9zZXFgLCBgZXJyYCwgYGlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoYG5ldGZpbHRlcl9uZXRfaW5pdGAgc2V0cyBiYXNlIHNlcXVlbmNlcyB0byAxLCBhbmQgZHVtcCBjYWxsYmFja3MgcHJvcGVybHkgaW5pdGlhbGl6ZSBzdGFjayB2YXJpYWJsZXMgYW5kIG5ldGxpbmsgY2FsbGJhY2sgYXJncykuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFJDVSBkZXJlZmVyZW5jaW5nIG9yIGhvb2sgaXRlcmF0aW9uIGR1cmluZyBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbnMgYXJlIGxpZmV0aW1lL2NvbmN1cnJlbmN5IGlzc3VlcyBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7nw9g[1] Phase: Succeeded StartedAt: 2026-08-27 21:58:00 +0000 UTC FinishedAt: 2026-08-27 21:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 21:58:00 +0000 UTC FinishedAt: 2026-08-27 21:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2] Phase: Succeeded StartedAt: 2026-08-27 21:58:00 +0000 UTC FinishedAt: 2026-08-28 01:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 21:58:00 +0000 UTC FinishedAt: 2026-08-28 01:51:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 21:58:00 +0000 UTC FinishedAt: 2026-08-27 21:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 21:58:00 +0000 UTC FinishedAt: 2026-08-27 21:58:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7nw9g/series-workflow7nw9g-convert-artifact-2169729980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 21:58:10 +0000 UTC FinishedAt: 2026-08-27 22:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 21:58:10 +0000 UTC FinishedAt: 2026-08-27 22:19:09 +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:*60101310-b3cd-4e9f-9a0b-b0bb40d385d8,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-workflow7nw9g/series-workflow7nw9g-convert-artifact-2169729980/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": "87546453-85c5-4bc9-b990-a100154fb20e", "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-workflow7nw9g/series-workflow7nw9g-build-action-219677930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 21:58:10 +0000 UTC FinishedAt: 2026-08-27 22:18: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:*60101310-b3cd-4e9f-9a0b-b0bb40d385d8,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-workflow7nw9g/series-workflow7nw9g-convert-artifact-2169729980/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": "87546453-85c5-4bc9-b990-a100154fb20e", "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-workflow7nw9g/series-workflow7nw9g-build-action-219677930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 22:19:09 +0000 UTC FinishedAt: 2026-08-27 22:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 22:19:09 +0000 UTC FinishedAt: 2026-08-27 22:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 22:19:09 +0000 UTC FinishedAt: 2026-08-27 22:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 22:19:09 +0000 UTC FinishedAt: 2026-08-27 22:19:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7nw9g/series-workflow7nw9g-convert-artifact-2832738555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 22:19:19 +0000 UTC FinishedAt: 2026-08-27 22:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 22:19:19 +0000 UTC FinishedAt: 2026-08-27 22:21:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87546453-85c5-4bc9-b990-a100154fb20e,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-workflow7nw9g/series-workflow7nw9g-build-action-219677930/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-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 22:21:35 +0000 UTC FinishedAt: 2026-08-27 22:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 22:21:35 +0000 UTC FinishedAt: 2026-08-27 22:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 22:21:35 +0000 UTC FinishedAt: 2026-08-27 22:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 22:21:35 +0000 UTC FinishedAt: 2026-08-27 22:41:30 +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:*60101310-b3cd-4e9f-9a0b-b0bb40d385d8,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-workflow7nw9g/series-workflow7nw9g-convert-artifact-2832738555/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": "9f94aa4b-9c94-4bae-b538-f04a5ffab81d", "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-workflow7nw9g/series-workflow7nw9g-build-action-320249119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 22:21:35 +0000 UTC FinishedAt: 2026-08-27 22:41:20 +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:*60101310-b3cd-4e9f-9a0b-b0bb40d385d8,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-workflow7nw9g/series-workflow7nw9g-convert-artifact-2832738555/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": "9f94aa4b-9c94-4bae-b538-f04a5ffab81d", "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-workflow7nw9g/series-workflow7nw9g-build-action-320249119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 22:41:30 +0000 UTC FinishedAt: 2026-08-27 22:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 22:41:30 +0000 UTC FinishedAt: 2026-08-27 22:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 22:41:30 +0000 UTC FinishedAt: 2026-08-27 22:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 22:41:30 +0000 UTC FinishedAt: 2026-08-27 22:43:39 +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:*9f94aa4b-9c94-4bae-b538-f04a5ffab81d,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-workflow7nw9g/series-workflow7nw9g-build-action-320249119/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-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 22:43:49 +0000 UTC FinishedAt: 2026-08-28 01:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 22:43:49 +0000 UTC FinishedAt: 2026-08-28 01:51:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*87546453-85c5-4bc9-b990-a100154fb20e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9f94aa4b-9c94-4bae-b538-f04a5ffab81d,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-workflow7nw9g/series-workflow7nw9g-build-action-219677930/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-workflow7nw9g/series-workflow7nw9g-build-action-320249119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 22:43:49 +0000 UTC FinishedAt: 2026-08-27 22:43:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 22:43:49 +0000 UTC FinishedAt: 2026-08-27 22:43:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7nw9g/series-workflow7nw9g-convert-artifact-2003001332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 22:43:49 +0000 UTC FinishedAt: 2026-08-27 22:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 22:43:49 +0000 UTC FinishedAt: 2026-08-27 22:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 22:43:49 +0000 UTC FinishedAt: 2026-08-27 22:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 22:43:59 +0000 UTC FinishedAt: 2026-08-28 01:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7nw9g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_ADVANCED","NF_TABLES","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_CONNTRACK","NF_NAT"],"series_id":"57793d8d-a2e1-40f3-aed9-097b32bcff66","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 22:43:59 +0000 UTC FinishedAt: 2026-08-28 01:51:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87546453-85c5-4bc9-b990-a100154fb20e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9f94aa4b-9c94-4bae-b538-f04a5ffab81d,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-workflow7nw9g/series-workflow7nw9g-build-action-219677930/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-workflow7nw9g/series-workflow7nw9g-build-action-320249119/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-workflow7nw9g/series-workflow7nw9g-convert-artifact-2003001332/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,}