Name: series-workflownqx5s Phase: Succeeded StartedAt: 2026-07-02 17:53:44 +0000 UTC FinishedAt: 2026-07-02 19:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[0] Phase: Succeeded StartedAt: 2026-07-02 17:53:44 +0000 UTC FinishedAt: 2026-07-02 18:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 17:53:44 +0000 UTC FinishedAt: 2026-07-02 18:19:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4d1ca70c-d658-4c6a-9b98-514e3e9be4e4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_init_nv_sysregs", "limit_nv_id_reg", "nvhcr_el2_visibility", "get_reg_fixed_bits", "fixup_nv_guest_exit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pbml0X252X3N5c3JlZ3MmIzM0OywKICAgICYjMzQ7bGltaXRfbnZfaWRfcmVnJiMzNDssCiAgICAmIzM0O252aGNyX2VsMl92aXNpYmlsaXR5JiMzNDssCiAgICAmIzM0O2dldF9yZWdfZml4ZWRfYml0cyYjMzQ7LAogICAgJiMzNDtmaXh1cF9udl9ndWVzdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDhkYTYyYTNjZWRiZjg4ZmYzZTY4YWFjOTdiZDFkMGJhOWE3ZGIwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTY6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmE0MjY4M2FmNzlmYjVkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtOTY4LDYgJiM0Mzs5NjgsNyBAQCBzdHJ1Y3QgYXJtNjRfZnRyX3JlZyAqZ2V0X2FybTY0X2Z0cl9yZWcodTMyIHN5c19pZCk7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnIwX292ZXJyaWRlO1xuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyMV9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyNF9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMF9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMV9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0emZyMF9vdmVycmlkZTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oXG5pbmRleCAzZjkyMzNiNWExMzA4MS4uZjZjZDg1MTA0Nzk0NzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcbkBAIC0yODcsMjEgJiM0MzsyODcsNiBAQFxuIFx0XHRcdFx0IEdFTk1BU0soMTksIDE4KSB8XHRcXFxuIFx0XHRcdFx0IEdFTk1BU0soMTUsIDApKVxuIFxuLS8qXG4tICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dFxuLSAqIGF0IHRoaXMgcG9pbnQgaW4gdGltZS4gSXQgZG9lc24mIzM5O3QgbWVhbiB0aGF0IHdlIGFjdHVhbGx5ICpoYW5kbGUqXG4tICogdGhlbSwgYnV0IHRoYXQgYXQgbGVhc3QgdGhvc2UgdGhhdCBhcmUgbm90IGFkdmVydGlzZWQgdG8gYSBndWVzdFxuLSAqIHdpbGwgYmUgUkVTMCBmb3IgdGhhdCBndWVzdC5cbi0gKi9cbi0jZGVmaW5lIF9fSENSWF9FTDJfTUFTS1x0XHQoQklUX1VMTCg2KSlcbi0jZGVmaW5lIF9fSENSWF9FTDJfbk1BU0tcdChHRU5NQVNLX1VMTCgyNCwgMTQpIHwgXFxcbi1cdFx0XHRcdCBHRU5NQVNLX1VMTCgxMSwgNykgIHwgXFxcbi1cdFx0XHRcdCBHRU5NQVNLX1VMTCg1LCAwKSlcbi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMFx0XHR+KF9fSENSWF9FTDJfbk1BU0sgfCBfX0hDUlhfRUwyX01BU0spXG4tI2RlZmluZSBfX0hDUlhfRUwyX1JFUzFcdFx0fihfX0hDUlhfRUwyX25NQVNLIHwgXFxcbi1cdFx0XHRcdCAgX19IQ1JYX0VMMl9NQVNLICB8IFxcXG4tXHRcdFx0XHQgIF9fSENSWF9FTDJfUkVTMClcbi1cbiAvKiBIeXAgUHJlZmV0Y2ggRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAoSFBGQVIvSERGQVIpICovXG4gI2RlZmluZSBIUEZBUl9NQVNLXHQoflVMKDB4ZikpXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDViZjNkN2UxZDkyYzc3Li5kNmY0MzJiMTU1OGY1ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG5AQCAtMjY2LDYgJiM0MzsyNjYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHZzZXJyb3Jfc3RhdGVfaXNfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICAgICAoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpIFx1MDAyNiBIQ1JYX0VMMl9UTUVBKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MihzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX25lc3RlZF9udjNfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGhhc192aGUoKSBcdTAwMjZcdTAwMjYga3ZtX2hhc19udjModmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNiBpc19uZXN0ZWRfY3R4dCh2Y3B1KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSBcdTAwMjYgSENSX0VMMl9OVikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpIFx1MDAyNiBIQ1JYX0VMMl9OVlRHRSkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogVGhlIGxheW91dCBvZiBTUFNSIGZvciBhbiBBQXJjaDMyIHN0YXRlIGlzIGRpZmZlcmVudCB3aGVuIG9ic2VydmVkIGZyb20gYW5cbiAgKiBBQXJjaDY0IFNQU1JfRUx4IG9yIGFuIEFBcmNoMzIgU1BTUl8qLiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgQUFyY2gzMlxuQEAgLTYxNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9pbmNyX3BjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgKi9cbiBzdGF0aWMgaW5saW5lIHU2NCB2Y3B1X3Nhbml0aXNlZF9jcHRyX2VsMihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dTY0IGNwdHIgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7XG4mIzQzO1x0dTY0IGNwdHIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7XG4gXG4gXHRpZiAoIXZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4gXHRcdGNwdHIgPSB0cmFuc2xhdGVfY3B0cl9lbDJfdG9fY3BhY3JfZWwxKGNwdHIpO1xuQEAgLTY4Niw2ICYjNDM7NzA2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X3NldF9oY3J4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdFx0aWYgKGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRJU0FSMV9FTDEsIExTNjQsIExTNjRfVikpXG4gXHRcdFx0dmNwdS1cdTAwM2VhcmNoLmhjcnhfZWwyIHw9IEhDUlhfRUwyX0VuQVNSO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBOVjMgaXMgYSBob3N0LXNwZWNpZmljIGV4dGVuc2lvbiwgYW5kIHdlIGFsd2F5cyB1c2UgaXRcbiYjNDM7XHRcdCAqIHdoZW4gcHJlc2VudCBhbmQgdGhhdCB0aGUgZ3Vlc3QgdXNlcyBOVi4gSXQgbWF5IGJlIGJlXG4mIzQzO1x0XHQgKiBoaWRkZW4gZnJvbSB0aGUgZ3Vlc3QgdGhvdWdoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2Y3B1X2hhc19udih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkge1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfTlZUR0U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBJZiB0aGUgZ3Vlc3QgaXMgTlYyLWNhcGFibGUsIHRoZW4gd2UgbmVlZCB0byBzZWVcbiYjNDM7XHRcdFx0ICogYWxsIHRoZSBUTEJJcywgYXMgY29uZmlndXJlZCBpbiBIQ1JfRUwyLlxuJiM0MztcdFx0XHQgKiBPdGhlcndpc2UsIHJlbGF4IHRoZSBUTEJJIHRyYXBzIHRvIG9ubHkgVEdFPTAuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIWt2bV9oYXNfbnYyKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gKEhDUlhfRUwyX05WblRUTEIgIHxcbiYjNDM7XHRcdFx0XHRcdFx0XHRIQ1JYX0VMMl9OVm5UVExCSVMpO1xuJiM0MztcdFx0fVxuIFx0fVxuIH1cbiAjZW5kaWYgLyogX19BUk02NF9LVk1fRU1VTEFURV9IX18gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi4yNjQ4YzhhNzE3YmEwNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNTQzLDYgJiM0Mzs1NDMsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcbiBcdE1EQ1JfRUwyLFx0LyogTW9uaXRvciBEZWJ1ZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChFTDIpICovXG4gXHRDTlRIQ1RMX0VMMixcdC8qIENvdW50ZXItdGltZXIgSHlwZXJ2aXNvciBDb250cm9sIHJlZ2lzdGVyICovXG4gXHRaQ1JfRUwyLFx0LyogU1ZFIENvbnRyb2wgUmVnaXN0ZXIgKEVMMikgKi9cbiYjNDM7XHRIQ1JfRUwyLFx0LyogSHlwZXJ2aXNvciBDb250cm9sIFJlZ2lzdGVyICovXG4gXG4gXHQvKiBBbnkgVk5DUi1jYXBhYmxlIHJlZyBnb2VzIGFmdGVyIHRoaXMgcG9pbnQgKi9cbiBcdE1BUktFUihfX1ZOQ1JfU1RBUlRfXyksXG5AQCAtNTcxLDcgJiM0Mzs1NzIsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcbiBcdFZOQ1IoVEZTUl9FTDEpLFx0LyogVGFnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAoRUwxKSAqL1xuIFx0Vk5DUihWUElEUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIFByb2Nlc3NvciBJRCBSZWdpc3RlciAqL1xuIFx0Vk5DUihWTVBJRFJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBNdWx0aXByb2Nlc3NvciBJRCBSZWdpc3RlciAqL1xuLVx0Vk5DUihIQ1JfRUwyKSxcdC8qIEh5cGVydmlzb3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqL1xuJiM0MztcdFZOQ1IoTlZIQ1JfRUwyKSwvKiBOViBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoSFNUUl9FTDIpLFx0LyogSHlwZXJ2aXNvciBTeXN0ZW0gVHJhcCBSZWdpc3RlciAqL1xuIFx0Vk5DUihWVFRCUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIFRhYmxlIEJhc2UgUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoVlRDUl9FTDIpLFx0LyogVmlydHVhbGl6YXRpb24gVHJhbnNsYXRpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5pbmRleCAxNDM2NmQzNWNlODJmMC4uOWU4YTQ5ZmE4YjYzOGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5AQCAtMTEsNyAmIzQzOzExLDcgQEBcbiAjZGVmaW5lIFZOQ1JfVlRDUl9FTDIgICAgICAgICAgIDB4MDQwXG4gI2RlZmluZSBWTkNSX1ZNUElEUl9FTDIgICAgICAgICAweDA1MFxuICNkZWZpbmUgVk5DUl9DTlRWT0ZGX0VMMiAgICAgICAgMHgwNjBcbi0jZGVmaW5lIFZOQ1JfSENSX0VMMiAgICAgICAgICAgIDB4MDc4XG4mIzQzOyNkZWZpbmUgVk5DUl9OVkhDUl9FTDIgICAgICAgICAgMHgwNzhcbiAjZGVmaW5lIFZOQ1JfSFNUUl9FTDIgICAgICAgICAgIDB4MDgwXG4gI2RlZmluZSBWTkNSX1ZQSURSX0VMMiAgICAgICAgICAweDA4OFxuICNkZWZpbmUgVk5DUl9UUElEUl9FTDIgICAgICAgICAgMHgwOTBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbmluZGV4IDlhMjJkZjBjNTEyMGYzLi4xNGZiZmE4ZTZiN2I1MCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5AQCAtNzg1LDYgJiM0Mzs3ODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9yYXpbXSA9IHtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnIwX292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyMl9vdmVycmlkZTtcbiYjNDM7c3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyNF9vdmVycmlkZTtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NHBmcjBfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRwZnIxX292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0emZyMF9vdmVycmlkZTtcbkBAIC04NTgsNyAmIzQzOzg1OSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX19mdHJfcmVnX2VudHJ5IHtcbiBcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSMl9FTDEsIGZ0cl9pZF9hYTY0bW1mcjIsXG4gXHRcdFx0ICAgICAgIFx1MDAyNmlkX2FhNjRtbWZyMl9vdmVycmlkZSksXG4gXHRBUk02NF9GVFJfUkVHKFNZU19JRF9BQTY0TU1GUjNfRUwxLCBmdHJfaWRfYWE2NG1tZnIzKSxcbi1cdEFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQpLFxuJiM0MztcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQsXG4mIzQzO1x0XHRcdCAgICAgICBcdTAwMjZpZF9hYTY0bW1mcjRfb3ZlcnJpZGUpLFxuIFxuIFx0LyogT3AxID0gMCwgQ1JuID0gMTAsIENSbSA9IDQgKi9cbiBcdEFSTTY0X0ZUUl9SRUcoU1lTX01QQU1JRFJfRUwxLCBmdHJfbXBhbWlkciksXG5AQCAtMjYyMCw2ICYjNDM7MjYyMiwyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbiBcdFx0XHR7IC8qIFNlbnRpbmVsICovIH1cbiBcdFx0fSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRlc2MgPSBcJiMzNDtGRUFUX05WMnAxXCYjMzQ7LFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTlYyUDEsXG4mIzQzO1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcbiYjNDM7XHRcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXG4mIzQzO1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyUDEpXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0ZFQVRfTlYzXCYjMzQ7LFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTlYzLFxuJiM0MztcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuJiM0MztcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMylcbiYjNDM7XHR9LFxuIFx0e1xuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU18zMkJJVF9FTDBfRE9fTk9UX1VTRSxcbiBcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oIGIvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXG5pbmRleCBkNGM3ZDQ1YWU2YmM4My4uZDE1YzJjYjFiMGYyOGEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2ltYWdlLXZhcnMuaFxuQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIFBJX0VYUE9SVF9TWU0oaWRfYWE2NGlzYXIyX292ZXJyaWRlKTtcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjFfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NG1tZnIyX292ZXJyaWRlKTtcbiYjNDM7UElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjRfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHBmcjBfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHBmcjFfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHNtZnIwX292ZXJyaWRlKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xuaW5kZXggYmM1N2IyOTBlNWU3YmEuLjRlNDc2MTZiY2FjMjNhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xuQEAgLTEwNiw2ICYjNDM7MTA2LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjIG1tZnIyIF9fcHJlbDY0X2luaXRjb25zdCA9IHtcbiBcdH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmdHJfc2V0X2Rlc2MgbW1mcjQgX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xuJiM0MztcdC5uYW1lXHRcdD0gXCYjMzQ7aWRfYWE2NG1tZnI0XCYjMzQ7LFxuJiM0MztcdC5vdmVycmlkZVx0PSBcdTAwMjZpZF9hYTY0bW1mcjRfb3ZlcnJpZGUsXG4mIzQzO1x0LmZpZWxkc1x0XHQ9IHtcbiYjNDM7XHRcdEZJRUxEKFwmIzM0O252X2ZyYWNcJiMzNDssIElEX0FBNjRNTUZSNF9FTDFfTlZfZnJhY19TSElGVCwgTlVMTCksXG4mIzQzO1x0XHR7fVxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBib29sIF9faW5pdCBwZnIwX3N2ZV9maWx0ZXIodTY0IHZhbClcbiB7XG4gXHQvKlxuQEAgLTIyMCw2ICYjNDM7MjI5LDcgQEAgUFJFTDY0KGNvbnN0IHN0cnVjdCBmdHJfc2V0X2Rlc2MsIHJlZykgcmVnc1tdIF9fcHJlbDY0X2luaXRjb25zdCA9IHtcbiBcdHsgXHUwMDI2bW1mcjBcdH0sXG4gXHR7IFx1MDAyNm1tZnIxXHR9LFxuIFx0eyBcdTAwMjZtbWZyMlx0fSxcbiYjNDM7XHR7IFx1MDAyNm1tZnI0XHR9LFxuIFx0eyBcdTAwMjZwZnIwIFx0fSxcbiBcdHsgXHUwMDI2cGZyMSBcdH0sXG4gXHR7IFx1MDAyNmlzYXIxXHR9LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggNDE1NWZlODliNThhMTcuLmRiNjBmYWNhZDlmM2MwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcbkBAIC04NzYsOCAmIzQzOzg3NiwxNCBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zZXRfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApXG4gXHRhc3NpZ25fY2xlYXJfc2V0X2JpdCh0dnQwMiwgQ05USENUTF9FTDFOVlZDVCwgY2xyLCBzZXQpO1xuIFx0YXNzaWduX2NsZWFyX3NldF9iaXQodHB0MDIsIENOVEhDVExfRUwxTlZQQ1QsIGNsciwgc2V0KTtcbiBcbi1cdC8qIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3Nvci4gKi9cbi1cdHN5c3JlZ19jbGVhcl9zZXQoY250aGN0bF9lbDIsIGNsciwgc2V0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3NvciwgdW5sZXNzXG4mIzQzO1x0ICogd2UgYXJlIHN1cmUgQ05US0NUTF9FTDEgaXMgY29tcGxldGVseSBzdGF0ZWZ1bCB3aXRoIEZFQVRfTlYycDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXG4mIzQzO1x0XHRzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c3lzcmVnX2NsZWFyX3NldChjbnRrY3RsX2VsMSwgY2xyLCBzZXQpO1xuIH1cbiBcbiB2b2lkIGt2bV90aW1lcl92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jIGIvYXJjaC9hcm02NC9rdm0vY29uZmlnLmNcbmluZGV4IDA2MjIxNjJiMDg5ZTUwLi43ZTg2NDc5MTQyNzIzNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xuQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgc3RydWN0IHJlZ19mZWF0X21hcF9kZXNjIHtcbiAjZGVmaW5lIEZFQVRfSENYXHRcdElEX0FBNjRNTUZSMV9FTDEsIEhDWCwgSU1QXG4gI2RlZmluZSBGRUFUX1MyUElFXHRcdElEX0FBNjRNTUZSM19FTDEsIFMyUElFLCBJTVBcbiAjZGVmaW5lIEZFQVRfR0NJRVx0XHRJRF9BQTY0UEZSMl9FTDEsIEdDSUUsIElNUFxuJiM0MzsjZGVmaW5lIEZFQVRfTlYzXHRcdElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WM1xuIFxuIHN0YXRpYyBib29sIG5vdF9mZWF0X2FhNjRlbDMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC05MDQsNiAmIzQzOzkwNSwxMiBAQCBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUF9GR1QoaGRmZ3d0cjJfZGVzYywgaGRmZ3d0cjJfbWFza3MsXG4gXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3J4X2ZlYXRfbWFwW10gPSB7XG4mIzQzO1x0TkVFRFNfRkVBVChIQ1JYX0VMMl9OVlRHRVx0XHR8XG4mIzQzO1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCXHRcdHxcbiYjNDM7XHRcdCAgIEhDUlhfRUwyX05WblRUTEJJU1x0XHR8XG4mIzQzO1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCT1MsXG4mIzQzO1x0XHQgICBGRUFUX05WMyksXG4mIzQzO1x0TkVFRFNfRkVBVChIQ1JYX0VMMl9TUk1BU0tFbiwgRkVBVF9TUk1BU0spLFxuIFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9QQUNNRW4sIGZlYXRfcGF1dGhfbHIpLFxuIFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9FbkZQTSwgRkVBVF9GUE1SKSxcbiBcdE5FRURTX0ZFQVQoSENSWF9FTDJfR0NTRW4sIEZFQVRfR0NTKSxcbkBAIC05MzMsNyAmIzQzOzk0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xuIH07XG4gXG4gXG4tc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAoaGNyeF9kZXNjLCBfX0hDUlhfRUwyLFxuJiM0MztzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3J4X2Rlc2MsIEhDUlhfRUwyLFxuIFx0XHRcdCAgICAgIGhjcnhfZmVhdF9tYXAsIEZFQVRfSENYKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xuQEAgLTEwMTAsNiAmIzQzOzEwMTcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xuIHN0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKGhjcl9kZXNjLCBIQ1JfRUwyLFxuIFx0XHRcdCAgICAgIGhjcl9mZWF0X21hcCwgRkVBVF9BQTY0RUwyKTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAobnZoY3JfZGVzYywgTlZIQ1JfRUwyLFxuJiM0MztcdFx0XHQgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfTlYzKTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBzY3RscjJfZmVhdF9tYXBbXSA9IHtcbiBcdE5FRURTX0ZFQVQoU0NUTFIyX0VMMV9OTUVBXHR8XG4gXHRcdCAgIFNDVExSMl9FTDFfRUFTRSxcbkBAIC0xMzg0LDYgJiM0MzsxMzk0LDcgQEAgdm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhkZmd3dHIyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2aGNyeF9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhjcl9kZXNjKTtcbiYjNDM7XHRjaGVja19yZWdfZGVzYyhcdTAwMjZudmhjcl9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNnNjdGxyMl9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNnRjcjJfZWwyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2c2N0bHJfZWwxX2Rlc2MpO1xuQEAgLTE1NzksMTEgJiM0MzsxNTkwLDIxIEBAIHN0cnVjdCByZXN4IGdldF9yZWdfZml4ZWRfYml0cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSENSWF9FTDI6XG4gXHRcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZoY3J4X2Rlc2MsIDAsIDApO1xuLVx0XHRyZXN4LnJlczEgfD0gX19IQ1JYX0VMMl9SRVMxO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSENSX0VMMjpcbiBcdFx0cmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sIFx1MDAyNmhjcl9kZXNjLCAwLCAwKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBOVkhDUl9FTDI6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBhcHBseSBzYW5pdGlzYXRpb24gaWYgd2UgZG8gaGF2ZSBGRUFUX05WMy5cbiYjNDM7XHRcdCAqIE90aGVyd2lzZSwgdGhlIHJlZ2lzdGVyIGFsaWFzZXMgd2l0aCBIQ1JfRUwyIGluIFZOQ1IsXG4mIzQzO1x0XHQgKiBhbmQgd2UmIzM5O3JlIGJldHRlciBvZmYgcmVseWluZyBvbiBkYXRhIHRyYW5zZmVycyBiZXR3ZWVuXG4mIzQzO1x0XHQgKiBOVkhDUl9FTDIgYW5kIEhDUl9FTDIgdG8gc2FuaXRpc2UgdGhpbmdzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXN4ID0gKGt2bV9oYXNfbnYzKGt2bSkgP1xuJiM0MztcdFx0XHRjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZudmhjcl9kZXNjLCAwLCAwKSA6XG4mIzQzO1x0XHRcdCh0eXBlb2YocmVzeCkpe30pO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIFNDVExSMl9FTDE6XG4gXHRjYXNlIFNDVExSMl9FTDI6XG4gXHRcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZzY3RscjJfZGVzYywgMCwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcbmluZGV4IDNjODJmMzkyODQ1ZDE0Li5mNWRjNTc4ZDhjOTg1NiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcbkBAIC05MCw2ICYjNDM7OTAsNyBAQCBlbnVtIGNndF9ncm91cF9pZCB7XG4gXHRDR1RfSENSWF9FbkZQTSxcbiBcdENHVF9IQ1JYX1RDUjJFbixcbiBcdENHVF9IQ1JYX1NDVExSMkVuLFxuJiM0MztcdENHVF9IQ1JYX25OVlRHRSxcbiBcbiBcdENHVF9DTlRIQ1RMX0VMMVRWVCxcbiBcdENHVF9DTlRIQ1RMX0VMMVRWQ1QsXG5AQCAtMTIxLDYgJiM0MzsxMjIsOCBAQCBlbnVtIGNndF9ncm91cF9pZCB7XG4gXHRDR1RfTURDUl9UREVfVERSQSxcbiBcdENHVF9NRENSX1REQ0NfVERFX1REQSxcbiBcbiYjNDM7XHRDR1RfSENSX05WX0hDUlhfbk5WVEdFLFxuJiM0MztcbiBcdENHVF9JQ0hfSENSX1RDX1RESVIsXG4gXG4gXHQvKlxuQEAgLTQxMyw2ICYjNDM7NDE2LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHJhcF9iaXRzIGNvYXJzZV90cmFwX2JpdHNbXSA9IHtcbiBcdFx0Lm1hc2tcdFx0PSBIQ1JYX0VMMl9TQ1RMUjJFbixcbiBcdFx0LmJlaGF2aW91clx0PSBCRUhBVkVfRk9SV0FSRF9SVyxcbiBcdH0sXG4mIzQzO1x0W0NHVF9IQ1JYX25OVlRHRV0gPSB7XG4mIzQzO1x0XHQuaW5kZXhcdFx0PSBIQ1JYX0VMMixcbiYjNDM7XHRcdC52YWx1ZVx0XHQ9IDAsXG4mIzQzO1x0XHQubWFza1x0XHQ9IEhDUlhfRUwyX05WVEdFLFxuJiM0MztcdFx0LmJlaGF2aW91clx0PSBCRUhBVkVfRk9SV0FSRF9SVyxcbiYjNDM7XHR9LFxuIFx0W0NHVF9DTlRIQ1RMX0VMMVRWVF0gPSB7XG4gXHRcdC5pbmRleFx0XHQ9IENOVEhDVExfRUwyLFxuIFx0XHQudmFsdWVcdFx0PSBDTlRIQ1RMX0VMMVRWVCxcbkBAIC00NjgsNiAmIzQzOzQ3Nyw3IEBAIHN0YXRpYyBjb25zdCBlbnVtIGNndF9ncm91cF9pZCAqY29hcnNlX2NvbnRyb2xfY29tYm9bXSA9IHtcbiBcdFx0XHRcdFx0Q0dUX0hDUl9UVk0sIENHVF9IQ1JfVFJWTSwgQ0dUX0hDUlhfU0NUTFIyRW4pLFxuIFx0TUNCKENHVF9IQ1JfVFBVX1RJQ0FCLFx0XHRDR1RfSENSX1RQVSwgQ0dUX0hDUl9USUNBQiksXG4gXHRNQ0IoQ0dUX0hDUl9UUFVfVE9DVSxcdFx0Q0dUX0hDUl9UUFUsIENHVF9IQ1JfVE9DVSksXG4mIzQzO1x0TUNCKENHVF9IQ1JfTlZfSENSWF9uTlZUR0UsXHRDR1RfSENSX05WLCBDR1RfSENSWF9uTlZUR0UpLFxuIFx0TUNCKENHVF9IQ1JfTlYxX25OVjJfRU5TQ1hULFx0Q0dUX0hDUl9OVjFfbk5WMiwgQ0dUX0hDUl9FTlNDWFQpLFxuIFx0TUNCKENHVF9NRENSX1RQTV9UUE1DUixcdFx0Q0dUX01EQ1JfVFBNLCBDR1RfTURDUl9UUE1DUiksXG4gXHRNQ0IoQ0dUX01EQ1JfVFBNX0hQTU4sXHRcdENHVF9NRENSX1RQTSwgQ0dUX01EQ1JfSFBNTiksXG5AQCAtODUzLDYgJiM0Mzs4NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnIGVuY29kaW5nX3RvX2NndFtdIF9faW5pdGNvbnN0ID0ge1xuIFx0U1JfVFJBUChTWVNfU0NUTFIyX0VMMixcdFx0Q0dUX0hDUl9OViksXG4gXHRTUl9SQU5HRV9UUkFQKFNZU19IQ1JfRUwyLFxuIFx0XHQgICAgICBTWVNfSENSWF9FTDIsXHRDR1RfSENSX05WKSxcbiYjNDM7XHRTUl9UUkFQKFNZU19OVkhDUl9FTDIsXHRcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UpLFxuIFx0U1JfVFJBUChTWVNfU01QUklNQVBfRUwyLFx0Q0dUX0hDUl9OViksXG4gXHRTUl9UUkFQKFNZU19TTUNSX0VMMixcdFx0Q0dUX0hDUl9OViksXG4gXHRTUl9SQU5HRV9UUkFQKFNZU19UVEJSMF9FTDIsXG5AQCAtMjMyMCw3ICYjNDM7MjMzMSw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZClcbiBcdEJVSUxEX0JVR19PTihfX05SX0NHVF9HUk9VUF9JRFNfXyBcdTAwM2UgQklUKFRDX0NHVF9CSVRTKSk7XG4gXHRCVUlMRF9CVUdfT04oX19OUl9GR1RfR1JPVVBfSURTX18gXHUwMDNlIEJJVChUQ19GR1RfQklUUykpO1xuIFx0QlVJTERfQlVHX09OKF9fTlJfRkdfRklMVEVSX0lEU19fIFx1MDAzZSBCSVQoVENfRkdGX0JJVFMpKTtcbi1cdEJVSUxEX0JVR19PTihfX0hDUlhfRUwyX01BU0sgXHUwMDI2IF9fSENSWF9FTDJfbk1BU0spO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZW5jb2RpbmdfdG9fY2d0KTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnICpjZ3QgPSBcdTAwMjZlbmNvZGluZ190b19jZ3RbaV07XG5AQCAtMjM0NiwxMCAmIzQzOzIzNTYsNiBAQCBpbnQgX19pbml0IHBvcHVsYXRlX252X3RyYXBfY29uZmlnKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChfX0hDUlhfRUwyX1JFUzAgIT0gSENSWF9FTDJfUkVTMClcbi1cdFx0a3ZtX2luZm8oXCYjMzQ7U2FuaXRpc2VkIEhDUl9FTDJfUkVTMCA9ICUwMTZsbHgsIGV4cGVjdGluZyAlMDE2bGx4XFxuXCYjMzQ7LFxuLVx0XHRcdCBfX0hDUlhfRUwyX1JFUzAsIEhDUlhfRUwyX1JFUzApO1xuLVxuIFx0a3ZtX2luZm8oXCYjMzQ7bnY6ICVsZCBjb2Fyc2UgZ3JhaW5lZCB0cmFwIGhhbmRsZXJzXFxuXCYjMzQ7LFxuIFx0XHQgQVJSQVlfU0laRShlbmNvZGluZ190b19jZ3QpKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmhcbmluZGV4IDRiZjYyNGE0OTU5MWRmLi43YjI3Mjk2Yzk0NjA3MCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oXG5AQCAtMTA4LDkgJiM0MzsxMDgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfY3B0cl90cmFwc192aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3RcbiBcdCAqIHdyaXRpbmcgdG8gQ1BUUl9FTDIgdmlhIENQQUNSX0VMMSBjYW4mIzM5O3Qgc2V0IGFueSBvZiBUQ1BBQyBvciBUVEEsXG4gXHQgKiBhcyB0aGV5IGFyZSBSRVMwIGluIHRoZSBndWVzdCYjMzk7cyB2aWV3LiBUbyB3b3JrIGFyb3VuZCBpdCwgdHJhcCB0aGVcbi1cdCAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4mIzM5O3Qgc2V0Li4uXG4mIzQzO1x0ICogc3Vja2VyIHVzaW5nIHRoZSB2ZXJ5IHNhbWUgYml0IGl0IGNhbiYjMzk7dCBzZXQuIEZFQVRfTlYycDEgZml4ZXMgaXQuXG4gXHQgKi9cbi1cdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiBpc19oeXBfY3R4dCh2Y3B1KSlcbiYjNDM7XHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgaXNfaHlwX2N0eHQodmNwdSkpXG4gXHRcdHZhbCB8PSBDUFRSX0VMMl9UQ1BBQztcbiBcbiBcdC8qXG5AQCAtMzI1LDYgJiM0MzszMjYsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGVhY3RpdmF0ZV90cmFwc19tcGFtKHZvaWQpXG4gXHRcdHdyaXRlX3N5c3JlZ19zKE1QQU1IQ1JfSE9TVF9GTEFHUywgU1lTX01QQU1IQ1JfRUwyKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEp1c3QgbGlrZSBmb3IgSENSX0VMMiwgd2UgY2FuJiMzOTt0IGxldCB0aGUgZ3Vlc3QgbWVzcyB3aXRoIHNvbWUgb2YgdGhlXG4mIzQzOyAqIGJhc2ljcyB3ZSByZWx5IG9uIGluIEhDUlhfRUwyLiBIb3dldmVyLCB0aGUgbWFqb3IgZGlmZmVyZW5jZSBpcyB0aGF0XG4mIzQzOyAqIEhDUlhfRUwyIG9ubHkgYWZmZWN0cyBFTDEsIGFuZCBuZXZlciBFTDIgKHN1ZGRlbiBvdXRidXJzdCBvZiBzYW5pdHksIElcbiYjNDM7ICogZ3Vlc3MpLiBTbyBpdCBpcyBhbHdheXMgdGhlIGd1ZXN0IGluZmxpY3RpbmcgaXQgb24gaXRzIG93biBndWVzdHguXG4mIzQzOyAqXG4mIzQzOyAqIFRoaW5ncyB3ZSBkb24mIzM5O3Qgd2FudCB0byBsZXQgdGhlIGd1ZXN0IGNvbnRyb2wgYXJlOlxuJiM0MzsgKlxuJiM0MzsgKiAtIFRNRUE6IFRoYXQmIzM5O3MgZm9yIHVzIHRvIGRlY2lkZSBob3cgYW4gU0VBIGlzIHJvdXRlZCwgbm90IHRoZSBndWVzdC5cbiYjNDM7ICpcbiYjNDM7ICogLSBQVFRXSTogU2ltaWxhcmx5LCBpdCBpcyBmb3IgdXMgdG8gZGVjaWRlIHdoZXRoZXIgUmVkdWNlZCBDb2hlcmVuY3kgZm9yXG4mIzQzOyAqICAgdGhlIFBUVyBpcyBhIHRoaW5nLiBJdCByZWFsbHkgaXNuJiMzOTt0LlxuJiM0MzsgKlxuJiM0MzsgKiAtIEVuSURDUDEyODogV2UgZG9uJiMzOTt0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTlZfSENSWF9HVUVTVF9FWENMVURFXHQoSENSWF9FTDJfVE1FQVx0ICAgIHwgSENSWF9FTDJfUFRUV0kgfCBcXFxuJiM0MztcdFx0XHRcdCBIQ1JYX0VMMl9FbklEQ1AxMjgpXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV9jcHVfY29udGV4dCAqaGN0eHQgPSBob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCk7XG5AQCAtMzUwLDggJiM0MzszNjksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV90cmFwc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR1NjQgaGNyeCA9IHZjcHUtXHUwMDNlYXJjaC5oY3J4X2VsMjtcbiBcdFx0aWYgKGlzX25lc3RlZF9jdHh0KHZjcHUpKSB7XG4gXHRcdFx0dTY0IHZhbCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKTtcbi1cdFx0XHRoY3J4IHw9IHZhbCBcdTAwMjYgX19IQ1JYX0VMMl9NQVNLO1xuLVx0XHRcdGhjcnggXHUwMDI2PSB+KH52YWwgXHUwMDI2IF9fSENSWF9FTDJfbk1BU0spO1xuJiM0MztcdFx0XHRoY3J4IHw9ICh2YWwgXHUwMDI2IH5OVl9IQ1JYX0dVRVNUX0VYQ0xVREUpO1xuJiM0MztcdFx0XHRoY3J4IFx1MDAyNj0gfih+dmFsIFx1MDAyNiB+TlZfSENSWF9HVUVTVF9FWENMVURFKTtcbiBcdFx0fVxuIFxuIFx0XHRjdHh0X3N5c19yZWcoaGN0eHQsIEhDUlhfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX0hDUlhfRUwyKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmhcbmluZGV4IGExN2NiZTc1ODJkZTkwLi5jMzgyODQ4ZDMxOTQ3OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXG5AQCAtMTcyLDYgJiM0MzsxNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3NhdmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXG4gXG4gXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxuIFx0XHRjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSkgPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSMik7XG4mIzQzO1xuJiM0MztcdC8qIFJldHJpZXZlIEwyJiMzOTtzIEhDUl9FTDIsIGFuZCBzYXZlIGl0IGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0aWYgKGlzX25lc3RlZF9udjNfY3R4dChjdHh0X3RvX3ZjcHUoY3R4dCkpKVxuJiM0MztcdFx0Y3R4dF9zeXNfcmVnKGN0eHQsIE5WSENSX0VMMikgPSByZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zeXNyZWdfc2F2ZV9lbDJfcmV0dXJuX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXG5AQCAtMjg1LDYgJiM0MzsyODksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3Jlc3RvcmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQsXG4gXG4gXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxuIFx0XHR3cml0ZV9zeXNyZWdfZWwxKGN0eHRfc3lzX3JlZyhjdHh0LCBTQ1RMUjJfRUwxKSwgU1lTX1NDVExSMik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHVibGlzaCB0aGUgTDIgdmlldyBvZiBIQ1JfRUwyIHRvIHRoZSBIVyBpZiBMMSBpcyB1c2luZyBOVjMuXG4mIzQzO1x0ICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSYjMzk7cyBvd24gVk5DUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfbmVzdGVkX252M19jdHh0KGN0eHRfdG9fdmNwdShjdHh0KSkpXG4mIzQzO1x0XHR3cml0ZV9zeXNyZWdfcyhjdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7XG4gfVxuIFxuIC8qIFJlYWQgdGhlIFZDUFUgc3RhdGUmIzM5O3MgUFNUQVRFLCBidXQgdHJhbnNsYXRlICh2KUVMMiB0byBFTDEuICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbmluZGV4IGJiZTljZWJkM2Q5ZDU3Li5mMTI5ZjIyZjE1NjE4ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbkBAIC03MCw2ICYjNDM7NzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxuIFx0XHRcdGhjciB8PSBIQ1JfTlYxO1xuIFxuJiM0MztcdFx0LyogUHVibGlzaCB0aGUgZ3Vlc3QmIzM5O3MgdmlldyBvZiBIQ1JfRUwyIHRvIHRoZSBIVyAqL1xuJiM0MztcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4mIzQzO1x0XHRcdHdyaXRlX3N5c3JlZ19zKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpLCBTWVNfTlZIQ1JfRUwyKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogTm90aGluZyBpbiBIQ1JfRUwyIHNob3VsZCBpbXBhY3QgcnVubmluZyBpbiBoeXBlcnZpc29yXG4gXHRcdCAqIGNvbnRleHQsIGFwYXJ0IGZyb20gYml0cyB3ZSBoYXZlIGRlZmluZWQgYXMgUkVTeCAoRTJILFxuQEAgLTMzOSw2ICYjNDM7MzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbiBcdHU2NCBlc3IgPSBrdm1fdmNwdV9nZXRfZXNyKHZjcHUpO1xuIFx0dTY0IHNwc3IsIGVsciwgbW9kZTtcbiBcbiYjNDM7XHQvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovXG4mIzQzO1x0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lXG4gXHQgKiBpZiB0aGlzIGlzIGEgVkhFIGd1ZXN0IGh5cGVydmlzb3IgcmV0dXJuaW5nIHRvIGl0cyBvd25cbkBAIC0zNDksOCAmIzQzOzM1OSw4IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbiBcdCAqIFVubGVzcyB0aGUgdHJhcCBoYXMgdG8gYmUgZm9yd2FyZGVkIGZ1cnRoZXIgZG93biB0aGUgbGluZSxcbiBcdCAqIG9mIGNvdXJzZS4uLlxuIFx0ICovXG4tXHRpZiAoKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpIFx1MDAyNiBIQ1JfTlYpIHx8XG4tXHQgICAgKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhGR0lUUl9FTDIpIFx1MDAyNiBIRkdJVFJfRUwyX0VSRVQpKVxuJiM0MztcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSB8fFxuJiM0MztcdCAgICBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSBcdTAwMjYgSEZHSVRSX0VMMl9FUkVUKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRzcHNyID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TUFNSKTtcbkBAIC00NDEsNiAmIzQzOzQ1MSw5IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2NwYWNyX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0dTY0IGVzciA9IGt2bV92Y3B1X2dldF9lc3IodmNwdSk7XG4gXHRpbnQgcnQ7XG4gXG4mIzQzO1x0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRpZiAoIWlzX2h5cF9jdHh0KHZjcHUpIHx8IGVzcl9zeXM2NF90b19zeXNyZWcoZXNyKSAhPSBTWVNfQ1BBQ1JfRUwxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtNTM0LDE5ICYjNDM7NTQ3LDE3IEBAIHN0YXRpYyBjb25zdCBleGl0X2hhbmRsZXJfZm4gaHlwX2V4aXRfaGFuZGxlcnNbXSA9IHtcbiBcdFsweDNGXVx0XHRcdFx0PSBrdm1faHlwX2hhbmRsZV9pbXBkZWYsXG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuJiM0MztzdGF0aWMgdm9pZCBmaXh1cF9udl9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzeW5jaHJvbml6ZV92Y3B1X3BzdGF0ZSh2Y3B1KTtcbi1cbiBcdC8qXG4gXHQgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3XG4gXHQgKiBzbyB0aGF0IHRoZSB1c3VhbCBoZWxwZXJzIHdvcmsgY29ycmVjdGx5LiBUaGlzIGVuZm9yY2VzIG91clxuIFx0ICogaW52YXJpYW50IHRoYXQgdGhlIGd1ZXN0JiMzOTtzIEhZUCBjb250ZXh0IHN0YXR1cyBpcyBwcmVzZXJ2ZWRcbiBcdCAqIGFjcm9zcyBhIHJ1bi5cbiBcdCAqL1xuLVx0aWYgKHZjcHVfaGFzX252KHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHVubGlrZWx5KGhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkpKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkpKSB7XG4gXHRcdHU2NCBtb2RlID0gKnZjcHVfY3Bzcih2Y3B1KSBcdTAwMjYgKFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XG4mIzQzO1x0XHR1NjQgaGNyO1xuIFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBQU1JfTU9ERV9FTDF0OlxuQEAgLTU1OSwxMSAmIzQzOzU3MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFxuIFx0XHQqdmNwdV9jcHNyKHZjcHUpIFx1MDAyNj0gfihQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpO1xuIFx0XHQqdmNwdV9jcHNyKHZjcHUpIHw9IG1vZGU7XG4mIzQzO1xuJiM0MztcdFx0LyogUHVibGlzaCB0aGUgbGF0ZXN0IEhDUl9FTDIgdG8gdGhlIGVtdWxhdGlvbiAqL1xuJiM0MztcdFx0aGNyID0gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgICAgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkgP1xuJiM0MztcdFx0XHRyZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpIDpcbiYjNDM7XHRcdFx0X192Y3B1X3N5c19yZWcodmNwdSwgTlZIQ1JfRUwyKTtcbiYjNDM7XG4mIzQzO1x0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTtcbiBcdH1cbiBcbiBcdC8qIEFwcGx5IGV4dHJlbWUgcGFyYW5vaWEhICovXG4tXHRCVUdfT04odmNwdV9oYXNfbnYodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcbiYjNDM7XHRCVUdfT04oISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3luY2hyb25pemVfdmNwdV9wc3RhdGUodmNwdSk7XG4mIzQzO1xuJiM0MztcdGlmICh2Y3B1X2hhc19udih2Y3B1KSlcbiYjNDM7XHRcdGZpeHVwX252X2d1ZXN0X2V4aXQodmNwdSk7XG4gXG4gXHRyZXR1cm4gX19maXh1cF9ndWVzdF9leGl0KHZjcHUsIGV4aXRfY29kZSwgaHlwX2V4aXRfaGFuZGxlcnMpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuaW5kZXggYmU2ODViNjNlOGNmMjYuLjBjNGVmMWNlMzJhZTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuQEAgLTQyLDEwICYjNDM7NDIsMTIgQEAgc3RhdGljIHZvaWQgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dTY0IHZhbDtcbiBcbiBcdFx0Lypcbi1cdFx0ICogV2UgZG9uJiMzOTt0IHNhdmUgQ1BUUl9FTDIsIGFzIGFjY2Vzc2VzIHRvIENQQUNSX0VMMVxuLVx0XHQgKiBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlIGluLW1lbW9yeVxuLVx0XHQgKiBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXG4mIzQzO1x0XHQgKiBXaXRob3V0IEZFQVRfTlYycDEsIHdlIGRvbiYjMzk7dCBzYXZlIENQVFJfRUwyLCBhcyBhY2Nlc3Nlc1xuJiM0MztcdFx0ICogdG8gQ1BBQ1JfRUwxIGFyZSBhbHdheXMgdHJhcHBlZCwgZW5zdXJpbmcgdGhhdCB0aGVcbiYjNDM7XHRcdCAqIGluLW1lbW9yeSBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbiYjNDM7XHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIENQVFJfRUwyLCByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKSk7XG4gXHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIsXHQgcmVhZF9zeXNyZWdfZWwxKFNZU19TQ1RMUikpO1xuIFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgVFRCUjBfRUwyLFx0IHJlYWRfc3lzcmVnX2VsMShTWVNfVFRCUjApKTtcbiBcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFRUQlIxX0VMMixcdCByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIxKSk7XG5AQCAtNjcsMTEgJiM0Mzs2OSwxOCBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBUaGUgRUwxIHZpZXcgb2YgQ05US0NUTF9FTDEgaGFzIGEgYnVuY2ggb2YgUkVTMCBiaXRzIHdoZXJlXG4gXHRcdCAqIHRoZSBpbnRlcmVzdGluZyBDTlRIQ1RMX0VMMiBiaXRzIGxpdmUuIFNvIHByZXNlcnZlIHRoZXNlXG4gXHRcdCAqIGJpdHMgd2hlbiByZWFkaW5nIGJhY2sgdGhlIGd1ZXN0LXZpc2libGUgdmFsdWUuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogV2hpbGUgTlYycDEgZml4ZXMgc29tZSBvZiB0aGF0LCBpdCBtYWtlcyBDTlRIQ1RMX0VMMi5FQ1ZcbiYjNDM7XHRcdCAqIGV2ZW4gbW9yZSBicm9rZW4gdGhhbiBpdCBhbHJlYWR5IHdhcyB3aXRoIE5WMi5cbiBcdFx0ICovXG4gXHRcdHZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7XG4tXHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcbiYjNDM7XHRcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKSB7XG4mIzQzO1x0XHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbiYjNDM7XHRcdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbiYjNDM7XHRcdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBTUF9FTDIsXHQgcmVhZF9zeXNyZWcoc3BfZWwxKSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggZGZiOTZlZGJkYzQzYzYuLjY0YzhmYjgyZmFkZjZkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5AQCAtMTcyOCw3ICYjNDM7MTcyOCw3IEBAIHU2NCBsaW1pdF9udl9pZF9yZWcoc3RydWN0IGt2bSAqa3ZtLCB1MzIgcmVnLCB1NjQgdmFsKVxuIFx0XHQgKiBZb3UgZ2V0IEVJVEhFUlxuIFx0XHQgKlxuIFx0XHQgKiAtIEZFQVRfVkhFIHdpdGhvdXQgRkVBVF9FMkgwXG4tXHRcdCAqIC0gRkVBVF9OViBsaW1pdGVkIHRvIEZFQVRfTlYyXG4mIzQzO1x0XHQgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMihwMSkvTlYzXG4gXHRcdCAqIC0gSENSX0VMMi5OVjEgYmVpbmcgUkVTMFxuIFx0XHQgKlxuIFx0XHQgKiBPUlxuQEAgLTE3NDAsNyAmIzQzOzE3NDAsMTMgQEAgdTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpXG4gXHRcdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMl9FMkgwLCBrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xuIFx0XHRcdHZhbCA9IDA7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsID0gU1lTX0ZJRUxEX1BSRVBfRU5VTShJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSk7XG4mIzQzO1x0XHRcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpKVxuJiM0MztcdFx0XHRcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxuJiM0MztcdFx0XHRcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyUDEpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0dmFsID0gU1lTX0ZJRUxEX1BSRVBfRU5VTShJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSk7XG4mIzQzO1x0XHRcdHZhbCBcdTAwMjY9IH5JRF9BQTY0TU1GUjRfRUwxX0UySDA7XG4gXHRcdFx0dmFsIHw9IFNZU19GSUVMRF9QUkVQX0VOVU0oSURfQUE2NE1NRlI0X0VMMSwgRTJIMCwgTklfTlYxKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbkBAIC0xODI2LDYgJiM0MzsxODMyLDEwIEBAIGludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JfRUwyKTtcbiBcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JfRUwyLCByZXN4KTtcbiBcbiYjNDM7XHQvKiBOVkhDUl9FTDIgKi9cbiYjNDM7XHRyZXN4ID0gZ2V0X3JlZ19maXhlZF9iaXRzKGt2bSwgTlZIQ1JfRUwyKTtcbiYjNDM7XHRzZXRfc3lzcmVnX21hc2tzKGt2bSwgTlZIQ1JfRUwyLCByZXN4KTtcbiYjNDM7XG4gXHQvKiBIQ1JYX0VMMiAqL1xuIFx0cmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIEhDUlhfRUwyKTtcbiBcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JYX0VMMiwgcmVzeCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbmluZGV4IDVkNWM1NzlkNDU3OTAyLi4wYWViMmU3MzZmZGUzNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbkBAIC0xODMsOCAmIzQzOzE4Myw2IEBAIHN0YXRpYyB2b2lkIGxvY2F0ZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdmNwdV9zeXNyZWcgcmVnLFxuIFx0c3dpdGNoIChyZWcpIHtcbiBcdFx0TUFQUEVEX0VMMl9TWVNSRUcoU0NUTFJfRUwyLCAgIFNDVExSX0VMMSxcbiBcdFx0XHRcdCAgdHJhbnNsYXRlX3NjdGxyX2VsMl90b19zY3Rscl9lbDFcdCAgICAgKTtcbi1cdFx0TUFQUEVEX0VMMl9TWVNSRUcoQ1BUUl9FTDIsICAgIENQQUNSX0VMMSxcbi1cdFx0XHRcdCAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMVx0ICAgICApO1xuIFx0XHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMF9FTDIsICAgVFRCUjBfRUwxLFxuIFx0XHRcdFx0ICB0cmFuc2xhdGVfdHRicjBfZWwyX3RvX3R0YnIwX2VsMVx0ICAgICApO1xuIFx0XHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMV9FTDIsICAgVFRCUjFfRUwxLCAgIE5VTExcdCAgICAgKTtcbkBAIC0yMTAsNiAmIzQzOzIwOCwzMyBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcbiBcdFx0bG9jLVx1MDAzZWxvYyA9ICgoaXNfaHlwX2N0eHQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cbiBcdFx0XHQgICAgU1JfTE9DX1NQRUNJQUwgOiBTUl9MT0NfTUVNT1JZKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBDUFRSX0VMMjpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBDUFRSX0VMMiBpcyBqdXN0IGFzIHNwZWNpYWwsIGFuZCBuZWVkcyBhIGNlcnRhaW4gYW1vdW50XG4mIzQzO1x0XHQgKiBvZiBoYW5kaG9sZGluZy4gSXQgYWx3YXlzIGxpdmVzIGluIG1lbW9yeSwgZHVlIHRvIGJlaW5nXG4mIzQzO1x0XHQgKiBoZWF2aWx5IHRyYXBwZWQgdGhhbmtzIHRvIENQQUNSX0VMMS5UQ1BBQyBiZWluZyBSRVMwLlxuJiM0MztcdFx0ICogRkVBVF9OVjJwMSBmaXhlcyB0aGlzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb2NhdGVfbWFwcGVkX2VsMl9yZWdpc3Rlcih2Y3B1LCBDUFRSX0VMMiwgQ1BBQ1JfRUwxLFxuJiM0MztcdFx0XHRcdFx0ICAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMSxcbiYjNDM7XHRcdFx0XHRcdCAgIGxvYyk7XG4mIzQzO1x0XHRpZiAoaXNfaHlwX2N0eHQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4mIzQzO1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfU1BFQ0lBTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTlZIQ1JfRUwyOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFllcywgTlZIQ1JfRUwyIG1hcHMgdG8gaXRzZWxmIHdoZW4gbG9hZGVkIGluIG5lc3RlZFxuJiM0MztcdFx0ICogY29udGV4dC4gSWYgeW91IGZlZWwgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIGRvdWJsZVxuJiM0MztcdFx0ICogYmFja2luZyBvbiBpdHNlbGYgdXBzaWRlIGRvd24sIHlvdSYjMzk7cmUgbm90IGFsb25lLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoIWt2bV9oYXNfbnYzKHZjcHUtXHUwMDNla3ZtKSk7XG4mIzQzO1x0XHRpZiAoaXNfaHlwX2N0eHQodmNwdSkpIHtcbiYjNDM7XHRcdFx0bG9jLVx1MDAzZWxvYyA9IFNSX0xPQ19NRU1PUlk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRsb2MtXHUwMDNlbG9jID0gU1JfTE9DX0xPQURFRCB8IFNSX0xPQ19NQVBQRUQ7XG4mIzQzO1x0XHRcdGxvYy1cdTAwM2VtYXBfcmVnID0gTlZIQ1JfRUwyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRsb2MtXHUwMDNlbG9jID0gbG9jYXRlX2RpcmVjdF9yZWdpc3Rlcih2Y3B1LCByZWcpO1xuIFx0fVxuQEAgLTI0OSw2ICYjNDM7Mjc0LDcgQEAgc3RhdGljIHU2NCByZWFkX3NyX2Zyb21fY3B1KGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuIFx0Y2FzZSBEQUNSMzJfRUwyOlx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfREFDUjMyX0VMMik7XHRicmVhaztcbiBcdGNhc2UgSUZTUjMyX0VMMjpcdHZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0lGU1IzMl9FTDIpO1x0YnJlYWs7XG4gXHRjYXNlIERCR1ZDUjMyX0VMMjpcdHZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0RCR1ZDUjMyX0VMMik7XHRicmVhaztcbiYjNDM7XHRjYXNlIE5WSENSX0VMMjpcdFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKTtcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0fVxuIFxuQEAgLTI4Nyw2ICYjNDM7MzEzLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVfc3JfdG9fY3B1KGVudW0gdmNwdV9zeXNyZWcgcmVnLCB1NjQgdmFsKVxuIFx0Y2FzZSBEQUNSMzJfRUwyOlx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfREFDUjMyX0VMMik7XHRicmVhaztcbiBcdGNhc2UgSUZTUjMyX0VMMjpcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0lGU1IzMl9FTDIpO1x0YnJlYWs7XG4gXHRjYXNlIERCR1ZDUjMyX0VMMjpcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0RCR1ZDUjMyX0VMMik7XHRicmVhaztcbiYjNDM7XHRjYXNlIE5WSENSX0VMMjpcdFx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfTlZIQ1JfRUwyKTtcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0fVxuIH1cbkBAIC0zMTEsOSAmIzQzOzMzOCwxNiBAQCB1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0c3dpdGNoIChyZWcpIHtcbiBcdFx0Y2FzZSBDTlRIQ1RMX0VMMjpcbiBcdFx0XHR2YWwgPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpO1xuLVx0XHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0XHR2YWwgfD0gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSBcdTAwMjYgfkNOVEtDVExfVkFMSURfQklUUztcbiYjNDM7XHRcdFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcbiYjNDM7XHRcdFx0XHR2YWwgXHUwMDI2PSBDTlRLQ1RMX1ZBTElEX0JJVFM7XG4mIzQzO1x0XHRcdFx0dmFsIHw9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgXHUwMDI2IH5DTlRLQ1RMX1ZBTElEX0JJVFM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRyZXR1cm4gdmFsO1xuJiM0MztcdFx0Y2FzZSBDUFRSX0VMMjpcbiYjNDM7XHRcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmVhZF9zeXNyZWdfZWwxKFNZU19DUEFDUik7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXR1cm4gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKTtcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdH1cbkBAIC0zNTksNiAmIzQzOzM5Myw5IEBAIHZvaWQgdmNwdV93cml0ZV9zeXNfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXG4gXHRcdFx0ICovXG4gXHRcdFx0d3JpdGVfc3lzcmVnX2VsMSh2YWwsIFNZU19DTlRLQ1RMKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQ1BUUl9FTDI6XG4mIzQzO1x0XHRcdHdyaXRlX3N5c3JlZ19lbDEodmFsLCBTWVNfQ1BBQ1IpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdH1cbkBAIC0yODQwLDYgJiM0MzsyODc3LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm5jcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZXR1cm4gUkVHX0hJRERFTjtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZoY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZWwyX3Zpc2liaWxpdHkodmNwdSwgcmQpID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGt2bV9oYXNfZmVhdCh2Y3B1LVx1MDAzZWt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUkVHX0hJRERFTjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdW5zaWduZWQgaW50IHNjdGxyMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxuIHtcbkBAIC0zNzUzLDYgJiM0MzszODAwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0XHRcdCBzdmVfZWwyX3Zpc2liaWxpdHkpLFxuIFxuIFx0RUwyX1JFR19WTkNSKEhDUlhfRUwyLCByZXNldF92YWwsIDApLFxuJiM0MztcdEVMMl9SRUdfRklMVEVSRUQoTlZIQ1JfRUwyLCB1bmRlZl9hY2Nlc3MsIHJlc2V0X3ZhbCwgMCxcbiYjNDM7XHRcdFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcbiBcbiBcdEVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXG4gXHRFTDJfUkVHKFRUQlIxX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIDApLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjdlMDQxNDUwOWU4OWE4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC01MSw2ICYjNDM7NTEsOCBAQCBIQVNfTFM2NF9WXG4gSEFTX0xTVUlcbiBIQVNfTU9QU1xuIEhBU19ORVNURURfVklSVFxuJiM0MztIQVNfTlYyUDFcbiYjNDM7SEFTX05WM1xuIEhBU19CQk1MMl9OT0FCT1JUXG4gSEFTX1BBTlxuIEhBU19QTVVWM1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5pbmRleCA4Njg2MGFiNjcyZGM3OC4uZDdmN2NlYjc2OGZlNWMgMTAwNzU1XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5AQCAtMjI4LDcgJiM0MzsyMjgsNyBAQCAkMSA9PSBcJiMzNDtFbmRTeXNyZWdcJiMzNDsgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcJiMzNDtTeXNyZWdcJiMzNDsge1xuIH1cbiBcbiAjIEN1cnJlbnRseSB0aGlzIGlzIGVmZmVjdGl2ZXkgYSBjb21tZW50LCBpbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gZW1pdFxuLSMgZGVmaW5lcyBmb3IgdGhlIGZpZWxkcy5cbiYjNDM7IyBkZWZpbmVzIGZvciB0aGUgZmllbGRzLiBcJiMzNDtNYXBwaW5nXCYjMzQ7IGRvZXMgZW1pdCB0aGUgUkVTeC9VTktOIGRlZmluaXRpb25zLlxuICgkMSA9PSBcJiMzNDtGaWVsZHNcJiMzNDsgfHwgJDEgPT0gXCYjMzQ7TWFwcGluZ1wmIzM0OykgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcJiMzNDtTeXNyZWdcJiMzNDsge1xuIFx0ZXhwZWN0X2ZpZWxkcygyKVxuIFxuQEAgLTIzOSw5ICYjNDM7MjM5LDE1IEBAICQxID09IFwmIzM0O0VuZFN5c3JlZ1wmIzM0OyBcdTAwMjZcdTAwMjYgYmxvY2tfY3VycmVudCgpID09IFwmIzM0O1N5c3JlZ1wmIzM0OyB7XG4gXHRwcmludCBcJiMzNDtcJiMzNDtcbiBcbiBcdG5leHRfYml0ID0gLTFcbi1cdHJlczAgPSBudWxsXG4tXHRyZXMxID0gbnVsbFxuLVx0dW5rbiA9IG51bGxcbiYjNDM7XHRpZiAoJDEgPT0gXCYjMzQ7TWFwcGluZ1wmIzM0Oykge1xuJiM0MztcdFx0cmVzMCA9ICQyIFwmIzM0O19SRVMwXCYjMzQ7XG4mIzQzO1x0XHRyZXMxID0gJDIgXCYjMzQ7X1JFUzFcJiMzNDtcbiYjNDM7XHRcdHVua24gPSAkMiBcJiMzNDtfVU5LTlwmIzM0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXMwID0gbnVsbFxuJiM0MztcdFx0cmVzMSA9IG51bGxcbiYjNDM7XHRcdHVua24gPSBudWxsXG4mIzQzO1x0fVxuIFxuIFx0bmV4dFxuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG5pbmRleCBiYzE3ODhiMTY2MmI3Ni4uYWZlOTMzNzg1MWEyZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbkBAIC0yMzg2LDE3ICYjNDM7MjM4Niw0MCBAQCBFbmRFbnVtXG4gRW5kU3lzcmVnXG4gXG4gU3lzcmVnXHRJRF9BQTY0TU1GUjRfRUwxXHQzXHQwXHQwXHQ3XHQ0XG4tUmVzMFx0NjM6NDhcbiYjNDM7VW5zaWduZWRFbnVtXHQ2Mzo2MFx0TVRFRkdUXG4mIzQzO1x0MGIwMDAwXHROSVxuJiM0MztcdDBiMDAwMVx0SU1QXG4mIzQzO0VuZEVudW1cbiYjNDM7VW5zaWduZWRFbnVtXHQ1OTo1Nlx0U0NSWFxuJiM0MztcdDBiMDAwMFx0TklcbiYjNDM7XHQwYjAwMDFcdElNUFxuJiM0MztFbmRFbnVtXG4mIzQzO1Vuc2lnbmVkRW51bVx0NTU6NTJcdFRFVlxuJiM0MztcdDBiMDAwMFx0TklcbiYjNDM7XHQwYjAwMDFcdElNUFxuJiM0MztFbmRFbnVtXG4mIzQzO1Vuc2lnbmVkRW51bVx0NTE6NDhcdFRQU1xuJiM0MztcdDBiMDAwMFx0VkFMXzAwMDBcbiYjNDM7XHQwYjAwMDFcdFZBTF8wMDAxXG4mIzQzO1x0MGIwMDEwXHRWQUxfMDAxMFxuJiM0MztFbmRFbnVtXG4gVW5zaWduZWRFbnVtXHQ0Nzo0NFx0U1JNQVNLXG4gXHQwYjAwMDBcdE5JXG4gXHQwYjAwMDFcdElNUFxuJiM0MztcdDBiMDAxMFx0U1JNQVNLMlxuJiM0MztFbmRFbnVtXG4mIzQzO1Vuc2lnbmVkRW51bVx0NDM6NDBcdFRMQklEXG4mIzQzO1x0MGIwMDAwXHROSVxuJiM0MztcdDBiMDAwMVx0SU1QXG4gRW5kRW51bVxuLVJlczBcdDQzOjQwXG4gVW5zaWduZWRFbnVtXHQzOTozNlx0RTNEU0VcbiBcdDBiMDAwMFx0TklcbiBcdDBiMDAwMVx0SU1QXG4gRW5kRW51bVxuLVJlczBcdDM1OjMyXG4mIzQzO1Vuc2lnbmVkRW51bVx0MzU6MzJcdEVBRVNSXG4mIzQzO1x0MGIwMDAwXHROSVxuJiM0MztcdDBiMDAwMVx0SU1QXG4mIzQzO0VuZEVudW1cbiBVbnNpZ25lZEVudW1cdDMxOjI4XHRSTUVHRElcbiBcdDBiMDAwMFx0TklcbiBcdDBiMDAwMVx0SU1QXG5AQCAtMjQxMCw2ICYjNDM7MjQzMyw3IEBAIFVuc2lnbmVkRW51bVx0MjM6MjBcdE5WX2ZyYWNcbiBcdDBiMDAwMFx0TlZfTlYyXG4gXHQwYjAwMDFcdE5WMl9PTkxZXG4gXHQwYjAwMTBcdE5WMlAxXG4mIzQzO1x0MGIwMDExXHROVjNcbiBFbmRFbnVtXG4gVW5zaWduZWRFbnVtXHQxOToxNlx0RkdXVEUzXG4gXHQwYjAwMDBcdE5JXG5AQCAtNDI0Miw2ICYjNDM7NDI2Niw5IEBAIEZpZWxkXHQxXHRFMlRSRVxuIEZpZWxkXHQwXHRFMEhUUkVcbiBFbmRTeXNyZWdcbiBcbiYjNDM7U3lzcmVnXHROVkhDUl9FTDJcdDNcdDRcdDFcdDVcdDBcbiYjNDM7TWFwcGluZ1x0SENSX0VMMlxuJiM0MztFbmRTeXNyZWdcbiBcbiBTeXNyZWcgSERGR1JUUjJfRUwyXHQzXHQ0XHQzXHQxXHQwXG4gUmVzMFx0NjM6MjVcbkBAIC00NTIxLDcgJiM0Mzs0NTQ4LDE0IEBAIEZpZWxkc1x0WkNSX0VMeFxuIEVuZFN5c3JlZ1xuIFxuIFN5c3JlZ1x0SENSWF9FTDJcdDNcdDRcdDFcdDJcdDJcbi1SZXMwXHQ2MzoyNVxuJiM0MztSZXMwXHQ2MzozNVxuJiM0MztGaWVsZFx0MzRcdE5WblRUTEJPU1xuJiM0MztGaWVsZFx0MzNcdE5WblRUTEJJU1xuJiM0MztGaWVsZFx0MzJcdE5WblRUTEJcbiYjNDM7UmVzMFx0MzE6MjhcbiYjNDM7RmllbGRcdDI3XHROVlRHRVxuJiM0MztGaWVsZFx0MjZcdFNSTUFTS0VuXG4mIzQzO1JlczBcdDI1XG4gRmllbGRcdDI0XHRQQUNNRW5cbiBGaWVsZFx0MjNcdEVuRlBNXG4gRmllbGRcdDIyXHRHQ1NFblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pbml0X252X3N5c3JlZ3MmIzM0OywKICAgICYjMzQ7bGltaXRfbnZfaWRfcmVnJiMzNDssCiAgICAmIzM0O252aGNyX2VsMl92aXNpYmlsaXR5JiMzNDssCiAgICAmIzM0O2dldF9yZWdfZml4ZWRfYml0cyYjMzQ7LAogICAgJiMzNDtmaXh1cF9udl9ndWVzdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOGRhNjJhM2NlZGJmODhmZjNlNjhhYWM5N2JkMWQwYmE5YTdkYjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxODoxNjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggYTU3ODcwZmE5NmRiNWIuLmE0MjY4M2FmNzlmYjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtOTY4LDYgJiM0Mzs5NjgsNyBAQCBzdHJ1Y3QgYXJtNjRfZnRyX3JlZyAqZ2V0X2FybTY0X2Z0cl9yZWcodTMyIHN5c19pZCk7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnI0X292ZXJyaWRlOwogZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHBmcjBfb3ZlcnJpZGU7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMV9vdmVycmlkZTsKIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjR6ZnIwX292ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaAppbmRleCAzZjkyMzNiNWExMzA4MS4uZjZjZDg1MTA0Nzk0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oCkBAIC0yODcsMjEgJiM0MzsyODcsNiBAQAogCQkJCSBHRU5NQVNLKDE5LCAxOCkgfAlcCiAJCQkJIEdFTk1BU0soMTUsIDApKQogCi0vKgotICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dAotICogYXQgdGhpcyBwb2ludCBpbiB0aW1lLiBJdCBkb2VzbiYjMzk7dCBtZWFuIHRoYXQgd2UgYWN0dWFsbHkgKmhhbmRsZSoKLSAqIHRoZW0sIGJ1dCB0aGF0IGF0IGxlYXN0IHRob3NlIHRoYXQgYXJlIG5vdCBhZHZlcnRpc2VkIHRvIGEgZ3Vlc3QKLSAqIHdpbGwgYmUgUkVTMCBmb3IgdGhhdCBndWVzdC4KLSAqLwotI2RlZmluZSBfX0hDUlhfRUwyX01BU0sJCShCSVRfVUxMKDYpKQotI2RlZmluZSBfX0hDUlhfRUwyX25NQVNLCShHRU5NQVNLX1VMTCgyNCwgMTQpIHwgXAotCQkJCSBHRU5NQVNLX1VMTCgxMSwgNykgIHwgXAotCQkJCSBHRU5NQVNLX1VMTCg1LCAwKSkKLSNkZWZpbmUgX19IQ1JYX0VMMl9SRVMwCQl+KF9fSENSWF9FTDJfbk1BU0sgfCBfX0hDUlhfRUwyX01BU0spCi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMQkJfihfX0hDUlhfRUwyX25NQVNLIHwgXAotCQkJCSAgX19IQ1JYX0VMMl9NQVNLICB8IFwKLQkJCQkgIF9fSENSWF9FTDJfUkVTMCkKLQogLyogSHlwIFByZWZldGNoIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKEhQRkFSL0hERkFSKSAqLwogI2RlZmluZSBIUEZBUl9NQVNLCSh+VUwoMHhmKSkKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKaW5kZXggNWJmM2Q3ZTFkOTJjNzcuLmQ2ZjQzMmIxNTU4ZjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC0yNjYsNiAmIzQzOzI2NiwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdnNlcnJvcl9zdGF0ZV9pc19uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICAoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpICZhbXA7IEhDUlhfRUwyX1RNRUEpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbnYyKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpICZhbXA7JmFtcDsKJiM0MzsJCWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSAmYW1wOyZhbXA7CiYjNDM7CQljcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpICZhbXA7JmFtcDsKJiM0MzsJCWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfbmVzdGVkX252M19jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoaGFzX3ZoZSgpICZhbXA7JmFtcDsga3ZtX2hhc19udjModmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7IGlzX25lc3RlZF9jdHh0KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCShfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSAmYW1wOyBIQ1JfRUwyX05WKSAmYW1wOyZhbXA7CiYjNDM7CQkoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpICZhbXA7IEhDUlhfRUwyX05WVEdFKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFRoZSBsYXlvdXQgb2YgU1BTUiBmb3IgYW4gQUFyY2gzMiBzdGF0ZSBpcyBkaWZmZXJlbnQgd2hlbiBvYnNlcnZlZCBmcm9tIGFuCiAgKiBBQXJjaDY0IFNQU1JfRUx4IG9yIGFuIEFBcmNoMzIgU1BTUl8qLiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgQUFyY2gzMgpAQCAtNjE3LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2luY3JfcGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICovCiBzdGF0aWMgaW5saW5lIHU2NCB2Y3B1X3Nhbml0aXNlZF9jcHRyX2VsMihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdTY0IGNwdHIgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7CiYjNDM7CXU2NCBjcHRyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgQ1BUUl9FTDIpOwogCiAJaWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKQogCQljcHRyID0gdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMShjcHRyKTsKQEAgLTY4Niw2ICYjNDM7NzA2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X3NldF9oY3J4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCQlpZiAoa3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NElTQVIxX0VMMSwgTFM2NCwgTFM2NF9WKSkKIAkJCXZjcHUtJmd0O2FyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfRW5BU1I7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogTlYzIGlzIGEgaG9zdC1zcGVjaWZpYyBleHRlbnNpb24sIGFuZCB3ZSBhbHdheXMgdXNlIGl0CiYjNDM7CQkgKiB3aGVuIHByZXNlbnQgYW5kIHRoYXQgdGhlIGd1ZXN0IHVzZXMgTlYuIEl0IG1heSBiZSBiZQomIzQzOwkJICogaGlkZGVuIGZyb20gdGhlIGd1ZXN0IHRob3VnaC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZjcHVfaGFzX252KHZjcHUpICZhbXA7JmFtcDsgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkgewomIzQzOwkJCXZjcHUtJmd0O2FyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfTlZUR0U7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBJZiB0aGUgZ3Vlc3QgaXMgTlYyLWNhcGFibGUsIHRoZW4gd2UgbmVlZCB0byBzZWUKJiM0MzsJCQkgKiBhbGwgdGhlIFRMQklzLCBhcyBjb25maWd1cmVkIGluIEhDUl9FTDIuCiYjNDM7CQkJICogT3RoZXJ3aXNlLCByZWxheCB0aGUgVExCSSB0cmFwcyB0byBvbmx5IFRHRT0wLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgha3ZtX2hhc19udjIodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQkJdmNwdS0mZ3Q7YXJjaC5oY3J4X2VsMiB8PSAoSENSWF9FTDJfTlZuVFRMQiAgfAomIzQzOwkJCQkJCQlIQ1JYX0VMMl9OVm5UVExCSVMpOwomIzQzOwkJfQogCX0KIH0KICNlbmRpZiAvKiBfX0FSTTY0X0tWTV9FTVVMQVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGJhZTJjNGY5MmVmNWMwLi4yNjQ4YzhhNzE3YmEwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNTQzLDYgJiM0Mzs1NDMsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHsKIAlNRENSX0VMMiwJLyogTW9uaXRvciBEZWJ1ZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChFTDIpICovCiAJQ05USENUTF9FTDIsCS8qIENvdW50ZXItdGltZXIgSHlwZXJ2aXNvciBDb250cm9sIHJlZ2lzdGVyICovCiAJWkNSX0VMMiwJLyogU1ZFIENvbnRyb2wgUmVnaXN0ZXIgKEVMMikgKi8KJiM0MzsJSENSX0VMMiwJLyogSHlwZXJ2aXNvciBDb250cm9sIFJlZ2lzdGVyICovCiAKIAkvKiBBbnkgVk5DUi1jYXBhYmxlIHJlZyBnb2VzIGFmdGVyIHRoaXMgcG9pbnQgKi8KIAlNQVJLRVIoX19WTkNSX1NUQVJUX18pLApAQCAtNTcxLDcgJiM0Mzs1NzIsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHsKIAlWTkNSKFRGU1JfRUwxKSwJLyogVGFnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAoRUwxKSAqLwogCVZOQ1IoVlBJRFJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBQcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi8KIAlWTkNSKFZNUElEUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIE11bHRpcHJvY2Vzc29yIElEIFJlZ2lzdGVyICovCi0JVk5DUihIQ1JfRUwyKSwJLyogSHlwZXJ2aXNvciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiYjNDM7CVZOQ1IoTlZIQ1JfRUwyKSwvKiBOViBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KIAlWTkNSKEhTVFJfRUwyKSwJLyogSHlwZXJ2aXNvciBTeXN0ZW0gVHJhcCBSZWdpc3RlciAqLwogCVZOQ1IoVlRUQlJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBUcmFuc2xhdGlvbiBUYWJsZSBCYXNlIFJlZ2lzdGVyICovCiAJVk5DUihWVENSX0VMMiksCS8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oCmluZGV4IDE0MzY2ZDM1Y2U4MmYwLi45ZThhNDlmYThiNjM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bmNyX21hcHBpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oCkBAIC0xMSw3ICYjNDM7MTEsNyBAQAogI2RlZmluZSBWTkNSX1ZUQ1JfRUwyICAgICAgICAgICAweDA0MAogI2RlZmluZSBWTkNSX1ZNUElEUl9FTDIgICAgICAgICAweDA1MAogI2RlZmluZSBWTkNSX0NOVFZPRkZfRUwyICAgICAgICAweDA2MAotI2RlZmluZSBWTkNSX0hDUl9FTDIgICAgICAgICAgICAweDA3OAomIzQzOyNkZWZpbmUgVk5DUl9OVkhDUl9FTDIgICAgICAgICAgMHgwNzgKICNkZWZpbmUgVk5DUl9IU1RSX0VMMiAgICAgICAgICAgMHgwODAKICNkZWZpbmUgVk5DUl9WUElEUl9FTDIgICAgICAgICAgMHgwODgKICNkZWZpbmUgVk5DUl9UUElEUl9FTDIgICAgICAgICAgMHgwOTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwppbmRleCA5YTIyZGYwYzUxMjBmMy4uMTRmYmZhOGU2YjdiNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKQEAgLTc4NSw2ICYjNDM7Nzg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfcmF6W10gPSB7CiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnIwX292ZXJyaWRlOwogc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyMV9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7CiYjNDM7c3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyNF9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMF9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMV9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0emZyMF9vdmVycmlkZTsKQEAgLTg1OCw3ICYjNDM7ODU5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBfX2Z0cl9yZWdfZW50cnkgewogCUFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSMl9FTDEsIGZ0cl9pZF9hYTY0bW1mcjIsCiAJCQkgICAgICAgJmFtcDtpZF9hYTY0bW1mcjJfb3ZlcnJpZGUpLAogCUFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSM19FTDEsIGZ0cl9pZF9hYTY0bW1mcjMpLAotCUFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQpLAomIzQzOwlBUk02NF9GVFJfUkVHX09WRVJSSURFKFNZU19JRF9BQTY0TU1GUjRfRUwxLCBmdHJfaWRfYWE2NG1tZnI0LAomIzQzOwkJCSAgICAgICAmYW1wO2lkX2FhNjRtbWZyNF9vdmVycmlkZSksCiAKIAkvKiBPcDEgPSAwLCBDUm4gPSAxMCwgQ1JtID0gNCAqLwogCUFSTTY0X0ZUUl9SRUcoU1lTX01QQU1JRFJfRUwxLCBmdHJfbXBhbWlkciksCkBAIC0yNjIwLDYgJiM0MzsyNjIyLDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQkJeyAvKiBTZW50aW5lbCAqLyB9CiAJCX0sCiAJfSwKJiM0MzsJewomIzQzOwkJLmRlc2MgPSAmIzM0O0ZFQVRfTlYycDEmIzM0OywKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX05WMlAxLAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsCiYjNDM7CQkubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLAomIzQzOwkJQVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMlAxKQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuZGVzYyA9ICYjMzQ7RkVBVF9OVjMmIzM0OywKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX05WMywKJiM0MzsJCS50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLAomIzQzOwkJLm1hdGNoZXMgPSBoYXNfY3B1aWRfZmVhdHVyZSwKJiM0MzsJCUFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpCiYjNDM7CX0sCiAJewogCQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU18zMkJJVF9FTDBfRE9fTk9UX1VTRSwKIAkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmggYi9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmgKaW5kZXggZDRjN2Q0NWFlNmJjODMuLmQxNWMyY2IxYjBmMjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oCkBAIC01MSw2ICYjNDM7NTEsNyBAQCBQSV9FWFBPUlRfU1lNKGlkX2FhNjRpc2FyMl9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMV9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMl9vdmVycmlkZSk7CiYjNDM7UElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjRfb3ZlcnJpZGUpOwogUElfRVhQT1JUX1NZTShpZF9hYTY0cGZyMF9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRwZnIxX292ZXJyaWRlKTsKIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHNtZnIwX292ZXJyaWRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3BpL2lkcmVnLW92ZXJyaWRlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jCmluZGV4IGJjNTdiMjkwZTVlN2JhLi40ZTQ3NjE2YmNhYzIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jCkBAIC0xMDYsNiAmIzQzOzEwNiwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYyBtbWZyMiBfX3ByZWw2NF9pbml0Y29uc3QgPSB7CiAJfSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYyBtbWZyNCBfX3ByZWw2NF9pbml0Y29uc3QgPSB7CiYjNDM7CS5uYW1lCQk9ICYjMzQ7aWRfYWE2NG1tZnI0JiMzNDssCiYjNDM7CS5vdmVycmlkZQk9ICZhbXA7aWRfYWE2NG1tZnI0X292ZXJyaWRlLAomIzQzOwkuZmllbGRzCQk9IHsKJiM0MzsJCUZJRUxEKCYjMzQ7bnZfZnJhYyYjMzQ7LCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIE5VTEwpLAomIzQzOwkJe30KJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGJvb2wgX19pbml0IHBmcjBfc3ZlX2ZpbHRlcih1NjQgdmFsKQogewogCS8qCkBAIC0yMjAsNiAmIzQzOzIyOSw3IEBAIFBSRUw2NChjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjLCByZWcpIHJlZ3NbXSBfX3ByZWw2NF9pbml0Y29uc3QgPSB7CiAJeyAmYW1wO21tZnIwCX0sCiAJeyAmYW1wO21tZnIxCX0sCiAJeyAmYW1wO21tZnIyCX0sCiYjNDM7CXsgJmFtcDttbWZyNAl9LAogCXsgJmFtcDtwZnIwIAl9LAogCXsgJmFtcDtwZnIxIAl9LAogCXsgJmFtcDtpc2FyMQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jCmluZGV4IDQxNTVmZTg5YjU4YTE3Li5kYjYwZmFjYWQ5ZjNjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYwpAQCAtODc2LDggJiM0Mzs4NzYsMTQgQEAgc3RhdGljIHZvaWQgdGltZXJfc2V0X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHRpbWVyX21hcCAqbWFwKQogCWFzc2lnbl9jbGVhcl9zZXRfYml0KHR2dDAyLCBDTlRIQ1RMX0VMMU5WVkNULCBjbHIsIHNldCk7CiAJYXNzaWduX2NsZWFyX3NldF9iaXQodHB0MDIsIENOVEhDVExfRUwxTlZQQ1QsIGNsciwgc2V0KTsKIAotCS8qIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3Nvci4gKi8KLQlzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3NvciwgdW5sZXNzCiYjNDM7CSAqIHdlIGFyZSBzdXJlIENOVEtDVExfRUwxIGlzIGNvbXBsZXRlbHkgc3RhdGVmdWwgd2l0aCBGRUFUX05WMnAxLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpCiYjNDM7CQlzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7CiYjNDM7CWVsc2UKJiM0MzsJCXN5c3JlZ19jbGVhcl9zZXQoY250a2N0bF9lbDEsIGNsciwgc2V0KTsKIH0KIAogdm9pZCBrdm1fdGltZXJfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jIGIvYXJjaC9hcm02NC9rdm0vY29uZmlnLmMKaW5kZXggMDYyMjE2MmIwODllNTAuLjdlODY0NzkxNDI3MjM0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9jb25maWcuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9jb25maWcuYwpAQCAtMjI1LDYgJiM0MzsyMjUsNyBAQCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2MgewogI2RlZmluZSBGRUFUX0hDWAkJSURfQUE2NE1NRlIxX0VMMSwgSENYLCBJTVAKICNkZWZpbmUgRkVBVF9TMlBJRQkJSURfQUE2NE1NRlIzX0VMMSwgUzJQSUUsIElNUAogI2RlZmluZSBGRUFUX0dDSUUJCUlEX0FBNjRQRlIyX0VMMSwgR0NJRSwgSU1QCiYjNDM7I2RlZmluZSBGRUFUX05WMwkJSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzCiAKIHN0YXRpYyBib29sIG5vdF9mZWF0X2FhNjRlbDMoc3RydWN0IGt2bSAqa3ZtKQogewpAQCAtOTA0LDYgJiM0Mzs5MDUsMTIgQEAgc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVBfRkdUKGhkZmd3dHIyX2Rlc2MsIGhkZmd3dHIyX21hc2tzLAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0gewomIzQzOwlORUVEU19GRUFUKEhDUlhfRUwyX05WVEdFCQl8CiYjNDM7CQkgICBIQ1JYX0VMMl9OVm5UVExCCQl8CiYjNDM7CQkgICBIQ1JYX0VMMl9OVm5UVExCSVMJCXwKJiM0MzsJCSAgIEhDUlhfRUwyX05WblRUTEJPUywKJiM0MzsJCSAgIEZFQVRfTlYzKSwKJiM0MzsJTkVFRFNfRkVBVChIQ1JYX0VMMl9TUk1BU0tFbiwgRkVBVF9TUk1BU0spLAogCU5FRURTX0ZFQVQoSENSWF9FTDJfUEFDTUVuLCBmZWF0X3BhdXRoX2xyKSwKIAlORUVEU19GRUFUKEhDUlhfRUwyX0VuRlBNLCBGRUFUX0ZQTVIpLAogCU5FRURTX0ZFQVQoSENSWF9FTDJfR0NTRW4sIEZFQVRfR0NTKSwKQEAgLTkzMyw3ICYjNDM7OTQwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3J4X2ZlYXRfbWFwW10gPSB7CiB9OwogCiAKLXN0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKGhjcnhfZGVzYywgX19IQ1JYX0VMMiwKJiM0MztzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3J4X2Rlc2MsIEhDUlhfRUwyLAogCQkJICAgICAgaGNyeF9mZWF0X21hcCwgRkVBVF9IQ1gpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0gewpAQCAtMTAxMCw2ICYjNDM7MTAxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyX2ZlYXRfbWFwW10gPSB7CiBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3JfZGVzYywgSENSX0VMMiwKIAkJCSAgICAgIGhjcl9mZWF0X21hcCwgRkVBVF9BQTY0RUwyKTsKIAomIzQzO3N0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKG52aGNyX2Rlc2MsIE5WSENSX0VMMiwKJiM0MzsJCQkgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfTlYzKTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgc2N0bHIyX2ZlYXRfbWFwW10gPSB7CiAJTkVFRFNfRkVBVChTQ1RMUjJfRUwxX05NRUEJfAogCQkgICBTQ1RMUjJfRUwxX0VBU0UsCkBAIC0xMzg0LDYgJiM0MzsxMzk0LDcgQEAgdm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZCkKIAljaGVja19yZWdfZGVzYygmYW1wO2hkZmd3dHIyX2Rlc2MpOwogCWNoZWNrX3JlZ19kZXNjKCZhbXA7aGNyeF9kZXNjKTsKIAljaGVja19yZWdfZGVzYygmYW1wO2hjcl9kZXNjKTsKJiM0MzsJY2hlY2tfcmVnX2Rlc2MoJmFtcDtudmhjcl9kZXNjKTsKIAljaGVja19yZWdfZGVzYygmYW1wO3NjdGxyMl9kZXNjKTsKIAljaGVja19yZWdfZGVzYygmYW1wO3RjcjJfZWwyX2Rlc2MpOwogCWNoZWNrX3JlZ19kZXNjKCZhbXA7c2N0bHJfZWwxX2Rlc2MpOwpAQCAtMTU3OSwxMSAmIzQzOzE1OTAsMjEgQEAgc3RydWN0IHJlc3ggZ2V0X3JlZ19maXhlZF9iaXRzKHN0cnVjdCBrdm0gKmt2bSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpCiAJCWJyZWFrOwogCWNhc2UgSENSWF9FTDI6CiAJCXJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCAmYW1wO2hjcnhfZGVzYywgMCwgMCk7Ci0JCXJlc3gucmVzMSB8PSBfX0hDUlhfRUwyX1JFUzE7CiAJCWJyZWFrOwogCWNhc2UgSENSX0VMMjoKIAkJcmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sICZhbXA7aGNyX2Rlc2MsIDAsIDApOwogCQlicmVhazsKJiM0MzsJY2FzZSBOVkhDUl9FTDI6CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBhcHBseSBzYW5pdGlzYXRpb24gaWYgd2UgZG8gaGF2ZSBGRUFUX05WMy4KJiM0MzsJCSAqIE90aGVyd2lzZSwgdGhlIHJlZ2lzdGVyIGFsaWFzZXMgd2l0aCBIQ1JfRUwyIGluIFZOQ1IsCiYjNDM7CQkgKiBhbmQgd2UmIzM5O3JlIGJldHRlciBvZmYgcmVseWluZyBvbiBkYXRhIHRyYW5zZmVycyBiZXR3ZWVuCiYjNDM7CQkgKiBOVkhDUl9FTDIgYW5kIEhDUl9FTDIgdG8gc2FuaXRpc2UgdGhpbmdzLgomIzQzOwkJICovCiYjNDM7CQlyZXN4ID0gKGt2bV9oYXNfbnYzKGt2bSkgPwomIzQzOwkJCWNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sICZhbXA7bnZoY3JfZGVzYywgMCwgMCkgOgomIzQzOwkJCSh0eXBlb2YocmVzeCkpe30pOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBTQ1RMUjJfRUwxOgogCWNhc2UgU0NUTFIyX0VMMjoKIAkJcmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sICZhbXA7c2N0bHIyX2Rlc2MsIDAsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMKaW5kZXggM2M4MmYzOTI4NDVkMTQuLmY1ZGM1NzhkOGM5ODU2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMKQEAgLTkwLDYgJiM0Mzs5MCw3IEBAIGVudW0gY2d0X2dyb3VwX2lkIHsKIAlDR1RfSENSWF9FbkZQTSwKIAlDR1RfSENSWF9UQ1IyRW4sCiAJQ0dUX0hDUlhfU0NUTFIyRW4sCiYjNDM7CUNHVF9IQ1JYX25OVlRHRSwKIAogCUNHVF9DTlRIQ1RMX0VMMVRWVCwKIAlDR1RfQ05USENUTF9FTDFUVkNULApAQCAtMTIxLDYgJiM0MzsxMjIsOCBAQCBlbnVtIGNndF9ncm91cF9pZCB7CiAJQ0dUX01EQ1JfVERFX1REUkEsCiAJQ0dUX01EQ1JfVERDQ19UREVfVERBLAogCiYjNDM7CUNHVF9IQ1JfTlZfSENSWF9uTlZUR0UsCiYjNDM7CiAJQ0dUX0lDSF9IQ1JfVENfVERJUiwKIAogCS8qCkBAIC00MTMsNiAmIzQzOzQxNiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRyYXBfYml0cyBjb2Fyc2VfdHJhcF9iaXRzW10gPSB7CiAJCS5tYXNrCQk9IEhDUlhfRUwyX1NDVExSMkVuLAogCQkuYmVoYXZpb3VyCT0gQkVIQVZFX0ZPUldBUkRfUlcsCiAJfSwKJiM0MzsJW0NHVF9IQ1JYX25OVlRHRV0gPSB7CiYjNDM7CQkuaW5kZXgJCT0gSENSWF9FTDIsCiYjNDM7CQkudmFsdWUJCT0gMCwKJiM0MzsJCS5tYXNrCQk9IEhDUlhfRUwyX05WVEdFLAomIzQzOwkJLmJlaGF2aW91cgk9IEJFSEFWRV9GT1JXQVJEX1JXLAomIzQzOwl9LAogCVtDR1RfQ05USENUTF9FTDFUVlRdID0gewogCQkuaW5kZXgJCT0gQ05USENUTF9FTDIsCiAJCS52YWx1ZQkJPSBDTlRIQ1RMX0VMMVRWVCwKQEAgLTQ2OCw2ICYjNDM7NDc3LDcgQEAgc3RhdGljIGNvbnN0IGVudW0gY2d0X2dyb3VwX2lkICpjb2Fyc2VfY29udHJvbF9jb21ib1tdID0gewogCQkJCQlDR1RfSENSX1RWTSwgQ0dUX0hDUl9UUlZNLCBDR1RfSENSWF9TQ1RMUjJFbiksCiAJTUNCKENHVF9IQ1JfVFBVX1RJQ0FCLAkJQ0dUX0hDUl9UUFUsIENHVF9IQ1JfVElDQUIpLAogCU1DQihDR1RfSENSX1RQVV9UT0NVLAkJQ0dUX0hDUl9UUFUsIENHVF9IQ1JfVE9DVSksCiYjNDM7CU1DQihDR1RfSENSX05WX0hDUlhfbk5WVEdFLAlDR1RfSENSX05WLCBDR1RfSENSWF9uTlZUR0UpLAogCU1DQihDR1RfSENSX05WMV9uTlYyX0VOU0NYVCwJQ0dUX0hDUl9OVjFfbk5WMiwgQ0dUX0hDUl9FTlNDWFQpLAogCU1DQihDR1RfTURDUl9UUE1fVFBNQ1IsCQlDR1RfTURDUl9UUE0sIENHVF9NRENSX1RQTUNSKSwKIAlNQ0IoQ0dUX01EQ1JfVFBNX0hQTU4sCQlDR1RfTURDUl9UUE0sIENHVF9NRENSX0hQTU4pLApAQCAtODUzLDYgJiM0Mzs4NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnIGVuY29kaW5nX3RvX2NndFtdIF9faW5pdGNvbnN0ID0gewogCVNSX1RSQVAoU1lTX1NDVExSMl9FTDIsCQlDR1RfSENSX05WKSwKIAlTUl9SQU5HRV9UUkFQKFNZU19IQ1JfRUwyLAogCQkgICAgICBTWVNfSENSWF9FTDIsCUNHVF9IQ1JfTlYpLAomIzQzOwlTUl9UUkFQKFNZU19OVkhDUl9FTDIsCQlDR1RfSENSX05WX0hDUlhfbk5WVEdFKSwKIAlTUl9UUkFQKFNZU19TTVBSSU1BUF9FTDIsCUNHVF9IQ1JfTlYpLAogCVNSX1RSQVAoU1lTX1NNQ1JfRUwyLAkJQ0dUX0hDUl9OViksCiAJU1JfUkFOR0VfVFJBUChTWVNfVFRCUjBfRUwyLApAQCAtMjMyMCw3ICYjNDM7MjMzMSw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZCkKIAlCVUlMRF9CVUdfT04oX19OUl9DR1RfR1JPVVBfSURTX18gJmd0OyBCSVQoVENfQ0dUX0JJVFMpKTsKIAlCVUlMRF9CVUdfT04oX19OUl9GR1RfR1JPVVBfSURTX18gJmd0OyBCSVQoVENfRkdUX0JJVFMpKTsKIAlCVUlMRF9CVUdfT04oX19OUl9GR19GSUxURVJfSURTX18gJmd0OyBCSVQoVENfRkdGX0JJVFMpKTsKLQlCVUlMRF9CVUdfT04oX19IQ1JYX0VMMl9NQVNLICZhbXA7IF9fSENSWF9FTDJfbk1BU0spOwogCiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCk7IGkmIzQzOyYjNDM7KSB7CiAJCWNvbnN0IHN0cnVjdCBlbmNvZGluZ190b190cmFwX2NvbmZpZyAqY2d0ID0gJmFtcDtlbmNvZGluZ190b19jZ3RbaV07CkBAIC0yMzQ2LDEwICYjNDM7MjM1Niw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZCkKIAkJfQogCX0KIAotCWlmIChfX0hDUlhfRUwyX1JFUzAgIT0gSENSWF9FTDJfUkVTMCkKLQkJa3ZtX2luZm8oJiMzNDtTYW5pdGlzZWQgSENSX0VMMl9SRVMwID0gJTAxNmxseCwgZXhwZWN0aW5nICUwMTZsbHhcbiYjMzQ7LAotCQkJIF9fSENSWF9FTDJfUkVTMCwgSENSWF9FTDJfUkVTMCk7Ci0KIAlrdm1faW5mbygmIzM0O252OiAlbGQgY29hcnNlIGdyYWluZWQgdHJhcCBoYW5kbGVyc1xuJiMzNDssCiAJCSBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgKaW5kZXggNGJmNjI0YTQ5NTkxZGYuLjdiMjcyOTZjOTQ2MDcwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oCkBAIC0xMDgsOSAmIzQzOzEwOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV9jcHRyX3RyYXBzX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3QKIAkgKiB3cml0aW5nIHRvIENQVFJfRUwyIHZpYSBDUEFDUl9FTDEgY2FuJiMzOTt0IHNldCBhbnkgb2YgVENQQUMgb3IgVFRBLAogCSAqIGFzIHRoZXkgYXJlIFJFUzAgaW4gdGhlIGd1ZXN0JiMzOTtzIHZpZXcuIFRvIHdvcmsgYXJvdW5kIGl0LCB0cmFwIHRoZQotCSAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4mIzM5O3Qgc2V0Li4uCiYjNDM7CSAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4mIzM5O3Qgc2V0LiBGRUFUX05WMnAxIGZpeGVzIGl0LgogCSAqLwotCWlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpICZhbXA7JmFtcDsgaXNfaHlwX2N0eHQodmNwdSkpCiYjNDM7CWlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpICZhbXA7JmFtcDsKJiM0MzsJICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkgJmFtcDsmYW1wOyBpc19oeXBfY3R4dCh2Y3B1KSkKIAkJdmFsIHw9IENQVFJfRUwyX1RDUEFDOwogCiAJLyoKQEAgLTMyNSw2ICYjNDM7MzI2LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RlYWN0aXZhdGVfdHJhcHNfbXBhbSh2b2lkKQogCQl3cml0ZV9zeXNyZWdfcyhNUEFNSENSX0hPU1RfRkxBR1MsIFNZU19NUEFNSENSX0VMMik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEp1c3QgbGlrZSBmb3IgSENSX0VMMiwgd2UgY2FuJiMzOTt0IGxldCB0aGUgZ3Vlc3QgbWVzcyB3aXRoIHNvbWUgb2YgdGhlCiYjNDM7ICogYmFzaWNzIHdlIHJlbHkgb24gaW4gSENSWF9FTDIuIEhvd2V2ZXIsIHRoZSBtYWpvciBkaWZmZXJlbmNlIGlzIHRoYXQKJiM0MzsgKiBIQ1JYX0VMMiBvbmx5IGFmZmVjdHMgRUwxLCBhbmQgbmV2ZXIgRUwyIChzdWRkZW4gb3V0YnVyc3Qgb2Ygc2FuaXR5LCBJCiYjNDM7ICogZ3Vlc3MpLiBTbyBpdCBpcyBhbHdheXMgdGhlIGd1ZXN0IGluZmxpY3RpbmcgaXQgb24gaXRzIG93biBndWVzdHguCiYjNDM7ICoKJiM0MzsgKiBUaGluZ3Mgd2UgZG9uJiMzOTt0IHdhbnQgdG8gbGV0IHRoZSBndWVzdCBjb250cm9sIGFyZToKJiM0MzsgKgomIzQzOyAqIC0gVE1FQTogVGhhdCYjMzk7cyBmb3IgdXMgdG8gZGVjaWRlIGhvdyBhbiBTRUEgaXMgcm91dGVkLCBub3QgdGhlIGd1ZXN0LgomIzQzOyAqCiYjNDM7ICogLSBQVFRXSTogU2ltaWxhcmx5LCBpdCBpcyBmb3IgdXMgdG8gZGVjaWRlIHdoZXRoZXIgUmVkdWNlZCBDb2hlcmVuY3kgZm9yCiYjNDM7ICogICB0aGUgUFRXIGlzIGEgdGhpbmcuIEl0IHJlYWxseSBpc24mIzM5O3QuCiYjNDM7ICoKJiM0MzsgKiAtIEVuSURDUDEyODogV2UgZG9uJiMzOTt0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE5WX0hDUlhfR1VFU1RfRVhDTFVERQkoSENSWF9FTDJfVE1FQQkgICAgfCBIQ1JYX0VMMl9QVFRXSSB8IFwKJiM0MzsJCQkJIEhDUlhfRUwyX0VuSURDUDEyOCkKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9jcHVfY29udGV4dCAqaGN0eHQgPSBob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCk7CkBAIC0zNTAsOCAmIzQzOzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXU2NCBoY3J4ID0gdmNwdS0mZ3Q7YXJjaC5oY3J4X2VsMjsKIAkJaWYgKGlzX25lc3RlZF9jdHh0KHZjcHUpKSB7CiAJCQl1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpOwotCQkJaGNyeCB8PSB2YWwgJmFtcDsgX19IQ1JYX0VMMl9NQVNLOwotCQkJaGNyeCAmYW1wOz0gfih+dmFsICZhbXA7IF9fSENSWF9FTDJfbk1BU0spOwomIzQzOwkJCWhjcnggfD0gKHZhbCAmYW1wOyB+TlZfSENSWF9HVUVTVF9FWENMVURFKTsKJiM0MzsJCQloY3J4ICZhbXA7PSB+KH52YWwgJmFtcDsgfk5WX0hDUlhfR1VFU1RfRVhDTFVERSk7CiAJCX0KIAogCQljdHh0X3N5c19yZWcoaGN0eHQsIEhDUlhfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX0hDUlhfRUwyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaCBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaAppbmRleCBhMTdjYmU3NTgyZGU5MC4uYzM4Mjg0OGQzMTk0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmgKQEAgLTE3Miw2ICYjNDM7MTcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0KQogCiAJaWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSkKIAkJY3R4dF9zeXNfcmVnKGN0eHQsIFNDVExSMl9FTDEpID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TQ1RMUjIpOwomIzQzOwomIzQzOwkvKiBSZXRyaWV2ZSBMMiYjMzk7cyBIQ1JfRUwyLCBhbmQgc2F2ZSBpdCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwlpZiAoaXNfbmVzdGVkX252M19jdHh0KGN0eHRfdG9fdmNwdShjdHh0KSkpCiYjNDM7CQljdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMl9yZXR1cm5fc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqY3R4dCkKQEAgLTI4NSw2ICYjNDM7Mjg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19yZXN0b3JlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0LAogCiAJaWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSkKIAkJd3JpdGVfc3lzcmVnX2VsMShjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSksIFNZU19TQ1RMUjIpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQdWJsaXNoIHRoZSBMMiB2aWV3IG9mIEhDUl9FTDIgdG8gdGhlIEhXIGlmIEwxIGlzIHVzaW5nIE5WMy4KJiM0MzsJICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSYjMzk7cyBvd24gVk5DUi4KJiM0MzsJICovCiYjNDM7CWlmIChpc19uZXN0ZWRfbnYzX2N0eHQoY3R4dF90b192Y3B1KGN0eHQpKSkKJiM0MzsJCXdyaXRlX3N5c3JlZ19zKGN0eHRfc3lzX3JlZyhjdHh0LCBOVkhDUl9FTDIpLCBTWVNfTlZIQ1JfRUwyKTsKIH0KIAogLyogUmVhZCB0aGUgVkNQVSBzdGF0ZSYjMzk7cyBQU1RBVEUsIGJ1dCB0cmFuc2xhdGUgKHYpRUwyIHRvIEVMMS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCmluZGV4IGJiZTljZWJkM2Q5ZDU3Li5mMTI5ZjIyZjE1NjE4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCkBAIC03MCw2ICYjNDM7NzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKQogCQkJaGNyIHw9IEhDUl9OVjE7CiAKJiM0MzsJCS8qIFB1Ymxpc2ggdGhlIGd1ZXN0JiMzOTtzIHZpZXcgb2YgSENSX0VMMiB0byB0aGUgSFcgKi8KJiM0MzsJCWlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpICZhbXA7JmFtcDsgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkKJiM0MzsJCQl3cml0ZV9zeXNyZWdfcyhfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7CiYjNDM7CQllbHNlCiYjNDM7CQkJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpOwomIzQzOwogCQkvKgogCQkgKiBOb3RoaW5nIGluIEhDUl9FTDIgc2hvdWxkIGltcGFjdCBydW5uaW5nIGluIGh5cGVydmlzb3IKIAkJICogY29udGV4dCwgYXBhcnQgZnJvbSBiaXRzIHdlIGhhdmUgZGVmaW5lZCBhcyBSRVN4IChFMkgsCkBAIC0zMzksNiAmIzQzOzM0NSwxMCBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV9lcmV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiAJdTY0IGVzciA9IGt2bV92Y3B1X2dldF9lc3IodmNwdSk7CiAJdTY0IHNwc3IsIGVsciwgbW9kZTsKIAomIzQzOwkvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovCiYjNDM7CWlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpICZhbXA7JmFtcDsgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKgogCSAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lCiAJICogaWYgdGhpcyBpcyBhIFZIRSBndWVzdCBoeXBlcnZpc29yIHJldHVybmluZyB0byBpdHMgb3duCkBAIC0zNDksOCAmIzQzOzM1OSw4IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSkKIAkgKiBVbmxlc3MgdGhlIHRyYXAgaGFzIHRvIGJlIGZvcndhcmRlZCBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsCiAJICogb2YgY291cnNlLi4uCiAJICovCi0JaWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSAmYW1wOyBIQ1JfTlYpIHx8Ci0JICAgIChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSAmYW1wOyBIRkdJVFJfRUwyX0VSRVQpKQomIzQzOwlpZiAoaXNfbmVzdGVkX2N0eHQodmNwdSkgfHwKJiM0MzsJICAgIF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhGR0lUUl9FTDIpICZhbXA7IEhGR0lUUl9FTDJfRVJFVCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJc3BzciA9IHJlYWRfc3lzcmVnX2VsMShTWVNfU1BTUik7CkBAIC00NDEsNiAmIzQzOzQ1MSw5IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2NwYWNyX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKQogCXU2NCBlc3IgPSBrdm1fdmNwdV9nZXRfZXNyKHZjcHUpOwogCWludCBydDsKIAomIzQzOwlpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghaXNfaHlwX2N0eHQodmNwdSkgfHwgZXNyX3N5czY0X3RvX3N5c3JlZyhlc3IpICE9IFNZU19DUEFDUl9FTDEpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtNTM0LDE5ICYjNDM7NTQ3LDE3IEBAIHN0YXRpYyBjb25zdCBleGl0X2hhbmRsZXJfZm4gaHlwX2V4aXRfaGFuZGxlcnNbXSA9IHsKIAlbMHgzRl0JCQkJPSBrdm1faHlwX2hhbmRsZV9pbXBkZWYsCiB9OwogCi1zdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKQomIzQzO3N0YXRpYyB2b2lkIGZpeHVwX252X2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN5bmNocm9uaXplX3ZjcHVfcHN0YXRlKHZjcHUpOwotCiAJLyoKIAkgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3CiAJICogc28gdGhhdCB0aGUgdXN1YWwgaGVscGVycyB3b3JrIGNvcnJlY3RseS4gVGhpcyBlbmZvcmNlcyBvdXIKIAkgKiBpbnZhcmlhbnQgdGhhdCB0aGUgZ3Vlc3QmIzM5O3MgSFlQIGNvbnRleHQgc3RhdHVzIGlzIHByZXNlcnZlZAogCSAqIGFjcm9zcyBhIHJ1bi4KIAkgKi8KLQlpZiAodmNwdV9oYXNfbnYodmNwdSkgJmFtcDsmYW1wOwotCSAgICB1bmxpa2VseShob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpKSkgewomIzQzOwlpZiAodW5saWtlbHkoaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSkpIHsKIAkJdTY0IG1vZGUgPSAqdmNwdV9jcHNyKHZjcHUpICZhbXA7IChQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpOwomIzQzOwkJdTY0IGhjcjsKIAogCQlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSBQU1JfTU9ERV9FTDF0OgpAQCAtNTU5LDExICYjNDM7NTcwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiAKIAkJKnZjcHVfY3Bzcih2Y3B1KSAmYW1wOz0gfihQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpOwogCQkqdmNwdV9jcHNyKHZjcHUpIHw9IG1vZGU7CiYjNDM7CiYjNDM7CQkvKiBQdWJsaXNoIHRoZSBsYXRlc3QgSENSX0VMMiB0byB0aGUgZW11bGF0aW9uICovCiYjNDM7CQloY3IgPSAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgICAgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkgPwomIzQzOwkJCXJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMikgOgomIzQzOwkJCV9fdmNwdV9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMik7CiYjNDM7CiYjNDM7CQlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTsKIAl9CiAKIAkvKiBBcHBseSBleHRyZW1lIHBhcmFub2lhISAqLwotCUJVR19PTih2Y3B1X2hhc19udih2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgICAgICEhaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSAhPSBpc19oeXBfY3R4dCh2Y3B1KSk7CiYjNDM7CUJVR19PTighIWhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkgIT0gaXNfaHlwX2N0eHQodmNwdSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiYjNDM7ewomIzQzOwlzeW5jaHJvbml6ZV92Y3B1X3BzdGF0ZSh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKHZjcHVfaGFzX252KHZjcHUpKQomIzQzOwkJZml4dXBfbnZfZ3Vlc3RfZXhpdCh2Y3B1KTsKIAogCXJldHVybiBfX2ZpeHVwX2d1ZXN0X2V4aXQodmNwdSwgZXhpdF9jb2RlLCBoeXBfZXhpdF9oYW5kbGVycyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuYwppbmRleCBiZTY4NWI2M2U4Y2YyNi4uMGM0ZWYxY2UzMmFlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuYwpAQCAtNDIsMTAgJiM0Mzs0MiwxMiBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl1NjQgdmFsOwogCiAJCS8qCi0JCSAqIFdlIGRvbiYjMzk7dCBzYXZlIENQVFJfRUwyLCBhcyBhY2Nlc3NlcyB0byBDUEFDUl9FTDEKLQkJICogYXJlIGFsd2F5cyB0cmFwcGVkLCBlbnN1cmluZyB0aGF0IHRoZSBpbi1tZW1vcnkKLQkJICogY29weSBpcyBhbHdheXMgdXAtdG8tZGF0ZS4gQSBzbWFsbCBibGVzc2luZy4uLgomIzQzOwkJICogV2l0aG91dCBGRUFUX05WMnAxLCB3ZSBkb24mIzM5O3Qgc2F2ZSBDUFRSX0VMMiwgYXMgYWNjZXNzZXMKJiM0MzsJCSAqIHRvIENQQUNSX0VMMSBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlCiYjNDM7CQkgKiBpbi1tZW1vcnkgY29weSBpcyBhbHdheXMgdXAtdG8tZGF0ZS4gQSBzbWFsbCBibGVzc2luZy4uLgogCQkgKi8KJiM0MzsJCWlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpCiYjNDM7CQkJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIENQVFJfRUwyLCByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKSk7CiAJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIsCSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSKSk7CiAJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMF9FTDIsCSByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIwKSk7CiAJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMV9FTDIsCSByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIxKSk7CkBAIC02NywxMSAmIzQzOzY5LDE4IEBAIHN0YXRpYyB2b2lkIF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCSAqIFRoZSBFTDEgdmlldyBvZiBDTlRLQ1RMX0VMMSBoYXMgYSBidW5jaCBvZiBSRVMwIGJpdHMgd2hlcmUKIAkJICogdGhlIGludGVyZXN0aW5nIENOVEhDVExfRUwyIGJpdHMgbGl2ZS4gU28gcHJlc2VydmUgdGhlc2UKIAkJICogYml0cyB3aGVuIHJlYWRpbmcgYmFjayB0aGUgZ3Vlc3QtdmlzaWJsZSB2YWx1ZS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBXaGlsZSBOVjJwMSBmaXhlcyBzb21lIG9mIHRoYXQsIGl0IG1ha2VzIENOVEhDVExfRUwyLkVDVgomIzQzOwkJICogZXZlbiBtb3JlIGJyb2tlbiB0aGFuIGl0IGFscmVhZHkgd2FzIHdpdGggTlYyLgogCQkgKi8KIAkJdmFsID0gcmVhZF9zeXNyZWdfZWwxKFNZU19DTlRLQ1RMKTsKLQkJdmFsICZhbXA7PSBDTlRLQ1RMX1ZBTElEX0JJVFM7Ci0JCV9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgJmFtcDs9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTsKLQkJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTsKJiM0MzsJCWlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKSB7CiYjNDM7CQkJdmFsICZhbXA7PSBDTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCAmYW1wOz0sIH5DTlRLQ1RMX1ZBTElEX0JJVFMpOwomIzQzOwkJCV9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgfD0sIHZhbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTsKJiM0MzsJCX0KIAl9CiAKIAlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU1BfRUwyLAkgcmVhZF9zeXNyZWcoc3BfZWwxKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCmluZGV4IGRmYjk2ZWRiZGM0M2M2Li42NGM4ZmI4MmZhZGY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTE3MjgsNyAmIzQzOzE3MjgsNyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbCkKIAkJICogWW91IGdldCBFSVRIRVIKIAkJICoKIAkJICogLSBGRUFUX1ZIRSB3aXRob3V0IEZFQVRfRTJIMAotCQkgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMgomIzQzOwkJICogLSBGRUFUX05WIGxpbWl0ZWQgdG8gRkVBVF9OVjIocDEpL05WMwogCQkgKiAtIEhDUl9FTDIuTlYxIGJlaW5nIFJFUzAKIAkJICoKIAkJICogT1IKQEAgLTE3NDAsNyAmIzQzOzE3NDAsMTMgQEAgdTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpCiAJCWlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMl9FMkgwLCBrdm0tJmd0O2FyY2gudmNwdV9mZWF0dXJlcykpIHsKIAkJCXZhbCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQl2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTsKJiM0MzsJCQlpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSkKJiM0MzsJCQkJdmFsID0gSURfUkVHX0xJTUlUX0ZJRUxEX0VOVU0odmFsLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpOwomIzQzOwkJCWVsc2UgaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSkKJiM0MzsJCQkJdmFsID0gSURfUkVHX0xJTUlUX0ZJRUxEX0VOVU0odmFsLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJQMSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQl2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTsKJiM0MzsJCQl2YWwgJmFtcDs9IH5JRF9BQTY0TU1GUjRfRUwxX0UySDA7CiAJCQl2YWwgfD0gU1lTX0ZJRUxEX1BSRVBfRU5VTShJRF9BQTY0TU1GUjRfRUwxLCBFMkgwLCBOSV9OVjEpOwogCQl9CiAJCWJyZWFrOwpAQCAtMTgyNiw2ICYjNDM7MTgzMiwxMCBAQCBpbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIEhDUl9FTDIpOwogCXNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JfRUwyLCByZXN4KTsKIAomIzQzOwkvKiBOVkhDUl9FTDIgKi8KJiM0MzsJcmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIE5WSENSX0VMMik7CiYjNDM7CXNldF9zeXNyZWdfbWFza3Moa3ZtLCBOVkhDUl9FTDIsIHJlc3gpOwomIzQzOwogCS8qIEhDUlhfRUwyICovCiAJcmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIEhDUlhfRUwyKTsKIAlzZXRfc3lzcmVnX21hc2tzKGt2bSwgSENSWF9FTDIsIHJlc3gpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjBhZWIyZTczNmZkZTM3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTE4Myw4ICYjNDM7MTgzLDYgQEAgc3RhdGljIHZvaWQgbG9jYXRlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcsCiAJc3dpdGNoIChyZWcpIHsKIAkJTUFQUEVEX0VMMl9TWVNSRUcoU0NUTFJfRUwyLCAgIFNDVExSX0VMMSwKIAkJCQkgIHRyYW5zbGF0ZV9zY3Rscl9lbDJfdG9fc2N0bHJfZWwxCSAgICAgKTsKLQkJTUFQUEVEX0VMMl9TWVNSRUcoQ1BUUl9FTDIsICAgIENQQUNSX0VMMSwKLQkJCQkgIHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDEJICAgICApOwogCQlNQVBQRURfRUwyX1NZU1JFRyhUVEJSMF9FTDIsICAgVFRCUjBfRUwxLAogCQkJCSAgdHJhbnNsYXRlX3R0YnIwX2VsMl90b190dGJyMF9lbDEJICAgICApOwogCQlNQVBQRURfRUwyX1NZU1JFRyhUVEJSMV9FTDIsICAgVFRCUjFfRUwxLCAgIE5VTEwJICAgICApOwpAQCAtMjEwLDYgJiM0MzsyMDgsMzMgQEAgc3RhdGljIHZvaWQgbG9jYXRlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcsCiAJCWxvYy0mZ3Q7bG9jID0gKChpc19oeXBfY3R4dCh2Y3B1KSAmYW1wOyZhbXA7IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID8KIAkJCSAgICBTUl9MT0NfU1BFQ0lBTCA6IFNSX0xPQ19NRU1PUlkpOwogCQlicmVhazsKJiM0MzsJY2FzZSBDUFRSX0VMMjoKJiM0MzsJCS8qCiYjNDM7CQkgKiBDUFRSX0VMMiBpcyBqdXN0IGFzIHNwZWNpYWwsIGFuZCBuZWVkcyBhIGNlcnRhaW4gYW1vdW50CiYjNDM7CQkgKiBvZiBoYW5kaG9sZGluZy4gSXQgYWx3YXlzIGxpdmVzIGluIG1lbW9yeSwgZHVlIHRvIGJlaW5nCiYjNDM7CQkgKiBoZWF2aWx5IHRyYXBwZWQgdGhhbmtzIHRvIENQQUNSX0VMMS5UQ1BBQyBiZWluZyBSRVMwLgomIzQzOwkJICogRkVBVF9OVjJwMSBmaXhlcyB0aGlzLgomIzQzOwkJICovCiYjNDM7CQlsb2NhdGVfbWFwcGVkX2VsMl9yZWdpc3Rlcih2Y3B1LCBDUFRSX0VMMiwgQ1BBQ1JfRUwxLAomIzQzOwkJCQkJICAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMSwKJiM0MzsJCQkJCSAgIGxvYyk7CiYjNDM7CQlpZiAoaXNfaHlwX2N0eHQodmNwdSkgJmFtcDsmYW1wOyB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKQomIzQzOwkJCWxvYy0mZ3Q7bG9jID0gU1JfTE9DX1NQRUNJQUw7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBOVkhDUl9FTDI6CiYjNDM7CQkvKgomIzQzOwkJICogWWVzLCBOVkhDUl9FTDIgbWFwcyB0byBpdHNlbGYgd2hlbiBsb2FkZWQgaW4gbmVzdGVkCiYjNDM7CQkgKiBjb250ZXh0LiBJZiB5b3UgZmVlbCBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaXMgZG91YmxlCiYjNDM7CQkgKiBiYWNraW5nIG9uIGl0c2VsZiB1cHNpZGUgZG93biwgeW91JiMzOTtyZSBub3QgYWxvbmUuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRSgha3ZtX2hhc19udjModmNwdS0mZ3Q7a3ZtKSk7CiYjNDM7CQlpZiAoaXNfaHlwX2N0eHQodmNwdSkpIHsKJiM0MzsJCQlsb2MtJmd0O2xvYyA9IFNSX0xPQ19NRU1PUlk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxvYy0mZ3Q7bG9jID0gU1JfTE9DX0xPQURFRCB8IFNSX0xPQ19NQVBQRUQ7CiYjNDM7CQkJbG9jLSZndDttYXBfcmVnID0gTlZIQ1JfRUwyOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbG9jLSZndDtsb2MgPSBsb2NhdGVfZGlyZWN0X3JlZ2lzdGVyKHZjcHUsIHJlZyk7CiAJfQpAQCAtMjQ5LDYgJiM0MzsyNzQsNyBAQCBzdGF0aWMgdTY0IHJlYWRfc3JfZnJvbV9jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcpCiAJY2FzZSBEQUNSMzJfRUwyOgl2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19EQUNSMzJfRUwyKTsJYnJlYWs7CiAJY2FzZSBJRlNSMzJfRUwyOgl2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19JRlNSMzJfRUwyKTsJYnJlYWs7CiAJY2FzZSBEQkdWQ1IzMl9FTDI6CXZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0RCR1ZDUjMyX0VMMik7CWJyZWFrOwomIzQzOwljYXNlIE5WSENSX0VMMjoJCXZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMik7CWJyZWFrOwogCWRlZmF1bHQ6CQlXQVJOX09OX09OQ0UoMSk7CiAJfQogCkBAIC0yODcsNiAmIzQzOzMxMyw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlX3NyX3RvX2NwdShlbnVtIHZjcHVfc3lzcmVnIHJlZywgdTY0IHZhbCkKIAljYXNlIERBQ1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0RBQ1IzMl9FTDIpOwlicmVhazsKIAljYXNlIElGU1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0lGU1IzMl9FTDIpOwlicmVhazsKIAljYXNlIERCR1ZDUjMyX0VMMjoJd3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfREJHVkNSMzJfRUwyKTsJYnJlYWs7CiYjNDM7CWNhc2UgTlZIQ1JfRUwyOgkJd3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfTlZIQ1JfRUwyKTsJYnJlYWs7CiAJZGVmYXVsdDoJCVdBUk5fT05fT05DRSgxKTsKIAl9CiB9CkBAIC0zMTEsOSAmIzQzOzMzOCwxNiBAQCB1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZykKIAkJc3dpdGNoIChyZWcpIHsKIAkJY2FzZSBDTlRIQ1RMX0VMMjoKIAkJCXZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7Ci0JCQl2YWwgJmFtcDs9IENOVEtDVExfVkFMSURfQklUUzsKLQkJCXZhbCB8PSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByZWcpICZhbXA7IH5DTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJaWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHsKJiM0MzsJCQkJdmFsICZhbXA7PSBDTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJCXZhbCB8PSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByZWcpICZhbXA7IH5DTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJfQogCQkJcmV0dXJuIHZhbDsKJiM0MzsJCWNhc2UgQ1BUUl9FTDI6CiYjNDM7CQkJaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSkKJiM0MzsJCQkJcmV0dXJuIHJlYWRfc3lzcmVnX2VsMShTWVNfQ1BBQ1IpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZyk7CiAJCWRlZmF1bHQ6CiAJCQlXQVJOX09OX09OQ0UoMSk7CiAJCX0KQEAgLTM1OSw2ICYjNDM7MzkzLDkgQEAgdm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBlbnVtIHZjcHVfc3lzcmVnIHJlZykKIAkJCSAqLwogCQkJd3JpdGVfc3lzcmVnX2VsMSh2YWwsIFNZU19DTlRLQ1RMKTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBDUFRSX0VMMjoKJiM0MzsJCQl3cml0ZV9zeXNyZWdfZWwxKHZhbCwgU1lTX0NQQUNSKTsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVdBUk5fT05fT05DRSgxKTsKIAkJfQpAQCAtMjg0MCw2ICYjNDM7Mjg3NywxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXJldHVybiBSRUdfSElEREVOOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBudmhjcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCkKJiM0Mzt7CiYjNDM7CWlmIChlbDJfdmlzaWJpbGl0eSh2Y3B1LCByZCkgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICBrdm1faGFzX2ZlYXQodmNwdS0mZ3Q7a3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBSRUdfSElEREVOOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2N0bHIyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKQogewpAQCAtMzc1Myw2ICYjNDM7MzgwMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHsKIAkJCSBzdmVfZWwyX3Zpc2liaWxpdHkpLAogCiAJRUwyX1JFR19WTkNSKEhDUlhfRUwyLCByZXNldF92YWwsIDApLAomIzQzOwlFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsCiYjNDM7CQkJIG52aGNyX2VsMl92aXNpYmlsaXR5KSwKIAogCUVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksCiAJRUwyX1JFRyhUVEJSMV9FTDIsIGFjY2Vzc19ydywgcmVzZXRfdmFsLCAwKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwppbmRleCA5Yjg1YTg0ZjZmZDQ5NC4uN2UwNDE0NTA5ZTg5YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMKQEAgLTUxLDYgJiM0Mzs1MSw4IEBAIEhBU19MUzY0X1YKIEhBU19MU1VJCiBIQVNfTU9QUwogSEFTX05FU1RFRF9WSVJUCiYjNDM7SEFTX05WMlAxCiYjNDM7SEFTX05WMwogSEFTX0JCTUwyX05PQUJPUlQKIEhBU19QQU4KIEhBU19QTVVWMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9nZW4tc3lzcmVnLmF3ayBiL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sKaW5kZXggODY4NjBhYjY3MmRjNzguLmQ3ZjdjZWI3NjhmZTVjIDEwMDc1NQotLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sKQEAgLTIyOCw3ICYjNDM7MjI4LDcgQEAgJDEgPT0gJiMzNDtFbmRTeXNyZWcmIzM0OyAmYW1wOyZhbXA7IGJsb2NrX2N1cnJlbnQoKSA9PSAmIzM0O1N5c3JlZyYjMzQ7IHsKIH0KIAogIyBDdXJyZW50bHkgdGhpcyBpcyBlZmZlY3RpdmV5IGEgY29tbWVudCwgaW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGVtaXQKLSMgZGVmaW5lcyBmb3IgdGhlIGZpZWxkcy4KJiM0MzsjIGRlZmluZXMgZm9yIHRoZSBmaWVsZHMuICYjMzQ7TWFwcGluZyYjMzQ7IGRvZXMgZW1pdCB0aGUgUkVTeC9VTktOIGRlZmluaXRpb25zLgogKCQxID09ICYjMzQ7RmllbGRzJiMzNDsgfHwgJDEgPT0gJiMzNDtNYXBwaW5nJiMzNDspICZhbXA7JmFtcDsgYmxvY2tfY3VycmVudCgpID09ICYjMzQ7U3lzcmVnJiMzNDsgewogCWV4cGVjdF9maWVsZHMoMikKIApAQCAtMjM5LDkgJiM0MzsyMzksMTUgQEAgJDEgPT0gJiMzNDtFbmRTeXNyZWcmIzM0OyAmYW1wOyZhbXA7IGJsb2NrX2N1cnJlbnQoKSA9PSAmIzM0O1N5c3JlZyYjMzQ7IHsKIAlwcmludCAmIzM0OyYjMzQ7CiAKIAluZXh0X2JpdCA9IC0xCi0JcmVzMCA9IG51bGwKLQlyZXMxID0gbnVsbAotCXVua24gPSBudWxsCiYjNDM7CWlmICgkMSA9PSAmIzM0O01hcHBpbmcmIzM0OykgewomIzQzOwkJcmVzMCA9ICQyICYjMzQ7X1JFUzAmIzM0OwomIzQzOwkJcmVzMSA9ICQyICYjMzQ7X1JFUzEmIzM0OwomIzQzOwkJdW5rbiA9ICQyICYjMzQ7X1VOS04mIzM0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmVzMCA9IG51bGwKJiM0MzsJCXJlczEgPSBudWxsCiYjNDM7CQl1bmtuID0gbnVsbAomIzQzOwl9CiAKIAluZXh0CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnCmluZGV4IGJjMTc4OGIxNjYyYjc2Li5hZmU5MzM3ODUxYTJlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNyZWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9zeXNyZWcKQEAgLTIzODYsMTcgJiM0MzsyMzg2LDQwIEBAIEVuZEVudW0KIEVuZFN5c3JlZwogCiBTeXNyZWcJSURfQUE2NE1NRlI0X0VMMQkzCTAJMAk3CTQKLVJlczAJNjM6NDgKJiM0MztVbnNpZ25lZEVudW0JNjM6NjAJTVRFRkdUCiYjNDM7CTBiMDAwMAlOSQomIzQzOwkwYjAwMDEJSU1QCiYjNDM7RW5kRW51bQomIzQzO1Vuc2lnbmVkRW51bQk1OTo1NglTQ1JYCiYjNDM7CTBiMDAwMAlOSQomIzQzOwkwYjAwMDEJSU1QCiYjNDM7RW5kRW51bQomIzQzO1Vuc2lnbmVkRW51bQk1NTo1MglURVYKJiM0MzsJMGIwMDAwCU5JCiYjNDM7CTBiMDAwMQlJTVAKJiM0MztFbmRFbnVtCiYjNDM7VW5zaWduZWRFbnVtCTUxOjQ4CVRQUwomIzQzOwkwYjAwMDAJVkFMXzAwMDAKJiM0MzsJMGIwMDAxCVZBTF8wMDAxCiYjNDM7CTBiMDAxMAlWQUxfMDAxMAomIzQzO0VuZEVudW0KIFVuc2lnbmVkRW51bQk0Nzo0NAlTUk1BU0sKIAkwYjAwMDAJTkkKIAkwYjAwMDEJSU1QCiYjNDM7CTBiMDAxMAlTUk1BU0syCiYjNDM7RW5kRW51bQomIzQzO1Vuc2lnbmVkRW51bQk0Mzo0MAlUTEJJRAomIzQzOwkwYjAwMDAJTkkKJiM0MzsJMGIwMDAxCUlNUAogRW5kRW51bQotUmVzMAk0Mzo0MAogVW5zaWduZWRFbnVtCTM5OjM2CUUzRFNFCiAJMGIwMDAwCU5JCiAJMGIwMDAxCUlNUAogRW5kRW51bQotUmVzMAkzNTozMgomIzQzO1Vuc2lnbmVkRW51bQkzNTozMglFQUVTUgomIzQzOwkwYjAwMDAJTkkKJiM0MzsJMGIwMDAxCUlNUAomIzQzO0VuZEVudW0KIFVuc2lnbmVkRW51bQkzMToyOAlSTUVHREkKIAkwYjAwMDAJTkkKIAkwYjAwMDEJSU1QCkBAIC0yNDEwLDYgJiM0MzsyNDMzLDcgQEAgVW5zaWduZWRFbnVtCTIzOjIwCU5WX2ZyYWMKIAkwYjAwMDAJTlZfTlYyCiAJMGIwMDAxCU5WMl9PTkxZCiAJMGIwMDEwCU5WMlAxCiYjNDM7CTBiMDAxMQlOVjMKIEVuZEVudW0KIFVuc2lnbmVkRW51bQkxOToxNglGR1dURTMKIAkwYjAwMDAJTkkKQEAgLTQyNDIsNiAmIzQzOzQyNjYsOSBAQCBGaWVsZAkxCUUyVFJFCiBGaWVsZAkwCUUwSFRSRQogRW5kU3lzcmVnCiAKJiM0MztTeXNyZWcJTlZIQ1JfRUwyCTMJNAkxCTUJMAomIzQzO01hcHBpbmcJSENSX0VMMgomIzQzO0VuZFN5c3JlZwogCiBTeXNyZWcgSERGR1JUUjJfRUwyCTMJNAkzCTEJMAogUmVzMAk2MzoyNQpAQCAtNDUyMSw3ICYjNDM7NDU0OCwxNCBAQCBGaWVsZHMJWkNSX0VMeAogRW5kU3lzcmVnCiAKIFN5c3JlZwlIQ1JYX0VMMgkzCTQJMQkyCTIKLVJlczAJNjM6MjUKJiM0MztSZXMwCTYzOjM1CiYjNDM7RmllbGQJMzQJTlZuVFRMQk9TCiYjNDM7RmllbGQJMzMJTlZuVFRMQklTCiYjNDM7RmllbGQJMzIJTlZuVFRMQgomIzQzO1JlczAJMzE6MjgKJiM0MztGaWVsZAkyNwlOVlRHRQomIzQzO0ZpZWxkCTI2CVNSTUFTS0VuCiYjNDM7UmVzMAkyNQogRmllbGQJMjQJUEFDTUVuCiBGaWVsZAkyMwlFbkZQTQogRmllbGQJMjIJR0NTRW4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMjcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBOZWVkIGZvciBGdXp6aW5nOiBBUk02NCBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgcGF0Y2hlcyAqYWJzb2x1dGVseSogaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2Ugc2hvdWxkIGJlIGZ1enppbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFSTTY0IEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBgRkVBVF9OVjNgIGFuZCBgRkVBVF9OVjJwMWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpdHNlbGYgaXMgY29tcGxleCwgYW5kIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMuCgpUaGUgY2hhbmdlcyBzcGFuIGEgZmFpcmx5IHdpZGUgYXJyYXkgb2YgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9hcm02NC9rdm1gIGRpcmVjdG9yeTogaGVhZGVyIGZpbGVzIGRlZmluaW5nIG5ldyBmZWF0dXJlcyBhbmQgc3lzdGVtIHJlZ2lzdGVycywgY29yZSBjb25maWd1cmF0aW9uLCBhbmQgZW11bGF0aW9uIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGFkZGl0aW9ucyBvZiBga3ZtX2hhc19udjJgLCBga3ZtX2hhc19udjNgLCBgaXNfbmVzdGVkX252M19jdHh0YCwgYE5WSENSX0VMMmAsIGFuZCB0aGUgYXNzb2NpYXRlZCB0cmFwIGhhbmRsaW5nIGFuZCByZWdpc3RlciBtYW5pcHVsYXRpb24uIFRoZSBtb2RpZmljYXRpb25zIHRvIGBoeXAvdmhlL3N3aXRjaC5jYCBhbmQgYG5lc3RlZC5jYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBhcmUgb2Z0ZW4gaG90IHNwb3RzIGZvciBidWdzIGluIHZpcnR1YWxpemF0aW9uLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlc2UgY2hhbmdlcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgaW52b2x2ZSBlbXVsYXRpb24gYW5kIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgYXJlIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoZSBjb2RlJiMzOTtzIHJlYWNoYWJpbGl0eS4gWWVzLCBhYnNvbHV0ZWx5LiBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGlzIGEgZmVhdHVyZSB0aGF0ICpjYW4qIGJlIHRlc3RlZC4gSXQmIzM5O3MgYSBjb25maWd1cmVkIGZ1bmN0aW9uYWxpdHksIHNvIHdlJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGRldGVybWluZSBob3cgdG8gZW5hYmxlL2NvbmZpZ3VyZSB0aGUgZmVhdHVyZS4gTGV0JiMzOTtzIGRvIGEgc2VhcmNoIGZvciBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbmZpZ3MgdG8gZGV0ZXJtaW5lIGhvdyB3ZSBjYW4gZW5hYmxlIHRoaXMgZmVhdHVyZSBhbmQsIHRoZXJlZm9yZSwgZnV6eiBpdCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUk02NF9IQVNfTkVTVEVEX1ZJUlQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19udjIoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oLTI3MC17XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmg6MjcxOlx0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtMjcyLVx0XHRrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSkpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaD0yNzU9c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbnYzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC0yNzYte1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjI3NzpcdHJldHVybiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFx1MDAyNlx1MDAyNlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oLTI3OC1cdFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjZcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTE2OD1zdGF0aWMgaW5saW5lIHU2NCAqX19fY3R4dF9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQsIGludCByKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xMTcwLSNpZiAhZGVmaW5lZCAoX19LVk1fTlZIRV9IWVBFUlZJU09SX18pXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTE3MTpcdGlmICh1bmxpa2VseShjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTE3Mi1cdFx0ICAgICByIFx1MDAzZT0gX19WTkNSX1NUQVJUX18gXHUwMDI2XHUwMDI2IGN0eHQtXHUwMDNldm5jcl9hcnJheSkpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmg9MTA9c3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX252KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaC0xMi1cdHJldHVybiAoIV9faXNfZGVmaW5lZChfX0tWTV9OVkhFX0hZUEVSVklTT1JfXykgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaDoxMzpcdFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFx1MDAyNlx1MDAyNlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmgtMTQtXHRcdHZjcHVfaGFzX2ZlYXR1cmUodmNwdSwgS1ZNX0FSTV9WQ1BVX0hBU19FTDIpKTtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTg4Nz1zdGF0aWMgYm9vbCBoYXNfbnYxKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTAzLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5MDQ6XHRyZXR1cm4gKF9fc3lzdGVtX21hdGNoZXNfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkwNS1cdFx0IShoYXNfY3B1aWRfZmVhdHVyZShlbnRyeSwgc2NvcGUpIHx8XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTI1NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI2MDktXHRcdC5kZXNjID0gXCYjMzQ7TmVzdGVkIFZpcnR1YWxpemF0aW9uIFN1cHBvcnRcJiMzNDssXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjYxMDpcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTkVTVEVEX1ZJUlQsXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYxMS1cdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MzY0PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNDQyLVx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDI6XG5hcmNoL2FybTY0L2t2bS9hcm0uYzo0NDM6XHRcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy00NDQtXHRcdGJyZWFrO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jPTE1NTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTU3Ni1cbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE1Nzc6XHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSlcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE1NzgtXHRcdGNsZWFyX2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwgXHUwMDI2ZmVhdHVyZXMpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jPTI5OTk9c3RhdGljIF9faW5pdCBpbnQga3ZtX2FybV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMzA2MS1cdFx0XHRcdCAgICAgXCYjMzQ7aFwmIzM0OyA6IFwmIzM0O25cJiMzNDspLFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MzA2MjpcdFx0IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSA/IFwmIzM0OyYjNDM7TlYyXCYjMzQ7OiBcJiMzNDtcJiMzNDspO1xuYXJjaC9hcm02NC9rdm0vYXJtLmMtMzA2My1cbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0yOTg9dm9pZCBrdm1fczJfcHRkdW1wX2NyZWF0ZV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0zMDUtXHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgXHUwMDI2a3ZtX3BndGFibGVfbGV2ZWxzX2ZvcHMpO1xuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MzA2Olx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSlcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTMwNy1cdFx0a3ZtLVx1MDAzZWFyY2guZGVidWdmc19udl9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7bmVzdGVkXCYjMzQ7LCBrdm0tXHUwMDNlZGVidWdmc19kZW50cnkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Nzg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIGZvciBBUk02NCBLVk0gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZGlnIHVwIHNvbWUgZXhpc3RpbmcgS1ZNIGNvbmZpZ3VyYXRpb25zIHRhaWxvcmVkIGZvciBBUk02NCBhcmNoaXRlY3R1cmVzLiBUaGUgc3BlY2lmaWNzIHdpbGwgZGVwZW5kIG9uIHdoYXQgSSYjMzk7bSBhaW1pbmcgZm9yIOKAkyBwZXJmb3JtYW5jZSBiZW5jaG1hcmtpbmcsIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBleHBlcmltZW50YXRpb24sIHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucywgb3IgcG9zc2libHkgZXZlbiBkZWJ1Z2dpbmcgYSBLVk0tcmVsYXRlZCBpc3N1ZSBvbiBBUk0uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgcXVlcnlpbmcgZm9yIGNvbW1vbiBiYXNlIHNldHVwcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHdlYWx0aCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWNyb3NzIHZhcmlvdXMgZGlzdHJpYnV0aW9ucy4gSXQgbWlnaHQgYmUgaGVscGZ1bCB0byB0YXJnZXQgcGFydGljdWxhciBPUyB2YXJpYW50cyBvciBoeXBlcnZpc29yIHZlcnNpb25zIGFzIGEgd2F5IHRvIG5hcnJvdyB0aGUgc2NvcGUsIGFzIHdlbGwgYXMgY29uc2lkZXJpbmcga2VybmVsIHZlcnNpb25zIHRvIGF2b2lkIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBJIGtub3cgdGhhdCBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uIGlzIGEgY3JpdGljYWwgZWxlbWVudCB3aXRoIEFSTSwgc28gSSB3aWxsIHByaW9yaXRpemUgY29uZmlndXJhdGlvbnMgdGhhdCBleHBsaWNpdGx5IGFkZHJlc3MgdGhlIGRldmljZSB0cmVlIGFuZCBhbnkgc3BlY2lmaWMgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IG1lbW9yeSBpcyBtYXBwZWQgYW5kIG1hbmFnZWQsIGFuZCBlc3BlY2lhbGx5IGxvb2sgZm9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgaGFuZGxlIGludGVycnVwdCBjb250cm9sbGVycyBhbmQgdGhlIHZpcnR1YWxpemVkIHN5c3RlbSYjMzk7cyBwZXJpcGhlcmFscyBlZmZlY3RpdmVseS4gQW55IGluc2lnaHRzIGludG8gb3B0aW1pemF0aW9ucyBmb3IgdGhpbmdzIGxpa2UgdmlydGlvIGRyaXZlcnMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgZXh0ZW5zaW9ucyAobGlrZSBTVkUpIHdvdWxkIGJlIGEgYm9udXMsIGJ1dCBJIHdpbGwgYmUgaGFwcHkgdG8gbGVhcm4gYW5kIGV4cGxvcmUgYW55dGhpbmcgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gb24gQVJNNjQ6IENvbmZpZ3VyYXRpb24gSHVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gbnVhbmNlcyBvciBrbm9icyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIEFSTTY0IGFyY2hpdGVjdHVyZXMuIFdlIGFsbCBrbm93IHRoZSBiYXNpY3Mgb2YgdmlydHVhbGl6YXRpb24sIGJ1dCBBUk02NCBoYXMgaXRzIG93biBzZXQgb2YgcGVjdWxpYXJpdGllcywgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjYW4gYmUgYSB3aG9sZSBkaWZmZXJlbnQgYmVhc3QuIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIGp1c3QgdGhlIGdlbmVyaWMgQ1BVIGZlYXR1cmVzIGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogYXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIEkmIzM5O2xsIG5lZWQgZW5hYmxlZD8gQW55IGZpcm13YXJlIHJlcXVpcmVtZW50cyB0aGF0IG1pZ2h0IGJlIHVuaXF1ZSB0byBuZXN0ZWQgc2NlbmFyaW9zPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGNhdmVhdHMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGh5cGVydmlzb3IgY2hvc2VuIChsaWtlIEtWTSBvciBYZW4pPyBNYXliZSBjZXJ0YWluIG9wdGltaXphdGlvbnMgb3IgbWl0aWdhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBhdCB0aGUgaG9zdCBvciBndWVzdCBsZXZlbD8gSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBhbGwgdGhlIHBvdGVudGlhbCBnb3RjaGFzIGJlZm9yZSBJIGV2ZW4gc3RhcnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRvIGZpbmQgdGhlIHNwZWNpZmljIGRvY3VtZW50YXRpb24gb3IgYmVzdCBwcmFjdGljZXMsIG9yIHdoZXRoZXIgSSBuZWVkIHRvIGdldCByZWFkeSB0byBkZWVwIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYSBjdXN0b20gY29uZmlndXJhdGlvbiB0byBnZXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdvcmtpbmcgb3B0aW1hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQXJtNjQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHRpbmdzIGFyZSBkZWZpbmVkIGZvciB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBUaGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGNlbnRyYWwgcGxhY2UgZm9yIGNvbmZpZ3VyaW5nIGZlYXR1cmVzLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIEl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCBvcHRpb25zIHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24sIGVzcGVjaWFsbHkgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBsaWtlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgd2lsbCBiZSBkZXNjcmliZWQgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMgZmlsZSBvciBiZSBpbmNsdWRlZCBmcm9tIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gbG9jYXRlIHRoZSBuZWNlc3Nhcnkgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVTVEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDoKCioqRGlnZ2luZyBpbnRvIGEgS1ZNIElzc3VlKioKCkhtbSwgY291bGQgdGhpcyBiZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gS1ZNIGNvbmZpZ3VyYXRpb24/IEl0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgQ09ORklHX0tWTWAg4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBwaWVjZS4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVgLiBUaGF0IE1ha2VmaWxlIHNob3VsZCB0ZWxsIG1lIGV4YWN0bHkgaG93IHRoaW5ncyBhcmUgYmVpbmcgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgaG9wZWZ1bGx5LCBpdCYjMzk7bGwgaWxsdW1pbmF0ZSB0aGlzIHNwZWNpZmljIGlzc3VlIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEl0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gTGV0JiMzOTtzIHNlZSB3aGF0IGNsdWVzIHRoaXMgTWFrZWZpbGUgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yMS1cdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyNjpcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cdCB2Z2ljL3ZnaWMtdjUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtWTSBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBBUk02NCBzaWRlLCBhbmQgaXQgbG9va3MgbGlrZSBgZW11bGF0ZS1uZXN0ZWQub2AgYW5kIGBuZXN0ZWQub2AgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpZiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwgYW5kIGRpcmVjdGx5IG1vZGlmaWVzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcywgc28gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgbW9zdCBpbnRlcmVzdGluZyBmdW5jdGlvbnMuCgpGcm9tIGEgcXVpY2sgc2tpbSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZDogYGt2bV90aW1lcl92Y3B1X2xvYWRgLCB0aGF0IHNlZW1zIGxpa2UgYSBob3QgcGF0aCB0byBsb29rIGludG8uIFRoZW4gdGhlcmUmIzM5O3MgYGNoZWNrX2ZlYXR1cmVfbWFwYCwgYGdldF9yZWdfZml4ZWRfYml0c2AsIGFuZCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgLCB3aGljaCBJJiMzOTtsbCBjYXRlZ29yaXplIGFzIGJlaW5nIG1vcmUgb24gdGhlIGluaXRpYWxpemF0aW9uIHNpZGUgb2YgdGhpbmdzLiBUaGVyZSYjMzk7cyBhIGZsdXJyeSBvZiBhY3Rpdml0eSBpbiB0aGUgYGh5cGAgZGlyZWN0b3J5LCB3aXRoIGBfX2FjdGl2YXRlX2NwdHJfdHJhcHNfdmhlYCwgYF9fYWN0aXZhdGVfdHJhcHNfY29tbW9uYCwgYF9fc3lzcmVnX3NhdmVfZWwxX3N0YXRlYCwgYF9fc3lzcmVnX3Jlc3RvcmVfZWwxX3N0YXRlYCwgYF9fY29tcHV0ZV9oY3JgLCBga3ZtX2h5cF9oYW5kbGVfZXJldGAsIGBrdm1faHlwX2hhbmRsZV9jcGFjcl9lbDFgLCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGFuZCBgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlYCBsaWtlbHkgYmVpbmcgcGVyZm9ybWFuY2UgY3JpdGljYWwgcGF0aHMsIGFsbCByZWxhdGluZyB0byB0aGUgaHlwZXJ2aXNvciYjMzk7cyBpbnRlcmFjdGlvbi4KCkZpbmFsbHksIGluIHRoZSBtYWluIEtWTSBkaXJlY3RvcnksIEkgc2VlIGBsaW1pdF9udl9pZF9yZWdgLCBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGFuZCBhIHNlcmllcyBvZiBzeXNyZWcgZnVuY3Rpb25zLCBsaWtlIGBsb2NhdGVfcmVnaXN0ZXJgLCBgcmVhZF9zcl9mcm9tX2NwdWAsIGB3cml0ZV9zcl90b19jcHVgLCBgdmNwdV9yZWFkX3N5c19yZWdgLCBgdmNwdV93cml0ZV9zeXNfcmVnYCwgYW5kIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAuIFRoYXQmIzM5O3MgYSBnb29kIG92ZXJ2aWV3LgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBsaW1pdF9udl9pZF9yZWdgLCBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGFuZCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIOKAkyB0aG9zZSBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSB0aGUgY29yZSBvZiB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLCBvciBhdCBsZWFzdCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpbWl0X252X2lkX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1NDc9c3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjA1LSAqL1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTYwNjp1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2MDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY1NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBga3ZtX2luaXRfbnZfc3lzcmVnc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBrdm1faW5pdF9udl9zeXNyZWdzYC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgS1ZNIGluaXRpYWxpemVzIHRoZSBub24tdm9sYXRpbGUgc3lzdGVtIHJlZ2lzdGVycywgbGlrZWx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgY2VydGFpbiBhc3BlY3RzIG9mIHZpcnR1YWxpemF0aW9uIG9yIGd1ZXN0IHN0YXRlIHBlcnNpc3RlbmNlLiBJdCYjMzk7cyBhIGNydWNpYWwgZnVuY3Rpb24gYmVjYXVzZSBpZiB0aGVzZSByZWdpc3RlcnMgYXJlbiYjMzk7dCBwcm9wZXJseSBjb25maWd1cmVkIGR1cmluZyBndWVzdCBzdGFydHVwLCB3ZSYjMzk7cmUgZ29pbmcgdG8gc2VlIGEgd2hvbGUgaG9zdCBvZiB1bnByZWRpY3RhYmxlIGJlaGF2aW9ycywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbnN0YWJpbGl0eSwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBvciBldmVuIGNvbXBsZXRlIGd1ZXN0IGZhaWx1cmVzLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgaXQmIzM5O3MgdG91Y2hpbmcg4oCTIHRoaW5ncyBsaWtlIE1TUl9JQTMyX1ZNX0NSLCBNU1JfSUEzMl9WTV9IU0FWRV9QQSwgYW5kIG90aGVycyBhc3NvY2lhdGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gQXJlIHRoZXkgYmVpbmcgc2V0IHRvIGEgc2FmZSwga25vd24gc3RhdGU/IElzIHRoZXJlIGEgY2hlY2sgZm9yIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBtb2RpZnkgdGhlbT8gVGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWxzIGhlcmUsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIGVhY2ggcmVnaXN0ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBvbWlzc2lvbnMgb3IgdW5leHBlY3RlZCB2YWx1ZXMuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCBvbiBkaWZmZXJlbnQgQ1BVIGFyY2hpdGVjdHVyZXMuIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgaGFyZHdhcmUgdmFyaWF0aW9ucyBjYW4gaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHdlbGwtY29tbWVudGVkLCByb2J1c3QgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGlzIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcmVsaWFibGUgYW5kIHNlY3VyZSB2aXJ0dWFsIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2luaXRfbnZfc3lzcmVncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF9zeXNyZWdfbWFza3Moc3RydWN0IGt2bSAqa3ZtLCBpbnQgc3IsIHN0cnVjdCByZXN4IHJlc3gpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTc5OC1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE3OTk6aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBSZWdpc3RlciBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYG52aGNyX2VsMl92aXNpYmlsaXR5YC4mIzM0OyBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIEkga25vdyB0aGlzIHJlZ2lzdGVyIGludGltYXRlbHk7IGl0JiMzOTtzIHRoZSBnYXRld2F5LCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuIEl0JiMzOTtzIG5vdCBhIHN1Z2dlc3Rpb24sIGl0JiMzOTtzIGEgKmNoZWNrKi4gSSBhbHJlYWR5IGhhdmUgYSBtZW50YWwgbW9kZWwgb2Ygd2hhdCBpdCAqc2hvdWxkKiBjb250YWluLCBnaXZlbiB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZSwgYnV0IEkgbmVlZCBhIGNvbmNyZXRlIGRhdGEgcG9pbnQuIEkmIzM5O20gbm90IGp1c3QgaWRseSBjdXJpb3VzOyBJJiMzOTttIHN5c3RlbWF0aWNhbGx5IHRyYWNpbmcgYSBwb3RlbnRpYWwgaXNzdWUsIHZlcmlmeWluZyBteSBhc3N1bXB0aW9ucywgb3IgcHJlcGFyaW5nIHRvIGFkZHJlc3MgYSBzcGVjaWZpYyBwcm9ibGVtLiBLbm93aW5nIHRoZSBleGFjdCB2YWx1ZSBvZiBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MgZ2l2ZXMgbWUgY3JpdGljYWwgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZoY3JfZWwyX3Zpc2liaWxpdHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9Mjg3MD1zdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjg3OS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6Mjg4MDpzdGF0aWMgdW5zaWduZWQgaW50IG52aGNyX2VsMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjg4MS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zMjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTM4MDMtXHRFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjM4MDQ6XHRcdFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzgwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFN5c3RlbSBSZWdpc3RlciBIYW5kbGluZyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHN5c3RlbSByZWdpc3RlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZXNlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnM6IGB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzLCB0aGUgbGluY2hwaW5zIG9mIG1hbmFnaW5nIHRoZSB2aXJ0dWFsIENQVSYjMzk7cyB2aWV3IG9mIHRoZSBhcmNoaXRlY3R1cmFsIHN0YXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGRvLCBJIHN1c3BlY3QsIHRoZXNlIGxvdy1sZXZlbCBmdW5jdGlvbnMgcHJvYmFibHkgc2l0IHJpZ2h0IGluIHRoZSBtaWRkbGUgb2YgYWxsIHRoZSByZWdpc3Rlci1hY2Nlc3Mgb3BlcmF0aW9ucy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLCB3aGF0IHRoZWlyIGxvZ2ljIGlzIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCBob3cgd2UgYXJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgdmlydHVhbCBtYWNoaW5lJiMzOTtzIHN5c3RlbSByZWdpc3RlcnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrLCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbS4gSSBiZXQgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzIGhlcmUgYW5kIHRoYXQgdGhpcyBpcyB3aGVyZSB3ZSBoYXZlIHByb2JsZW1zIHdpdGggaGFuZGxpbmcgdGhlIGNvcnJlY3Qgc3RhdGUgb2YgdGhlIHJlZ2lzdGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9yZWFkX3N5c19yZWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9Mjg0PXN0YXRpYyB2b2lkIHdyaXRlX3NyX3RvX2NwdShlbnVtIHZjcHVfc3lzcmVnIHJlZywgdTY0IHZhbClcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTMyMC1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MzIxOnU2NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0zMjIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NTI0PXN0YXRpYyBib29sIGFjY2Vzc19ydyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy01MzAtXHRlbHNlXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjUzMTpcdFx0cC1cdTAwM2VyZWd2YWwgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZyk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUzMi1cbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTYwNC1cdGlmICh+bWFzaykge1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo2MDU6XHRcdHZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjA2LVx0XHR2YWwgXHUwMDI2PSB+bWFzaztcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTYxOD1zdGF0aWMgYm9vbCBhY2Nlc3NfYWN0bHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjI3LVx0Z2V0X2FjY2Vzc19tYXNrKHIsIFx1MDAyNm1hc2ssIFx1MDAyNnNoaWZ0KTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NjI4Olx0cC1cdTAwM2VyZWd2YWwgPSAodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcpIFx1MDAyNiBtYXNrKSBcdTAwM2VcdTAwM2Ugc2hpZnQ7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTYyOS1cbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI2MTI9c3RhdGljIGJvb2wgYWNjZXNzX2Nzc2VscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MTktXHRlbHNlXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjI2MjA6XHRcdHAtXHUwMDNlcmVndmFsID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgcmVnKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYyMS1cdHJldHVybiB0cnVlO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjYyND1zdGF0aWMgYm9vbCBhY2Nlc3NfY2NzaWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYzMS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MjYzMjpcdGNzc2VsciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIENTU0VMUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yNjMzLVx0Y3NzZWxyIFx1MDAyNj0gQ1NTRUxSX0VMMV9MZXZlbCB8IENTU0VMUl9FTDFfSW5EO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjgwOD1zdGF0aWMgYm9vbCBhY2Nlc3NfZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI4MTQtXHRlbHNlXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjI4MTU6XHRcdHAtXHUwMDNlcmVndmFsID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgRUxSX0VMMSk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI4MTYtXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MDc5PXN0YXRpYyBib29sIGhhbmRsZV92bWFsbHMxMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg3LVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MDg4Olx0dnR0YnIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBWVFRCUl9FTDIpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg5LVx0bGltaXQgPSBCSVRfVUxMKGt2bV9nZXRfcGFfYml0cyh2Y3B1LVx1MDAzZWt2bSkpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDEwMz1zdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDYtXHR1MzIgc3lzX2VuY29kaW5nID0gc3lzX2luc24ocC1cdTAwM2VPcDAsIHAtXHUwMDNlT3AxLCBwLVx1MDAzZUNSbiwgcC1cdTAwM2VDUm0sIHAtXHUwMDNlT3AyKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDEwNzpcdHU2NCB2dHRiciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFZUVEJSX0VMMik7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDgtXHR1NjQgYmFzZSwgcmFuZ2U7XG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MTU4PXN0YXRpYyBib29sIGhhbmRsZV9pcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTYxLVx0dTMyIHN5c19lbmNvZGluZyA9IHN5c19pbnNuKHAtXHUwMDNlT3AwLCBwLVx1MDAzZU9wMSwgcC1cdTAwM2VDUm4sIHAtXHUwMDNlQ1JtLCBwLVx1MDAzZU9wMik7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxNjI6XHR1NjQgdnR0YnIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBWVFRCUl9FTDIpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUyMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyBgdmNwdV93cml0ZV9zeXNfcmVnYCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gbG9vayBhdCBgdmNwdV93cml0ZV9zeXNfcmVnYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBjb250ZXh0LiBXaHkgYXJlIHdlIGV2ZW4gZXhhbWluaW5nIHRoaXMgZnVuY3Rpb24/IElzIGl0IHJlbGF0ZWQgdG8gYSByZWNlbnQgYnVnIHJlcG9ydD8gUGVyZm9ybWFuY2UgdHVuaW5nPyBTZWN1cml0eSBhbmFseXNpcz8gS25vd2luZyB0aGUgb2JqZWN0aXZlIHdpbGwgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggaXQuCgpJJiMzOTtsbCBzdGFydCBieSBtYWtpbmcgc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvZiB3aGF0ICYjMzQ7c3lzX3JlZyYjMzQ7IHJlZmVycyB0by4gSXQmIzM5O3MgbGlrZWx5IGEgc3lzdGVtLWxldmVsIHJlZ2lzdGVyIHdpdGhpbiB0aGUgdmlydHVhbCBDUFUmIzM5O3MgY29udGV4dC4gVW5kZXJzdGFuZGluZyB3aGljaCBhcmNoaXRlY3R1cmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAoeDg2LCBBUk0sIGV0Yy4pIGlzIGNydWNpYWwgaGVyZSwgYXMgdGhlIHNwZWNpZmljIHN5c3RlbSByZWdpc3RlcnMgYW5kIHRoZWlyIGZ1bmN0aW9ucyBhcmUgaGlnaGx5IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgdmNwdV93cml0ZV9zeXNfcmVnYC4gU3BlY2lmaWNhbGx5IEkmIzM5O2xsIG5lZWQgdG8ga25vdzoKKiAgICoqV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyoqIElzIHRoZXJlIGEgYHZjcHVgIHN0cnVjdD8gQSByZWdpc3RlciBzdGF0ZSBzdHJ1Y3R1cmU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc2hhZG93IHJlZ2lzdGVycywgb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcz8gSG93IGRvZXMgdGhlIHN0cnVjdHVyZSBjaGFuZ2UgZHVyaW5nIHRoZSB3cml0ZXM/CiogICAqKldoYXQgYXJlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSByZWdpc3RlcnMgYmVpbmcgd3JpdHRlbiB0bz8qKiBBbmQgd2hhdCBhcmUgdGhlaXIgbWVhbmluZ3M/IFdoaWNoIHJlZ2lzdGVycyBhcmUgY29uc2lkZXJlZCBjcml0aWNhbCwgYW5kIHdoaWNoIGNhbiBiZSBtb3JlIHNhZmVseSBtb2RpZmllZC4KKiAgICoqV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcz8qKiBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHJlZ2lzdGVyIHZhbHVlcywgb3IgYWNjZXNzIHBlcm1pc3Npb25zPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBjb25jZXJucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHZDUFVzIGNvbmN1cnJlbnRseT8KCkZyb20gdGhlcmUsIEkmIzM5O2xsIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSB2Q1BVLiBXaGF0IGtpbmQgb2YgdmFsaWRhdGlvbiBpcyBiZWluZyBkb25lIGJlZm9yZSBgdmNwdV93cml0ZV9zeXNfcmVnYD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmU/IEFyZSBhbnkgYXNzdW1wdGlvbnMgbWFkZSByZWdhcmRpbmcgdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0mIzM5O3MgYmVoYXZpb3I/CgpGaW5hbGx5LCBpZiBJIGFtIGRvaW5nIHRoaXMgZm9yIGEgc3BlY2lmaWMgcHVycG9zZSwgbGlrZSBhIGJ1ZywgSSB3aWxsIGxpa2VseSB0aGVuIGJlIGxvb2tpbmcgZm9yIHNwZWNpZmljIGJlaGF2aW9yLCBzdWNoIGFzIHRyYWNpbmcgZG93biB0aGUgZmxvdyBvZiB0aGUgY29kZSwgdG8gc2VlIGhvdyB0aGUgd3JpdGUgaW1wYWN0cyBsYXRlciBhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X3dyaXRlX3N5c19yZWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MzIxPXU2NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzc0LVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzozNzU6dm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzc2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTUyND1zdGF0aWMgYm9vbCBhY2Nlc3Nfcncoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNTI4LVx0aWYgKHAtXHUwMDNlaXNfd3JpdGUpXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjUyOTpcdFx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIHAtXHUwMDNlcmVndmFsLCByLVx1MDAzZXJlZyk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUzMC1cdGVsc2Vcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTYxMS1cdHZhbCB8PSAocC1cdTAwM2VyZWd2YWwgXHUwMDI2IChtYXNrIFx1MDAzZVx1MDAzZSBzaGlmdCkpIFx1MDAzY1x1MDAzYyBzaGlmdDtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NjEyOlx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIHZhbCwgci1cdTAwM2VyZWcpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy02MTMtXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0xMDAwPXN0YXRpYyB1NjQgcmVzZXRfYW1haXJfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMDItXHR1NjQgYW1haXIgPSByZWFkX3N5c3JlZyhhbWFpcl9lbDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDAzOlx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIGFtYWlyLCBBTUFJUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDA0LVx0cmV0dXJuIGFtYWlyO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAwNz1zdGF0aWMgdTY0IHJlc2V0X2FjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMDktXHR1NjQgYWN0bHIgPSByZWFkX3N5c3JlZyhhY3Rscl9lbDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDEwOlx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIGFjdGxyLCBBQ1RMUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDExLVx0cmV0dXJuIGFjdGxyO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAxND1zdGF0aWMgdTY0IHJlc2V0X21waWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMjgtXHRtcGlkciB8PSAoMVVMTCBcdTAwM2NcdTAwM2MgMzEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDI5Olx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIG1waWRyLCBNUElEUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDMwLVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjYxMj1zdGF0aWMgYm9vbCBhY2Nlc3NfY3NzZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYxNy1cdGlmIChwLVx1MDAzZWlzX3dyaXRlKVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyNjE4Olx0XHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgcC1cdTAwM2VyZWd2YWwsIHJlZyk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MTktXHRlbHNlXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0yODA4PXN0YXRpYyBib29sIGFjY2Vzc19lbHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxMi1cdGlmIChwLVx1MDAzZWlzX3dyaXRlKVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyODEzOlx0XHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgcC1cdTAwM2VyZWd2YWwsIEVMUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yODE0LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIyOQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IHN5c3RlbSByZWdpc3RlciwgYE5WSENSX0VMMmAsIGFuZCB0d2Vha3MgdGhlIGV4aXN0aW5nIHN5c3RlbSByZWdpc3RlciByZWFkL3dyaXRlIGZ1bmN0aW9ucyAoYHZjcHVfcmVhZF9zeXNfcmVnYCBhbmQgYHZjcHVfd3JpdGVfc3lzX3JlZ2ApIHRvIGhhbmRsZSBgQ1BUUl9FTDJgIHdpdGggdGhlIG5ldyBsb2dpYywgY29udGluZ2VudCBvbiBgQVJNNjRfSEFTX05WMlAxYCBiZWluZyBkZWZpbmVkLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2NvbXB1dGVfaGNyYCB0byB3cml0ZSB0byBlaXRoZXIgYE5WSENSX0VMMmAgb3IgYFNZU19OVkhDUl9FTDJgLCBhbmQgaW1wb3J0YW50bHksIGNoYW5nZXMgYGZpeHVwX2d1ZXN0X2V4aXRgIHRvIGNhbGwgYGZpeHVwX252X2d1ZXN0X2V4aXRgLCB3aGljaCByZWFkcyBgTlZIQ1JfRUwyYCBhbmQgYXNzaWducyBpdHMgdmFsdWUgdG8gYEhDUl9FTDJgLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yazsgZGVmaW5pdGVseSB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGBsaW1pdF9udl9pZF9yZWdgLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgLCBhbmQgYF9fY29tcHV0ZV9oY3JgLgoKQWhhISBOb3cgSSYjMzk7bSByZW1lbWJlcmluZyB0aGF0IGBfX2NvbXB1dGVfaGNyYCwgYGZpeHVwX252X2d1ZXN0X2V4aXRgLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgcmVzaWRlIHdpdGhpbiB0aGUgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY2AgZmlsZXMuIFRoaXMgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBpbiBFTDIg4oCTIHRoZSBoeXBlcnZpc29yJiMzOTtzIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpcyBjYW4gc3l6a2FsbGVyIGJlIHVzZWQgdG8gdGFyZ2V0IHRoZW0/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnkgcnVubmluZyBLVk0gZ3Vlc3RzLgoKQWxyaWdodCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGFsbCB0aGUgZHVja3MgaW4gYSByb3cuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gd29yaywgYmV5b25kIHRoZSBvYnZpb3VzLiBJIHJhbiBhIHF1aWNrIHNlYXJjaCBmb3IgYE5FU1RFRGAgaW4gYm90aCBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AgYW5kIHRoZSB0b3AtbGV2ZWwgYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIGJ1dCBjYW1lIHVwIGVtcHR5LiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgYGFyY2gvYXJtNjQva3ZtL01ha2VmaWxlYC4gQmluZ28hIEl0IGxvb2tzIGxpa2UgYGVtdWxhdGUtbmVzdGVkLm9gIGFuZCBgbmVzdGVkLm9gIGFyZSBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGFzIGxvbmcgYXMgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFNvIGl0IHNlZW1zIHRoYXQgYEtWTWAgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IGNvbmZpZ3VyYXRpb24uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSBgQVJNNjRfSEFTX05FU1RFRF9WSVJUYCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJNNjRfSEFTX05FU1RFRF9WSVJUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xODg3PXN0YXRpYyBib29sIGhhc19udjEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MDMtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTkwNDpcdHJldHVybiAoX19zeXN0ZW1fbWF0Y2hlc19jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcdTAwMjZcdTAwMjZcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTA1LVx0XHQhKGhhc19jcHVpZF9mZWF0dXJlKGVudHJ5LCBzY29wZSkgfHxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjU0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYwOS1cdFx0LmRlc2MgPSBcJiMzNDtOZXN0ZWQgVmlydHVhbGl6YXRpb24gU3VwcG9ydFwmIzM0OyxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNjEwOlx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19ORVNURURfVklSVCxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNjExLVx0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIEFSTTY0IGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlIGlzbiYjMzk7dCBhIGRlZGljYXRlZCBgQ09ORklHX0FSTTY0X05FU1RFRF9WSVJUYCBvcHRpb24sIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gSW5zdGVhZCwgaXQgc2VlbXMgd2UgbmVlZCB0byBsb29rIGF0IHRoZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGRldGVybWluZSBzdXBwb3J0LgoKVGhlIG5leHQgdGhvdWdodCBpcywgd2hhdCBhYm91dCBgQ09ORklHX0FSTTY0X1ZIRWA/IEFoIHllcywgVmlydHVhbGl6YXRpb24gSG9zdCBFeHRlbnNpb25zLiBUaGF0IHJpbmdzIGEgYmVsbC4gTmVzdGVkIHZpcnR1YWxpemF0aW9uICpkb2VzKiBkZXBlbmQgb24gVkhFLCB0aGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2Ugb24gQVJNNjQuIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBpc24mIzM5O3QgVkhFIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIEtWTT8gT3IgbWF5YmUgcGFydCBvZiBLVk0mIzM5O3MgYmFzZSBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbiBiZWNhdXNlIGl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIGlmIGl04oCZcyBleHBsaWNpdGx5IHJlcXVpcmVkIG9yIGluaGVyZW50bHkgcHJlc2VudC4gTGV0IG1lIG1ha2Ugc3VyZSBJIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUk02NF9WSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUgaW4gdGhlIExpbnV4IGtlcm5lbC4gV2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGUgc2V0dGluZ3M/IE5hdHVyYWxseSwgaXQmIzM5O3MgZ29pbmcgdG8gYmUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBkZXRhaWxzIG9uIGhvdyB0aGUgS1ZNIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGVsdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgb3B0aW9ucyBmb3IgZW5hYmxpbmcgS1ZNLCBkZWZpbmluZyBzcGVjaWZpYyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHNvbWUgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlc2UgZm9jdXMgc3ltYm9scy4gTGV0JiMzOTtzIGJyZWFrIHRoZW0gZG93bi4gSSBoYXZlOgoKKiAgIGBrdm1faW5pdF9udl9zeXNyZWdzYAoqICAgYGxpbWl0X252X2lkX3JlZ2AKKiAgIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAKKiAgIGBmaXh1cF9udl9ndWVzdF9leGl0YAoqICAgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAKKiAgIGBfX2NvbXB1dGVfaGNyYAoKQWxyaWdodCwgaW1tZWRpYXRlbHkgSSByZWNvZ25pemUgdGhhdCBgX19jb21wdXRlX2hjcmAgYW5kIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgIHJlc2lkZSBpbiB0aGUgaHlwZXJ2aXNvciBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmNgLiBUaGlzIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIEkgaGF2ZSB0byBiZSBzdXJlIGFib3V0IGBmaXh1cF9udl9ndWVzdF9leGl0YC4gSSBiZWxpZXZlIGl0JiMzOTtzIHN0YXRpYy4uLiB5ZXMsIGNvbmZpcm1lZCwgaXQmIzM5O3MgYWxzbyBzdGF0aWMgd2l0aGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYC4gR29vZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcnJlY3QgbmFtZS4gSSByZW1lbWJlciBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoLiBPa2F5LCBhbmQgYF9fY29tcHV0ZV9oY3JgIGlzIHN0YXRpYyB0b28sIGFuZCBpdCBjb21wdXRlcyB0aGUgSENSLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgc2F2ZXMgdGhlIFZFTDIgc3RhdGUuIGBrdm1faW5pdF9udl9zeXNyZWdzYCBpcyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIGBsaW1pdF9udl9pZF9yZWdgIGxpbWl0cyB0aGUgTlYgSUQgcmVnaXN0ZXIuIEZpbmFsbHksIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAgY2hlY2tzIHRoZSB2aXNpYmlsaXR5LgoKVGhlc2Ugc3ltYm9scyBzZWVtIHRvIGJlIHdlbGwtY2hvc2VuLiBUaGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgY29kZSBJIGFtIGludGVyZXN0ZWQgaW4uIFRoZXkmIzM5O3JlIG5vdCBqdXN0IGdlbmVyaWMsIHBvdGVudGlhbGx5IGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXIgdGhhbiB0aGUgb25lcyB0aGF0IGFyZSBjYWxsZWQgb24gdGhlIGd1ZXN0IGV4aXQuIEJ1dCwgZXZlbiB0aG9zZSBmdW5jdGlvbnMgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBsb2dpYyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFdhaXQsIGBfX2NvbXB1dGVfaGNyYCBpcyBjYWxsZWQgb24gZXZlcnkgZ3Vlc3QgZW50cnkuIEl0IGNvdWxkIGJlIGEgaG90IHBhdGgsIHRob3VnaC4gTGV0JiMzOTtzIHNlZS4uLiBhbmQgYGZpeHVwX252X2d1ZXN0X2V4aXRgIGlzIGNhbGxlZCBmcm9tIGBmaXh1cF9ndWVzdF9leGl0YCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBjYWxsZWQgb24gKmV2ZXJ5KiBndWVzdCBleGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhvc2UuCgpQZXJoYXBzIEkgc2hvdWxkIHJlZm9jdXMgb24gdGhlIGluaXQgYW5kIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gaG90IHBhdGhzLiBMZXQmIzM5O3Mgc3RpY2sgd2l0aDoKCiogICBga3ZtX2luaXRfbnZfc3lzcmVnc2AKKiAgIGBsaW1pdF9udl9pZF9yZWdgCiogICBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgCiogICBBbmQsIGFzIGFuIGV4dHJhLCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgIGZyb20gYGFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYz0yMjk3PXN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2FsbF9mZ3RfbWFza3MoaW50IHJldClcbi0tXG5hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jLTIzMjUtXG5hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jOjIzMjY6aW50IF9faW5pdCBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyh2b2lkKVxuYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYy0yMzI3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3MzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTlYgQWNjZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHJlbGF0ZWQgdG8gTlYgYWNjZXNzLiBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgIGxvb2tzIGxpa2UgYSBub24tc3RhcnRlci4gSXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGR1cmluZyBib290LCBtZWFuaW5nIG5vIHVzZXItY29udHJvbGxlZCBpbnB1dC4gTm90IGlkZWFsLgoKSG93ZXZlciwgYGxpbWl0X252X2lkX3JlZ2AgaXMgY2FsbGVkIHdoZW4gdXNlcnNwYWNlIHJlYWRzIElEIHJlZ2lzdGVycy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBwcm9taXNpbmcuIFRoZW4gSSBzZWUgYGt2bV9pbml0X252X3N5c3JlZ3NgLCBjYWxsZWQgd2hlbiBhIHZDUFUgaW5pdGlhbGl6ZXMsIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBzb2xpZCB0YXJnZXQgdG9vLiBOZXh0IHVwLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIGlzIGNhbGxlZCB3aGVuIHVzZXJzcGFjZSBhY2Nlc3NlcyB0aGUgc3lzdGVtIHJlZ2lzdGVyLCB3aGljaCBpcyBncmVhdC4KCmB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgIGFyZSBpbnRlcmVzdGluZywgYXMgdGhleSYjMzk7dmUgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgYENQVFJfRUwyYCBhbmQgYENOVEhDVExfRUwyYC4gVGhlc2UgYXJlIGNhbGxlZCBhbnl0aW1lIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QgYWNjZXNzZXMgc3lzdGVtIHJlZ2lzdGVycy4gVGhleSYjMzk7cmUgcG90ZW50aWFsbHkgZ29vZCwgYnV0IHRoZXkmIzM5O3JlIHByZXR0eSBnZW5lcmFsLCB3aGljaCBtaWdodCBtYWtlIGZ1enppbmcgbGVzcyBlZmZlY3RpdmUuIFBlcmhhcHMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhlc2UuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGt2bV9oYXNfbnYyYCBhbmQgYGt2bV9oYXNfbnYzYC4gVGhleSYjMzk7cmUgaW5saW5lIGZ1bmN0aW9ucywgc28gcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB0YXJnZXRzLgoKT2theSwgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgb3V0IGB0aW1lcl9zZXRfdHJhcHNgIGluIGBhcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgY291bGQgbGVhZCBzb21ld2hlcmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpbWVyX3NldF90cmFwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM9NzQ3PXN0YXRpYyB2b2lkIGt2bV90aW1lcl92Y3B1X2xvYWRfbmVzdGVkX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTc4MC1cbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYzo3ODE6c3RhdGljIHZvaWQgdGltZXJfc2V0X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHRpbWVyX21hcCAqbWFwKVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTc4Mi17XG4tLVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jPTg4OT12b2lkIGt2bV90aW1lcl92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYy05MjAtXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM6OTIxOlx0dGltZXJfc2V0X3RyYXBzKHZjcHUsIFx1MDAyNm1hcCk7XG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMtOTIyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIFRpbWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGB0aW1lcl9zZXRfdHJhcHNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGdldHRpbmcgY2FsbGVkIHdoZW5ldmVyIGEgdkNQVSBnZXRzIGxvYWRlZCBvbnRvIGEgcGh5c2ljYWwgQ1BVIOKAkyBga3ZtX3RpbWVyX3ZjcHVfbG9hZGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGhvdCBwYXRoIHNpdHVhdGlvbiwgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhLCBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwgd2l0aCBpdC4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBpcyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgcGF0aCwgcGFydGljdWxhcmx5IGlmIHdlJiMzOTtyZSBzZWVpbmcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KClNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IGBhcm02NGAsIGFuZCB0aGUgdGltZXIgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgYXJjaC9hcm02NC9rdm0vY29uZmlnLmNgIGFuZCB0YWtlIGEgbG9vayBhdCBgY2hlY2tfZmVhdHVyZV9tYXBgLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBob3cgdGhlIHRpbWVycyBhcmUgY29uZmlndXJlZCBvciB3aGF0IGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZlYXR1cmUgc2V0LCBhbmQgcG90ZW50aWFsbHkgdGhlIGNvbmZpZ3VyYXRpb24sIHdpbGwgb2ZmZXIgY2x1ZXMgdG8gdGhlIGhvdCBwYXRoIGxvZ2ljIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdkNQVSBsb2FkaW5nIGFuZCB0aW1lciBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfZmVhdHVyZV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYz0xMzc2PXN0YXRpYyB2b2lkIF9faW5pdCBjaGVja19yZWdfZGVzYyhjb25zdCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2MgKnIpXG4tLVxuYXJjaC9hcm02NC9rdm0vY29uZmlnLmMtMTM4MS1cbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jOjEzODI6dm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jLTEzODMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbml0aWFsaXphdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgY2hlY2tfZmVhdHVyZV9tYXBgIGlzIGJlaW5nIGRlZmluZWQgd2l0aGluIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBhYm91dCBpbml0aWFsaXppbmcgc29tZXRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0LiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgZ2V0X3JlZ19maXhlZF9iaXRzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC9hcm02NC9rdm0vY29uZmlnLmNgLiBUaGF0IGZpbGUgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgZmlsZSBwYXRoLiBJdCB3aWxsIGhvcGVmdWxseSBwcm92aWRlIHNvbWUgY29udGV4dCBmb3IgYGNoZWNrX2ZlYXR1cmVfbWFwYCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBBUk02NCBLVk0gY29uZmlndXJhdGlvbi4gSSBleHBlY3QgdGhhdCBkaWdnaW5nIGludG8gdGhhdCBmdW5jdGlvbiB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGZlYXR1cmUgbWFwJiMzOTtzIHB1cnBvc2UgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgb3IgdmFsaWRhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcmVnX2ZpeGVkX2JpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYz0xNTA5PXZvaWQgY29tcHV0ZV9mZ3Uoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGZndF9ncm91cF9pZCBmZ3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vY29uZmlnLmMtMTU1Mi1cbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jOjE1NTM6c3RydWN0IHJlc3ggZ2V0X3JlZ19maXhlZF9iaXRzKHN0cnVjdCBrdm0gKmt2bSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NzcKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogNDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSB0YXJnZXQgaXMgdkNQVSBpbml0aWFsaXphdGlvbiwgYW5kIGBnZXRfcmVnX2ZpeGVkX2JpdHNgIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdGhhdCBhcmUgd29ydGggZm9jdXNpbmcgb24gZm9yIGZ1enppbmcuCgpNeSBsaXN0IG9mIGNhbmRpZGF0ZSBmb2N1cyBzeW1ib2xzIGluY2x1ZGVzOiBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGBsaW1pdF9udl9pZF9yZWdgLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLCBhbmQgYGdldF9yZWdfZml4ZWRfYml0c2AuIFRoZXNlIGFyZSBhbGwgZGlyZWN0bHkgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiBvciBrZXkgcmVnaXN0ZXIgbG9naWMgd2l0aGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaW1wbGVtZW50YXRpb24uIExvb2tpbmcgZnVydGhlciwgSSYjMzk7bGwgYWRkIGBmaXh1cF9udl9ndWVzdF9leGl0YCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgb24gdGhlIGV4aXQgcGF0aC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgYE5WSENSX0VMMmAgbG9naWMsIHdoaWNoIGlzIG5ldy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIHBhdGNoIGFmZmVjdHMgYGFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLCBhbmQgdGhlc2UgZmlsZXMgYXJlIGNvbXBpbGVkIG9ubHkgd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ7IHRoZSBgS1ZNYCBjb25maWcgaXMgc3VmZmljaWVudCB0byBidWlsZCB0aGVzZSBjb2RlIHBhdGhzLiBObyBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgYXBwYXJlbnQuCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHZpZXcgZm9yIGZ1enppbmc6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgYSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb24gd2l0aCBjbGVhciBlbnRyeSBwb2ludHMuCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBrdm1faW5pdF9udl9zeXNyZWdzYAogICAgKiAgIGBsaW1pdF9udl9pZF9yZWdgCiAgICAqICAgYG52aGNyX2VsMl92aXNpYmlsaXR5YAogICAgKiAgIGBnZXRfcmVnX2ZpeGVkX2JpdHNgCiAgICAqICAgYGZpeHVwX252X2d1ZXN0X2V4aXRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEtWTWAKCk15IHJlYXNvbmluZyBpcyBzaW1wbGUuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyBhbmQgdjJwMSBzdXBwb3J0IGluIEtWTS4gSXQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBLVk0gaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluY2x1ZGluZyB0aGUgc3lzcmVncyAoTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZsb3cuIFRoaXMgbWVhbnMgdGhhdCBieSBydW5uaW5nIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIEtWTSBndWVzdCwgd2UgY2FuIGFjdGl2YXRlIHRoZSBhZmZlY3RlZCBjb2RlIHRvIGJlIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pbml0X252X3N5c3JlZ3MmIzM0OywKICAgICYjMzQ7bGltaXRfbnZfaWRfcmVnJiMzNDssCiAgICAmIzM0O252aGNyX2VsMl92aXNpYmlsaXR5JiMzNDssCiAgICAmIzM0O2dldF9yZWdfZml4ZWRfYml0cyYjMzQ7LAogICAgJiMzNDtmaXh1cF9udl9ndWVzdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW5pdF9udl9zeXNyZWdzJiMzNDssCiAgICAmIzM0O2xpbWl0X252X2lkX3JlZyYjMzQ7LAogICAgJiMzNDtudmhjcl9lbDJfdmlzaWJpbGl0eSYjMzQ7LAogICAgJiMzNDtnZXRfcmVnX2ZpeGVkX2JpdHMmIzM0OywKICAgICYjMzQ7Zml4dXBfbnZfZ3Vlc3RfZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyAoRkVBVF9OVjMpIGFuZCBGRUFUX05WMnAxIGluIEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgc3lzcmVnIGhhbmRsaW5nIChlLmcuLCBOVkhDUl9FTDIsIENQVFJfRUwyLCBDTlRIQ1RMX0VMMiksIHRyYXAgY29uZmlndXJhdGlvbiwgYW5kIGd1ZXN0IGV4aXQgZml4dXBzLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBieSBydW5uaW5nIEtWTSBndWVzdHMgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE3LjczMTQ5MTczMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjUxMDEyNzI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW5pdF9udl9zeXNyZWdzXCIsXG4gICAgXCJsaW1pdF9udl9pZF9yZWdcIixcbiAgICBcIm52aGNyX2VsMl92aXNpYmlsaXR5XCIsXG4gICAgXCJnZXRfcmVnX2ZpeGVkX2JpdHNcIixcbiAgICBcImZpeHVwX252X2d1ZXN0X2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyAoRkVBVF9OVjMpIGFuZCBGRUFUX05WMnAxIGluIEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgc3lzcmVnIGhhbmRsaW5nIChlLmcuLCBOVkhDUl9FTDIsIENQVFJfRUwyLCBDTlRIQ1RMX0VMMiksIHRyYXAgY29uZmlndXJhdGlvbiwgYW5kIGd1ZXN0IGV4aXQgZml4dXBzLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBieSBydW5uaW5nIEtWTSBndWVzdHMgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MTcuNzMxNDk5NDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE2NTE2MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDhkYTYyYTNjZWRiZjg4ZmYzZTY4YWFjOTdiZDFkMGJhOWE3ZGIwM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE2OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG5pbmRleCBhNTc4NzBmYTk2ZGI1Yi4uYTQyNjgzYWY3OWZiNWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbkBAIC05NjgsNiArOTY4LDcgQEAgc3RydWN0IGFybTY0X2Z0cl9yZWcgKmdldF9hcm02NF9mdHJfcmVnKHUzMiBzeXNfaWQpO1xcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7XFxuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyMV9vdmVycmlkZTtcXG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnIyX292ZXJyaWRlO1xcbitleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjRfb3ZlcnJpZGU7XFxuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRwZnIwX292ZXJyaWRlO1xcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMV9vdmVycmlkZTtcXG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHpmcjBfb3ZlcnJpZGU7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcXG5pbmRleCAzZjkyMzNiNWExMzA4MS4uZjZjZDg1MTA0Nzk0NzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaFxcbkBAIC0yODcsMjEgKzI4Nyw2IEBAXFxuIFxcdFxcdFxcdFxcdCBHRU5NQVNLKDE5LCAxOCkgfFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0IEdFTk1BU0soMTUsIDApKVxcbiBcXG4tLypcXG4tICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dFxcbi0gKiBhdCB0aGlzIHBvaW50IGluIHRpbWUuIEl0IGRvZXNuJ3QgbWVhbiB0aGF0IHdlIGFjdHVhbGx5ICpoYW5kbGUqXFxuLSAqIHRoZW0sIGJ1dCB0aGF0IGF0IGxlYXN0IHRob3NlIHRoYXQgYXJlIG5vdCBhZHZlcnRpc2VkIHRvIGEgZ3Vlc3RcXG4tICogd2lsbCBiZSBSRVMwIGZvciB0aGF0IGd1ZXN0Llxcbi0gKi9cXG4tI2RlZmluZSBfX0hDUlhfRUwyX01BU0tcXHRcXHQoQklUX1VMTCg2KSlcXG4tI2RlZmluZSBfX0hDUlhfRUwyX25NQVNLXFx0KEdFTk1BU0tfVUxMKDI0LCAxNCkgfCBcXFxcXFxuLVxcdFxcdFxcdFxcdCBHRU5NQVNLX1VMTCgxMSwgNykgIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHQgR0VOTUFTS19VTEwoNSwgMCkpXFxuLSNkZWZpbmUgX19IQ1JYX0VMMl9SRVMwXFx0XFx0fihfX0hDUlhfRUwyX25NQVNLIHwgX19IQ1JYX0VMMl9NQVNLKVxcbi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMVxcdFxcdH4oX19IQ1JYX0VMMl9uTUFTSyB8IFxcXFxcXG4tXFx0XFx0XFx0XFx0ICBfX0hDUlhfRUwyX01BU0sgIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHQgIF9fSENSWF9FTDJfUkVTMClcXG4tXFxuIC8qIEh5cCBQcmVmZXRjaCBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyIChIUEZBUi9IREZBUikgKi9cXG4gI2RlZmluZSBIUEZBUl9NQVNLXFx0KH5VTCgweGYpKVxcbiAvKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcXG5pbmRleCA1YmYzZDdlMWQ5MmM3Ny4uZDZmNDMyYjE1NThmNWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuQEAgLTI2Niw2ICsyNjYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHZzZXJyb3Jfc3RhdGVfaXNfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgICAgIChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JYX0VMMikgXFx1MDAyNiBIQ1JYX0VMMl9UTUVBKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbnYyKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19udjMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0a3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19uZXN0ZWRfbnYzX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHJldHVybiAoaGFzX3ZoZSgpIFxcdTAwMjZcXHUwMDI2IGt2bV9oYXNfbnYzKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjYgaXNfbmVzdGVkX2N0eHQodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpIFxcdTAwMjYgSENSX0VMMl9OVikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKSBcXHUwMDI2IEhDUlhfRUwyX05WVEdFKSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBsYXlvdXQgb2YgU1BTUiBmb3IgYW4gQUFyY2gzMiBzdGF0ZSBpcyBkaWZmZXJlbnQgd2hlbiBvYnNlcnZlZCBmcm9tIGFuXFxuICAqIEFBcmNoNjQgU1BTUl9FTHggb3IgYW4gQUFyY2gzMiBTUFNSXyouIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBBQXJjaDMyXFxuQEAgLTYxNyw3ICs2MzcsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2luY3JfcGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSB1NjQgdmNwdV9zYW5pdGlzZWRfY3B0cl9lbDIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHU2NCBjcHRyID0gX192Y3B1X3N5c19yZWcodmNwdSwgQ1BUUl9FTDIpO1xcbitcXHR1NjQgY3B0ciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIENQVFJfRUwyKTtcXG4gXFxuIFxcdGlmICghdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSlcXG4gXFx0XFx0Y3B0ciA9IHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDEoY3B0cik7XFxuQEAgLTY4Niw2ICs3MDYsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X2hjcngoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0XFx0aWYgKGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRJU0FSMV9FTDEsIExTNjQsIExTNjRfVikpXFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfRW5BU1I7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBOVjMgaXMgYSBob3N0LXNwZWNpZmljIGV4dGVuc2lvbiwgYW5kIHdlIGFsd2F5cyB1c2UgaXRcXG4rXFx0XFx0ICogd2hlbiBwcmVzZW50IGFuZCB0aGF0IHRoZSBndWVzdCB1c2VzIE5WLiBJdCBtYXkgYmUgYmVcXG4rXFx0XFx0ICogaGlkZGVuIGZyb20gdGhlIGd1ZXN0IHRob3VnaC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB2Y3B1X2hhc19udih2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKSB7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfTlZUR0U7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBJZiB0aGUgZ3Vlc3QgaXMgTlYyLWNhcGFibGUsIHRoZW4gd2UgbmVlZCB0byBzZWVcXG4rXFx0XFx0XFx0ICogYWxsIHRoZSBUTEJJcywgYXMgY29uZmlndXJlZCBpbiBIQ1JfRUwyLlxcbitcXHRcXHRcXHQgKiBPdGhlcndpc2UsIHJlbGF4IHRoZSBUTEJJIHRyYXBzIHRvIG9ubHkgVEdFPTAuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoIWt2bV9oYXNfbnYyKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDIgfD0gKEhDUlhfRUwyX05WblRUTEIgIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0SENSWF9FTDJfTlZuVFRMQklTKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi4yNjQ4YzhhNzE3YmEwNSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNTQzLDYgKzU0Myw3IEBAIGVudW0gdmNwdV9zeXNyZWcge1xcbiBcXHRNRENSX0VMMixcXHQvKiBNb25pdG9yIERlYnVnIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKEVMMikgKi9cXG4gXFx0Q05USENUTF9FTDIsXFx0LyogQ291bnRlci10aW1lciBIeXBlcnZpc29yIENvbnRyb2wgcmVnaXN0ZXIgKi9cXG4gXFx0WkNSX0VMMixcXHQvKiBTVkUgQ29udHJvbCBSZWdpc3RlciAoRUwyKSAqL1xcbitcXHRIQ1JfRUwyLFxcdC8qIEh5cGVydmlzb3IgQ29udHJvbCBSZWdpc3RlciAqL1xcbiBcXG4gXFx0LyogQW55IFZOQ1ItY2FwYWJsZSByZWcgZ29lcyBhZnRlciB0aGlzIHBvaW50ICovXFxuIFxcdE1BUktFUihfX1ZOQ1JfU1RBUlRfXyksXFxuQEAgLTU3MSw3ICs1NzIsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcXG4gXFx0Vk5DUihURlNSX0VMMSksXFx0LyogVGFnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAoRUwxKSAqL1xcbiBcXHRWTkNSKFZQSURSX0VMMiksLyogVmlydHVhbGl6YXRpb24gUHJvY2Vzc29yIElEIFJlZ2lzdGVyICovXFxuIFxcdFZOQ1IoVk1QSURSX0VMMiksLyogVmlydHVhbGl6YXRpb24gTXVsdGlwcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi9cXG4tXFx0Vk5DUihIQ1JfRUwyKSxcXHQvKiBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cXG4rXFx0Vk5DUihOVkhDUl9FTDIpLC8qIE5WIEh5cGVydmlzb3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqL1xcbiBcXHRWTkNSKEhTVFJfRUwyKSxcXHQvKiBIeXBlcnZpc29yIFN5c3RlbSBUcmFwIFJlZ2lzdGVyICovXFxuIFxcdFZOQ1IoVlRUQlJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBUcmFuc2xhdGlvbiBUYWJsZSBCYXNlIFJlZ2lzdGVyICovXFxuIFxcdFZOQ1IoVlRDUl9FTDIpLFxcdC8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bmNyX21hcHBpbmcuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmhcXG5pbmRleCAxNDM2NmQzNWNlODJmMC4uOWU4YTQ5ZmE4YjYzOGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bmNyX21hcHBpbmcuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmhcXG5AQCAtMTEsNyArMTEsNyBAQFxcbiAjZGVmaW5lIFZOQ1JfVlRDUl9FTDIgICAgICAgICAgIDB4MDQwXFxuICNkZWZpbmUgVk5DUl9WTVBJRFJfRUwyICAgICAgICAgMHgwNTBcXG4gI2RlZmluZSBWTkNSX0NOVFZPRkZfRUwyICAgICAgICAweDA2MFxcbi0jZGVmaW5lIFZOQ1JfSENSX0VMMiAgICAgICAgICAgIDB4MDc4XFxuKyNkZWZpbmUgVk5DUl9OVkhDUl9FTDIgICAgICAgICAgMHgwNzhcXG4gI2RlZmluZSBWTkNSX0hTVFJfRUwyICAgICAgICAgICAweDA4MFxcbiAjZGVmaW5lIFZOQ1JfVlBJRFJfRUwyICAgICAgICAgIDB4MDg4XFxuICNkZWZpbmUgVk5DUl9UUElEUl9FTDIgICAgICAgICAgMHgwOTBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjE0ZmJmYThlNmI3YjUwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbkBAIC03ODUsNiArNzg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfcmF6W10gPSB7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7XFxuK3N0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjRfb3ZlcnJpZGU7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMF9vdmVycmlkZTtcXG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRwZnIxX292ZXJyaWRlO1xcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NHpmcjBfb3ZlcnJpZGU7XFxuQEAgLTg1OCw3ICs4NTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IF9fZnRyX3JlZ19lbnRyeSB7XFxuIFxcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSMl9FTDEsIGZ0cl9pZF9hYTY0bW1mcjIsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2aWRfYWE2NG1tZnIyX292ZXJyaWRlKSxcXG4gXFx0QVJNNjRfRlRSX1JFRyhTWVNfSURfQUE2NE1NRlIzX0VMMSwgZnRyX2lkX2FhNjRtbWZyMyksXFxuLVxcdEFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQpLFxcbitcXHRBUk02NF9GVFJfUkVHX09WRVJSSURFKFNZU19JRF9BQTY0TU1GUjRfRUwxLCBmdHJfaWRfYWE2NG1tZnI0LFxcbitcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlkX2FhNjRtbWZyNF9vdmVycmlkZSksXFxuIFxcbiBcXHQvKiBPcDEgPSAwLCBDUm4gPSAxMCwgQ1JtID0gNCAqL1xcbiBcXHRBUk02NF9GVFJfUkVHKFNZU19NUEFNSURSX0VMMSwgZnRyX21wYW1pZHIpLFxcbkBAIC0yNjIwLDYgKzI2MjIsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XFxuIFxcdFxcdFxcdHsgLyogU2VudGluZWwgKi8gfVxcbiBcXHRcXHR9LFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5kZXNjID0gXFxcIkZFQVRfTlYycDFcXFwiLFxcbitcXHRcXHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19OVjJQMSxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXFxuK1xcdFxcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJQMSlcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGVzYyA9IFxcXCJGRUFUX05WM1xcXCIsXFxuK1xcdFxcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX05WMyxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXFxuK1xcdFxcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfMzJCSVRfRUwwX0RPX05PVF9VU0UsXFxuIFxcdFxcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmggYi9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmhcXG5pbmRleCBkNGM3ZDQ1YWU2YmM4My4uZDE1YzJjYjFiMGYyOGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgUElfRVhQT1JUX1NZTShpZF9hYTY0aXNhcjJfb3ZlcnJpZGUpO1xcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7XFxuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NG1tZnIxX292ZXJyaWRlKTtcXG4gUElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjJfb3ZlcnJpZGUpO1xcbitQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyNF9vdmVycmlkZSk7XFxuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHBmcjBfb3ZlcnJpZGUpO1xcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRwZnIxX292ZXJyaWRlKTtcXG4gUElfRVhQT1JUX1NZTShpZF9hYTY0c21mcjBfb3ZlcnJpZGUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xcbmluZGV4IGJjNTdiMjkwZTVlN2JhLi40ZTQ3NjE2YmNhYzIzYSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xcbkBAIC0xMDYsNiArMTA2LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjIG1tZnIyIF9fcHJlbDY0X2luaXRjb25zdCA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjIG1tZnI0IF9fcHJlbDY0X2luaXRjb25zdCA9IHtcXG4rXFx0Lm5hbWVcXHRcXHQ9IFxcXCJpZF9hYTY0bW1mcjRcXFwiLFxcbitcXHQub3ZlcnJpZGVcXHQ9IFxcdTAwMjZpZF9hYTY0bW1mcjRfb3ZlcnJpZGUsXFxuK1xcdC5maWVsZHNcXHRcXHQ9IHtcXG4rXFx0XFx0RklFTEQoXFxcIm52X2ZyYWNcXFwiLCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIE5VTEwpLFxcbitcXHRcXHR7fVxcbitcXHR9LFxcbit9O1xcbitcXG4gc3RhdGljIGJvb2wgX19pbml0IHBmcjBfc3ZlX2ZpbHRlcih1NjQgdmFsKVxcbiB7XFxuIFxcdC8qXFxuQEAgLTIyMCw2ICsyMjksNyBAQCBQUkVMNjQoY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYywgcmVnKSByZWdzW10gX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xcbiBcXHR7IFxcdTAwMjZtbWZyMFxcdH0sXFxuIFxcdHsgXFx1MDAyNm1tZnIxXFx0fSxcXG4gXFx0eyBcXHUwMDI2bW1mcjJcXHR9LFxcbitcXHR7IFxcdTAwMjZtbWZyNFxcdH0sXFxuIFxcdHsgXFx1MDAyNnBmcjAgXFx0fSxcXG4gXFx0eyBcXHUwMDI2cGZyMSBcXHR9LFxcbiBcXHR7IFxcdTAwMjZpc2FyMVxcdH0sXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IDQxNTVmZTg5YjU4YTE3Li5kYjYwZmFjYWQ5ZjNjMCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcXG5AQCAtODc2LDggKzg3NiwxNCBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zZXRfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApXFxuIFxcdGFzc2lnbl9jbGVhcl9zZXRfYml0KHR2dDAyLCBDTlRIQ1RMX0VMMU5WVkNULCBjbHIsIHNldCk7XFxuIFxcdGFzc2lnbl9jbGVhcl9zZXRfYml0KHRwdDAyLCBDTlRIQ1RMX0VMMU5WUENULCBjbHIsIHNldCk7XFxuIFxcbi1cXHQvKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBWSEUsIHNvIHVzZSB0aGUgQ05USENUTF9FTDIgYWNjZXNzb3IuICovXFxuLVxcdHN5c3JlZ19jbGVhcl9zZXQoY250aGN0bF9lbDIsIGNsciwgc2V0KTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBvbmx5IGhhcHBlbnMgb24gVkhFLCBzbyB1c2UgdGhlIENOVEhDVExfRUwyIGFjY2Vzc29yLCB1bmxlc3NcXG4rXFx0ICogd2UgYXJlIHN1cmUgQ05US0NUTF9FTDEgaXMgY29tcGxldGVseSBzdGF0ZWZ1bCB3aXRoIEZFQVRfTlYycDEuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcXG4rXFx0XFx0c3lzcmVnX2NsZWFyX3NldChjbnRoY3RsX2VsMiwgY2xyLCBzZXQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN5c3JlZ19jbGVhcl9zZXQoY250a2N0bF9lbDEsIGNsciwgc2V0KTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fdGltZXJfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vY29uZmlnLmMgYi9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xcbmluZGV4IDA2MjIxNjJiMDg5ZTUwLi43ZTg2NDc5MTQyNzIzNCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXFxuQEAgLTIyNSw2ICsyMjUsNyBAQCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2Mge1xcbiAjZGVmaW5lIEZFQVRfSENYXFx0XFx0SURfQUE2NE1NRlIxX0VMMSwgSENYLCBJTVBcXG4gI2RlZmluZSBGRUFUX1MyUElFXFx0XFx0SURfQUE2NE1NRlIzX0VMMSwgUzJQSUUsIElNUFxcbiAjZGVmaW5lIEZFQVRfR0NJRVxcdFxcdElEX0FBNjRQRlIyX0VMMSwgR0NJRSwgSU1QXFxuKyNkZWZpbmUgRkVBVF9OVjNcXHRcXHRJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjNcXG4gXFxuIHN0YXRpYyBib29sIG5vdF9mZWF0X2FhNjRlbDMoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuQEAgLTkwNCw2ICs5MDUsMTIgQEAgc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVBfRkdUKGhkZmd3dHIyX2Rlc2MsIGhkZmd3dHIyX21hc2tzLFxcbiBcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xcbitcXHRORUVEU19GRUFUKEhDUlhfRUwyX05WVEdFXFx0XFx0fFxcbitcXHRcXHQgICBIQ1JYX0VMMl9OVm5UVExCXFx0XFx0fFxcbitcXHRcXHQgICBIQ1JYX0VMMl9OVm5UVExCSVNcXHRcXHR8XFxuK1xcdFxcdCAgIEhDUlhfRUwyX05WblRUTEJPUyxcXG4rXFx0XFx0ICAgRkVBVF9OVjMpLFxcbitcXHRORUVEU19GRUFUKEhDUlhfRUwyX1NSTUFTS0VuLCBGRUFUX1NSTUFTSyksXFxuIFxcdE5FRURTX0ZFQVQoSENSWF9FTDJfUEFDTUVuLCBmZWF0X3BhdXRoX2xyKSxcXG4gXFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9FbkZQTSwgRkVBVF9GUE1SKSxcXG4gXFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9HQ1NFbiwgRkVBVF9HQ1MpLFxcbkBAIC05MzMsNyArOTQwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3J4X2ZlYXRfbWFwW10gPSB7XFxuIH07XFxuIFxcbiBcXG4tc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAoaGNyeF9kZXNjLCBfX0hDUlhfRUwyLFxcbitzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3J4X2Rlc2MsIEhDUlhfRUwyLFxcbiBcXHRcXHRcXHQgICAgICBoY3J4X2ZlYXRfbWFwLCBGRUFUX0hDWCk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xcbkBAIC0xMDEwLDYgKzEwMTcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xcbiBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3JfZGVzYywgSENSX0VMMixcXG4gXFx0XFx0XFx0ICAgICAgaGNyX2ZlYXRfbWFwLCBGRUFUX0FBNjRFTDIpO1xcbiBcXG4rc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAobnZoY3JfZGVzYywgTlZIQ1JfRUwyLFxcbitcXHRcXHRcXHQgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfTlYzKTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgc2N0bHIyX2ZlYXRfbWFwW10gPSB7XFxuIFxcdE5FRURTX0ZFQVQoU0NUTFIyX0VMMV9OTUVBXFx0fFxcbiBcXHRcXHQgICBTQ1RMUjJfRUwxX0VBU0UsXFxuQEAgLTEzODQsNiArMTM5NCw3IEBAIHZvaWQgX19pbml0IGNoZWNrX2ZlYXR1cmVfbWFwKHZvaWQpXFxuIFxcdGNoZWNrX3JlZ19kZXNjKFxcdTAwMjZoZGZnd3RyMl9kZXNjKTtcXG4gXFx0Y2hlY2tfcmVnX2Rlc2MoXFx1MDAyNmhjcnhfZGVzYyk7XFxuIFxcdGNoZWNrX3JlZ19kZXNjKFxcdTAwMjZoY3JfZGVzYyk7XFxuK1xcdGNoZWNrX3JlZ19kZXNjKFxcdTAwMjZudmhjcl9kZXNjKTtcXG4gXFx0Y2hlY2tfcmVnX2Rlc2MoXFx1MDAyNnNjdGxyMl9kZXNjKTtcXG4gXFx0Y2hlY2tfcmVnX2Rlc2MoXFx1MDAyNnRjcjJfZWwyX2Rlc2MpO1xcbiBcXHRjaGVja19yZWdfZGVzYyhcXHUwMDI2c2N0bHJfZWwxX2Rlc2MpO1xcbkBAIC0xNTc5LDExICsxNTkwLDIxIEBAIHN0cnVjdCByZXN4IGdldF9yZWdfZml4ZWRfYml0cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBIQ1JYX0VMMjpcXG4gXFx0XFx0cmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sIFxcdTAwMjZoY3J4X2Rlc2MsIDAsIDApO1xcbi1cXHRcXHRyZXN4LnJlczEgfD0gX19IQ1JYX0VMMl9SRVMxO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBIQ1JfRUwyOlxcbiBcXHRcXHRyZXN4ID0gY29tcHV0ZV9yZWdfcmVzeF9iaXRzKGt2bSwgXFx1MDAyNmhjcl9kZXNjLCAwLCAwKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTlZIQ1JfRUwyOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbmx5IGFwcGx5IHNhbml0aXNhdGlvbiBpZiB3ZSBkbyBoYXZlIEZFQVRfTlYzLlxcbitcXHRcXHQgKiBPdGhlcndpc2UsIHRoZSByZWdpc3RlciBhbGlhc2VzIHdpdGggSENSX0VMMiBpbiBWTkNSLFxcbitcXHRcXHQgKiBhbmQgd2UncmUgYmV0dGVyIG9mZiByZWx5aW5nIG9uIGRhdGEgdHJhbnNmZXJzIGJldHdlZW5cXG4rXFx0XFx0ICogTlZIQ1JfRUwyIGFuZCBIQ1JfRUwyIHRvIHNhbml0aXNlIHRoaW5ncy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlc3ggPSAoa3ZtX2hhc19udjMoa3ZtKSA/XFxuK1xcdFxcdFxcdGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sIFxcdTAwMjZudmhjcl9kZXNjLCAwLCAwKSA6XFxuK1xcdFxcdFxcdCh0eXBlb2YocmVzeCkpe30pO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBTQ1RMUjJfRUwxOlxcbiBcXHRjYXNlIFNDVExSMl9FTDI6XFxuIFxcdFxcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcXHUwMDI2c2N0bHIyX2Rlc2MsIDAsIDApO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuY1xcbmluZGV4IDNjODJmMzkyODQ1ZDE0Li5mNWRjNTc4ZDhjOTg1NiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuY1xcbkBAIC05MCw2ICs5MCw3IEBAIGVudW0gY2d0X2dyb3VwX2lkIHtcXG4gXFx0Q0dUX0hDUlhfRW5GUE0sXFxuIFxcdENHVF9IQ1JYX1RDUjJFbixcXG4gXFx0Q0dUX0hDUlhfU0NUTFIyRW4sXFxuK1xcdENHVF9IQ1JYX25OVlRHRSxcXG4gXFxuIFxcdENHVF9DTlRIQ1RMX0VMMVRWVCxcXG4gXFx0Q0dUX0NOVEhDVExfRUwxVFZDVCxcXG5AQCAtMTIxLDYgKzEyMiw4IEBAIGVudW0gY2d0X2dyb3VwX2lkIHtcXG4gXFx0Q0dUX01EQ1JfVERFX1REUkEsXFxuIFxcdENHVF9NRENSX1REQ0NfVERFX1REQSxcXG4gXFxuK1xcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UsXFxuK1xcbiBcXHRDR1RfSUNIX0hDUl9UQ19URElSLFxcbiBcXG4gXFx0LypcXG5AQCAtNDEzLDYgKzQxNiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRyYXBfYml0cyBjb2Fyc2VfdHJhcF9iaXRzW10gPSB7XFxuIFxcdFxcdC5tYXNrXFx0XFx0PSBIQ1JYX0VMMl9TQ1RMUjJFbixcXG4gXFx0XFx0LmJlaGF2aW91clxcdD0gQkVIQVZFX0ZPUldBUkRfUlcsXFxuIFxcdH0sXFxuK1xcdFtDR1RfSENSWF9uTlZUR0VdID0ge1xcbitcXHRcXHQuaW5kZXhcXHRcXHQ9IEhDUlhfRUwyLFxcbitcXHRcXHQudmFsdWVcXHRcXHQ9IDAsXFxuK1xcdFxcdC5tYXNrXFx0XFx0PSBIQ1JYX0VMMl9OVlRHRSxcXG4rXFx0XFx0LmJlaGF2aW91clxcdD0gQkVIQVZFX0ZPUldBUkRfUlcsXFxuK1xcdH0sXFxuIFxcdFtDR1RfQ05USENUTF9FTDFUVlRdID0ge1xcbiBcXHRcXHQuaW5kZXhcXHRcXHQ9IENOVEhDVExfRUwyLFxcbiBcXHRcXHQudmFsdWVcXHRcXHQ9IENOVEhDVExfRUwxVFZULFxcbkBAIC00NjgsNiArNDc3LDcgQEAgc3RhdGljIGNvbnN0IGVudW0gY2d0X2dyb3VwX2lkICpjb2Fyc2VfY29udHJvbF9jb21ib1tdID0ge1xcbiBcXHRcXHRcXHRcXHRcXHRDR1RfSENSX1RWTSwgQ0dUX0hDUl9UUlZNLCBDR1RfSENSWF9TQ1RMUjJFbiksXFxuIFxcdE1DQihDR1RfSENSX1RQVV9USUNBQixcXHRcXHRDR1RfSENSX1RQVSwgQ0dUX0hDUl9USUNBQiksXFxuIFxcdE1DQihDR1RfSENSX1RQVV9UT0NVLFxcdFxcdENHVF9IQ1JfVFBVLCBDR1RfSENSX1RPQ1UpLFxcbitcXHRNQ0IoQ0dUX0hDUl9OVl9IQ1JYX25OVlRHRSxcXHRDR1RfSENSX05WLCBDR1RfSENSWF9uTlZUR0UpLFxcbiBcXHRNQ0IoQ0dUX0hDUl9OVjFfbk5WMl9FTlNDWFQsXFx0Q0dUX0hDUl9OVjFfbk5WMiwgQ0dUX0hDUl9FTlNDWFQpLFxcbiBcXHRNQ0IoQ0dUX01EQ1JfVFBNX1RQTUNSLFxcdFxcdENHVF9NRENSX1RQTSwgQ0dUX01EQ1JfVFBNQ1IpLFxcbiBcXHRNQ0IoQ0dUX01EQ1JfVFBNX0hQTU4sXFx0XFx0Q0dUX01EQ1JfVFBNLCBDR1RfTURDUl9IUE1OKSxcXG5AQCAtODUzLDYgKzg2Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5jb2RpbmdfdG9fdHJhcF9jb25maWcgZW5jb2RpbmdfdG9fY2d0W10gX19pbml0Y29uc3QgPSB7XFxuIFxcdFNSX1RSQVAoU1lTX1NDVExSMl9FTDIsXFx0XFx0Q0dUX0hDUl9OViksXFxuIFxcdFNSX1JBTkdFX1RSQVAoU1lTX0hDUl9FTDIsXFxuIFxcdFxcdCAgICAgIFNZU19IQ1JYX0VMMixcXHRDR1RfSENSX05WKSxcXG4rXFx0U1JfVFJBUChTWVNfTlZIQ1JfRUwyLFxcdFxcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UpLFxcbiBcXHRTUl9UUkFQKFNZU19TTVBSSU1BUF9FTDIsXFx0Q0dUX0hDUl9OViksXFxuIFxcdFNSX1RSQVAoU1lTX1NNQ1JfRUwyLFxcdFxcdENHVF9IQ1JfTlYpLFxcbiBcXHRTUl9SQU5HRV9UUkFQKFNZU19UVEJSMF9FTDIsXFxuQEAgLTIzMjAsNyArMjMzMSw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZClcXG4gXFx0QlVJTERfQlVHX09OKF9fTlJfQ0dUX0dST1VQX0lEU19fIFxcdTAwM2UgQklUKFRDX0NHVF9CSVRTKSk7XFxuIFxcdEJVSUxEX0JVR19PTihfX05SX0ZHVF9HUk9VUF9JRFNfXyBcXHUwMDNlIEJJVChUQ19GR1RfQklUUykpO1xcbiBcXHRCVUlMRF9CVUdfT04oX19OUl9GR19GSUxURVJfSURTX18gXFx1MDAzZSBCSVQoVENfRkdGX0JJVFMpKTtcXG4tXFx0QlVJTERfQlVHX09OKF9fSENSWF9FTDJfTUFTSyBcXHUwMDI2IF9fSENSWF9FTDJfbk1BU0spO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCk7IGkrKykge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgZW5jb2RpbmdfdG9fdHJhcF9jb25maWcgKmNndCA9IFxcdTAwMjZlbmNvZGluZ190b19jZ3RbaV07XFxuQEAgLTIzNDYsMTAgKzIzNTYsNiBAQCBpbnQgX19pbml0IHBvcHVsYXRlX252X3RyYXBfY29uZmlnKHZvaWQpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKF9fSENSWF9FTDJfUkVTMCAhPSBIQ1JYX0VMMl9SRVMwKVxcbi1cXHRcXHRrdm1faW5mbyhcXFwiU2FuaXRpc2VkIEhDUl9FTDJfUkVTMCA9ICUwMTZsbHgsIGV4cGVjdGluZyAlMDE2bGx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgX19IQ1JYX0VMMl9SRVMwLCBIQ1JYX0VMMl9SRVMwKTtcXG4tXFxuIFxcdGt2bV9pbmZvKFxcXCJudjogJWxkIGNvYXJzZSBncmFpbmVkIHRyYXAgaGFuZGxlcnNcXFxcblxcXCIsXFxuIFxcdFxcdCBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCkpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oXFxuaW5kZXggNGJmNjI0YTQ5NTkxZGYuLjdiMjcyOTZjOTQ2MDcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxcbkBAIC0xMDgsOSArMTA4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX2NwdHJfdHJhcHNfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3RcXG4gXFx0ICogd3JpdGluZyB0byBDUFRSX0VMMiB2aWEgQ1BBQ1JfRUwxIGNhbid0IHNldCBhbnkgb2YgVENQQUMgb3IgVFRBLFxcbiBcXHQgKiBhcyB0aGV5IGFyZSBSRVMwIGluIHRoZSBndWVzdCdzIHZpZXcuIFRvIHdvcmsgYXJvdW5kIGl0LCB0cmFwIHRoZVxcbi1cXHQgKiBzdWNrZXIgdXNpbmcgdGhlIHZlcnkgc2FtZSBiaXQgaXQgY2FuJ3Qgc2V0Li4uXFxuK1xcdCAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4ndCBzZXQuIEZFQVRfTlYycDEgZml4ZXMgaXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiBpc19oeXBfY3R4dCh2Y3B1KSlcXG4rXFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkgXFx1MDAyNlxcdTAwMjYgaXNfaHlwX2N0eHQodmNwdSkpXFxuIFxcdFxcdHZhbCB8PSBDUFRSX0VMMl9UQ1BBQztcXG4gXFxuIFxcdC8qXFxuQEAgLTMyNSw2ICszMjYsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGVhY3RpdmF0ZV90cmFwc19tcGFtKHZvaWQpXFxuIFxcdFxcdHdyaXRlX3N5c3JlZ19zKE1QQU1IQ1JfSE9TVF9GTEFHUywgU1lTX01QQU1IQ1JfRUwyKTtcXG4gfVxcbiBcXG4rLypcXG4rICogSnVzdCBsaWtlIGZvciBIQ1JfRUwyLCB3ZSBjYW4ndCBsZXQgdGhlIGd1ZXN0IG1lc3Mgd2l0aCBzb21lIG9mIHRoZVxcbisgKiBiYXNpY3Mgd2UgcmVseSBvbiBpbiBIQ1JYX0VMMi4gSG93ZXZlciwgdGhlIG1ham9yIGRpZmZlcmVuY2UgaXMgdGhhdFxcbisgKiBIQ1JYX0VMMiBvbmx5IGFmZmVjdHMgRUwxLCBhbmQgbmV2ZXIgRUwyIChzdWRkZW4gb3V0YnVyc3Qgb2Ygc2FuaXR5LCBJXFxuKyAqIGd1ZXNzKS4gU28gaXQgaXMgYWx3YXlzIHRoZSBndWVzdCBpbmZsaWN0aW5nIGl0IG9uIGl0cyBvd24gZ3Vlc3R4LlxcbisgKlxcbisgKiBUaGluZ3Mgd2UgZG9uJ3Qgd2FudCB0byBsZXQgdGhlIGd1ZXN0IGNvbnRyb2wgYXJlOlxcbisgKlxcbisgKiAtIFRNRUE6IFRoYXQncyBmb3IgdXMgdG8gZGVjaWRlIGhvdyBhbiBTRUEgaXMgcm91dGVkLCBub3QgdGhlIGd1ZXN0LlxcbisgKlxcbisgKiAtIFBUVFdJOiBTaW1pbGFybHksIGl0IGlzIGZvciB1cyB0byBkZWNpZGUgd2hldGhlciBSZWR1Y2VkIENvaGVyZW5jeSBmb3JcXG4rICogICB0aGUgUFRXIGlzIGEgdGhpbmcuIEl0IHJlYWxseSBpc24ndC5cXG4rICpcXG4rICogLSBFbklEQ1AxMjg6IFdlIGRvbid0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC5cXG4rICovXFxuKyNkZWZpbmUgTlZfSENSWF9HVUVTVF9FWENMVURFXFx0KEhDUlhfRUwyX1RNRUFcXHQgICAgfCBIQ1JYX0VMMl9QVFRXSSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0IEhDUlhfRUwyX0VuSURDUDEyOClcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9jcHVfY29udGV4dCAqaGN0eHQgPSBob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCk7XFxuQEAgLTM1MCw4ICszNjksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV90cmFwc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR1NjQgaGNyeCA9IHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDI7XFxuIFxcdFxcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSkge1xcbiBcXHRcXHRcXHR1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpO1xcbi1cXHRcXHRcXHRoY3J4IHw9IHZhbCBcXHUwMDI2IF9fSENSWF9FTDJfTUFTSztcXG4tXFx0XFx0XFx0aGNyeCBcXHUwMDI2PSB+KH52YWwgXFx1MDAyNiBfX0hDUlhfRUwyX25NQVNLKTtcXG4rXFx0XFx0XFx0aGNyeCB8PSAodmFsIFxcdTAwMjYgfk5WX0hDUlhfR1VFU1RfRVhDTFVERSk7XFxuK1xcdFxcdFxcdGhjcnggXFx1MDAyNj0gfih+dmFsIFxcdTAwMjYgfk5WX0hDUlhfR1VFU1RfRVhDTFVERSk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGN0eHRfc3lzX3JlZyhoY3R4dCwgSENSWF9FTDIpID0gcmVhZF9zeXNyZWdfcyhTWVNfSENSWF9FTDIpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmhcXG5pbmRleCBhMTdjYmU3NTgyZGU5MC4uYzM4Mjg0OGQzMTk0NzkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXFxuQEAgLTE3Miw2ICsxNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3NhdmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXFxuIFxcbiBcXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxcbiBcXHRcXHRjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSkgPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSMik7XFxuK1xcbitcXHQvKiBSZXRyaWV2ZSBMMidzIEhDUl9FTDIsIGFuZCBzYXZlIGl0IGZvciBmdXR1cmUgdXNlICovXFxuK1xcdGlmIChpc19uZXN0ZWRfbnYzX2N0eHQoY3R4dF90b192Y3B1KGN0eHQpKSlcXG4rXFx0XFx0Y3R4dF9zeXNfcmVnKGN0eHQsIE5WSENSX0VMMikgPSByZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zeXNyZWdfc2F2ZV9lbDJfcmV0dXJuX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXFxuQEAgLTI4NSw2ICsyODksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3Jlc3RvcmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQsXFxuIFxcbiBcXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxcbiBcXHRcXHR3cml0ZV9zeXNyZWdfZWwxKGN0eHRfc3lzX3JlZyhjdHh0LCBTQ1RMUjJfRUwxKSwgU1lTX1NDVExSMik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQdWJsaXNoIHRoZSBMMiB2aWV3IG9mIEhDUl9FTDIgdG8gdGhlIEhXIGlmIEwxIGlzIHVzaW5nIE5WMy5cXG4rXFx0ICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSdzIG93biBWTkNSLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX25lc3RlZF9udjNfY3R4dChjdHh0X3RvX3ZjcHUoY3R4dCkpKVxcbitcXHRcXHR3cml0ZV9zeXNyZWdfcyhjdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7XFxuIH1cXG4gXFxuIC8qIFJlYWQgdGhlIFZDUFUgc3RhdGUncyBQU1RBVEUsIGJ1dCB0cmFuc2xhdGUgKHYpRUwyIHRvIEVMMS4gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Ny4uZjEyOWYyMmYxNTYxOGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5AQCAtNzAsNiArNzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxcbiBcXHRcXHRcXHRoY3IgfD0gSENSX05WMTtcXG4gXFxuK1xcdFxcdC8qIFB1Ymxpc2ggdGhlIGd1ZXN0J3MgdmlldyBvZiBIQ1JfRUwyIHRvIHRoZSBIVyAqL1xcbitcXHRcXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxcbitcXHRcXHRcXHR3cml0ZV9zeXNyZWdfcyhfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogTm90aGluZyBpbiBIQ1JfRUwyIHNob3VsZCBpbXBhY3QgcnVubmluZyBpbiBoeXBlcnZpc29yXFxuIFxcdFxcdCAqIGNvbnRleHQsIGFwYXJ0IGZyb20gYml0cyB3ZSBoYXZlIGRlZmluZWQgYXMgUkVTeCAoRTJILFxcbkBAIC0zMzksNiArMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4gXFx0dTY0IGVzciA9IGt2bV92Y3B1X2dldF9lc3IodmNwdSk7XFxuIFxcdHU2NCBzcHNyLCBlbHIsIG1vZGU7XFxuIFxcbitcXHQvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovXFxuK1xcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpIFxcdTAwMjZcXHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lXFxuIFxcdCAqIGlmIHRoaXMgaXMgYSBWSEUgZ3Vlc3QgaHlwZXJ2aXNvciByZXR1cm5pbmcgdG8gaXRzIG93blxcbkBAIC0zNDksOCArMzU5LDggQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfZXJldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxcbiBcXHQgKiBVbmxlc3MgdGhlIHRyYXAgaGFzIHRvIGJlIGZvcndhcmRlZCBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsXFxuIFxcdCAqIG9mIGNvdXJzZS4uLlxcbiBcXHQgKi9cXG4tXFx0aWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSBcXHUwMDI2IEhDUl9OVikgfHxcXG4tXFx0ICAgIChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSBcXHUwMDI2IEhGR0lUUl9FTDJfRVJFVCkpXFxuK1xcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSB8fFxcbitcXHQgICAgX192Y3B1X3N5c19yZWcodmNwdSwgSEZHSVRSX0VMMikgXFx1MDAyNiBIRkdJVFJfRUwyX0VSRVQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHNwc3IgPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NQU1IpO1xcbkBAIC00NDEsNiArNDUxLDkgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfY3BhY3JfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXFxuIFxcdHU2NCBlc3IgPSBrdm1fdmNwdV9nZXRfZXNyKHZjcHUpO1xcbiBcXHRpbnQgcnQ7XFxuIFxcbitcXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIWlzX2h5cF9jdHh0KHZjcHUpIHx8IGVzcl9zeXM2NF90b19zeXNyZWcoZXNyKSAhPSBTWVNfQ1BBQ1JfRUwxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC01MzQsMTkgKzU0NywxNyBAQCBzdGF0aWMgY29uc3QgZXhpdF9oYW5kbGVyX2ZuIGh5cF9leGl0X2hhbmRsZXJzW10gPSB7XFxuIFxcdFsweDNGXVxcdFxcdFxcdFxcdD0ga3ZtX2h5cF9oYW5kbGVfaW1wZGVmLFxcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4rc3RhdGljIHZvaWQgZml4dXBfbnZfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3luY2hyb25pemVfdmNwdV9wc3RhdGUodmNwdSk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3XFxuIFxcdCAqIHNvIHRoYXQgdGhlIHVzdWFsIGhlbHBlcnMgd29yayBjb3JyZWN0bHkuIFRoaXMgZW5mb3JjZXMgb3VyXFxuIFxcdCAqIGludmFyaWFudCB0aGF0IHRoZSBndWVzdCdzIEhZUCBjb250ZXh0IHN0YXR1cyBpcyBwcmVzZXJ2ZWRcXG4gXFx0ICogYWNyb3NzIGEgcnVuLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB1bmxpa2VseShob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpKSkge1xcbitcXHRpZiAodW5saWtlbHkoaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSkpIHtcXG4gXFx0XFx0dTY0IG1vZGUgPSAqdmNwdV9jcHNyKHZjcHUpIFxcdTAwMjYgKFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XFxuK1xcdFxcdHU2NCBoY3I7XFxuIFxcbiBcXHRcXHRzd2l0Y2ggKG1vZGUpIHtcXG4gXFx0XFx0Y2FzZSBQU1JfTU9ERV9FTDF0OlxcbkBAIC01NTksMTEgKzU3MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxcbiBcXG4gXFx0XFx0KnZjcHVfY3Bzcih2Y3B1KSBcXHUwMDI2PSB+KFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XFxuIFxcdFxcdCp2Y3B1X2Nwc3IodmNwdSkgfD0gbW9kZTtcXG4rXFxuK1xcdFxcdC8qIFB1Ymxpc2ggdGhlIGxhdGVzdCBIQ1JfRUwyIHRvIHRoZSBlbXVsYXRpb24gKi9cXG4rXFx0XFx0aGNyID0gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cXG4rXFx0XFx0XFx0cmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKSA6XFxuK1xcdFxcdFxcdF9fdmNwdV9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMik7XFxuK1xcbitcXHRcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogQXBwbHkgZXh0cmVtZSBwYXJhbm9pYSEgKi9cXG4tXFx0QlVHX09OKHZjcHVfaGFzX252KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICAhIWhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkgIT0gaXNfaHlwX2N0eHQodmNwdSkpO1xcbitcXHRCVUdfT04oISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxcbit7XFxuK1xcdHN5bmNocm9uaXplX3ZjcHVfcHN0YXRlKHZjcHUpO1xcbitcXG4rXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbitcXHRcXHRmaXh1cF9udl9ndWVzdF9leGl0KHZjcHUpO1xcbiBcXG4gXFx0cmV0dXJuIF9fZml4dXBfZ3Vlc3RfZXhpdCh2Y3B1LCBleGl0X2NvZGUsIGh5cF9leGl0X2hhbmRsZXJzKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xcbmluZGV4IGJlNjg1YjYzZThjZjI2Li4wYzRlZjFjZTMyYWU3MSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xcbkBAIC00MiwxMCArNDIsMTIgQEAgc3RhdGljIHZvaWQgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dTY0IHZhbDtcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGRvbid0IHNhdmUgQ1BUUl9FTDIsIGFzIGFjY2Vzc2VzIHRvIENQQUNSX0VMMVxcbi1cXHRcXHQgKiBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlIGluLW1lbW9yeVxcbi1cXHRcXHQgKiBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXFxuK1xcdFxcdCAqIFdpdGhvdXQgRkVBVF9OVjJwMSwgd2UgZG9uJ3Qgc2F2ZSBDUFRSX0VMMiwgYXMgYWNjZXNzZXNcXG4rXFx0XFx0ICogdG8gQ1BBQ1JfRUwxIGFyZSBhbHdheXMgdHJhcHBlZCwgZW5zdXJpbmcgdGhhdCB0aGVcXG4rXFx0XFx0ICogaW4tbWVtb3J5IGNvcHkgaXMgYWx3YXlzIHVwLXRvLWRhdGUuIEEgc21hbGwgYmxlc3NpbmcuLi5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXFxuK1xcdFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMiwgcmVhZF9zeXNyZWdfZWwxKFNZU19DUEFDUikpO1xcbiBcXHRcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyLFxcdCByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSKSk7XFxuIFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMF9FTDIsXFx0IHJlYWRfc3lzcmVnX2VsMShTWVNfVFRCUjApKTtcXG4gXFx0XFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFRUQlIxX0VMMixcXHQgcmVhZF9zeXNyZWdfZWwxKFNZU19UVEJSMSkpO1xcbkBAIC02NywxMSArNjksMTggQEAgc3RhdGljIHZvaWQgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0ICogVGhlIEVMMSB2aWV3IG9mIENOVEtDVExfRUwxIGhhcyBhIGJ1bmNoIG9mIFJFUzAgYml0cyB3aGVyZVxcbiBcXHRcXHQgKiB0aGUgaW50ZXJlc3RpbmcgQ05USENUTF9FTDIgYml0cyBsaXZlLiBTbyBwcmVzZXJ2ZSB0aGVzZVxcbiBcXHRcXHQgKiBiaXRzIHdoZW4gcmVhZGluZyBiYWNrIHRoZSBndWVzdC12aXNpYmxlIHZhbHVlLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBXaGlsZSBOVjJwMSBmaXhlcyBzb21lIG9mIHRoYXQsIGl0IG1ha2VzIENOVEhDVExfRUwyLkVDVlxcbitcXHRcXHQgKiBldmVuIG1vcmUgYnJva2VuIHRoYW4gaXQgYWxyZWFkeSB3YXMgd2l0aCBOVjIuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR2YWwgPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpO1xcbi1cXHRcXHR2YWwgXFx1MDAyNj0gQ05US0NUTF9WQUxJRF9CSVRTO1xcbi1cXHRcXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgQ05USENUTF9FTDIsIFxcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcXG4tXFx0XFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcXG4rXFx0XFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcXG4rXFx0XFx0XFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcXHUwMDI2PSwgfkNOVEtDVExfVkFMSURfQklUUyk7XFxuK1xcdFxcdFxcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgfD0sIHZhbCk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU1BfRUwyLFxcdCByZWFkX3N5c3JlZyhzcF9lbDEpKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbmluZGV4IGRmYjk2ZWRiZGM0M2M2Li42NGM4ZmI4MmZhZGY2ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTE3MjgsNyArMTcyOCw3IEBAIHU2NCBsaW1pdF9udl9pZF9yZWcoc3RydWN0IGt2bSAqa3ZtLCB1MzIgcmVnLCB1NjQgdmFsKVxcbiBcXHRcXHQgKiBZb3UgZ2V0IEVJVEhFUlxcbiBcXHRcXHQgKlxcbiBcXHRcXHQgKiAtIEZFQVRfVkhFIHdpdGhvdXQgRkVBVF9FMkgwXFxuLVxcdFxcdCAqIC0gRkVBVF9OViBsaW1pdGVkIHRvIEZFQVRfTlYyXFxuK1xcdFxcdCAqIC0gRkVBVF9OViBsaW1pdGVkIHRvIEZFQVRfTlYyKHAxKS9OVjNcXG4gXFx0XFx0ICogLSBIQ1JfRUwyLk5WMSBiZWluZyBSRVMwXFxuIFxcdFxcdCAqXFxuIFxcdFxcdCAqIE9SXFxuQEAgLTE3NDAsNyArMTc0MCwxMyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcXG4gXFx0XFx0aWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyX0UySDAsIGt2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xcbiBcXHRcXHRcXHR2YWwgPSAwO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcXG4rXFx0XFx0XFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykpXFxuK1xcdFxcdFxcdFxcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKTtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxcbitcXHRcXHRcXHRcXHR2YWwgPSBJRF9SRUdfTElNSVRfRklFTERfRU5VTSh2YWwsIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMlAxKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IH5JRF9BQTY0TU1GUjRfRUwxX0UySDA7XFxuIFxcdFxcdFxcdHZhbCB8PSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIEUySDAsIE5JX05WMSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTE4MjYsNiArMTgzMiwxMCBAQCBpbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JfRUwyKTtcXG4gXFx0c2V0X3N5c3JlZ19tYXNrcyhrdm0sIEhDUl9FTDIsIHJlc3gpO1xcbiBcXG4rXFx0LyogTlZIQ1JfRUwyICovXFxuK1xcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBOVkhDUl9FTDIpO1xcbitcXHRzZXRfc3lzcmVnX21hc2tzKGt2bSwgTlZIQ1JfRUwyLCByZXN4KTtcXG4rXFxuIFxcdC8qIEhDUlhfRUwyICovXFxuIFxcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JYX0VMMik7XFxuIFxcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JYX0VMMiwgcmVzeCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjBhZWIyZTczNmZkZTM3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTE4Myw4ICsxODMsNiBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcXG4gXFx0c3dpdGNoIChyZWcpIHtcXG4gXFx0XFx0TUFQUEVEX0VMMl9TWVNSRUcoU0NUTFJfRUwyLCAgIFNDVExSX0VMMSxcXG4gXFx0XFx0XFx0XFx0ICB0cmFuc2xhdGVfc2N0bHJfZWwyX3RvX3NjdGxyX2VsMVxcdCAgICAgKTtcXG4tXFx0XFx0TUFQUEVEX0VMMl9TWVNSRUcoQ1BUUl9FTDIsICAgIENQQUNSX0VMMSxcXG4tXFx0XFx0XFx0XFx0ICB0cmFuc2xhdGVfY3B0cl9lbDJfdG9fY3BhY3JfZWwxXFx0ICAgICApO1xcbiBcXHRcXHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMF9FTDIsICAgVFRCUjBfRUwxLFxcbiBcXHRcXHRcXHRcXHQgIHRyYW5zbGF0ZV90dGJyMF9lbDJfdG9fdHRicjBfZWwxXFx0ICAgICApO1xcbiBcXHRcXHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMV9FTDIsICAgVFRCUjFfRUwxLCAgIE5VTExcXHQgICAgICk7XFxuQEAgLTIxMCw2ICsyMDgsMzMgQEAgc3RhdGljIHZvaWQgbG9jYXRlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcsXFxuIFxcdFxcdGxvYy1cXHUwMDNlbG9jID0gKChpc19oeXBfY3R4dCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKSA/XFxuIFxcdFxcdFxcdCAgICBTUl9MT0NfU1BFQ0lBTCA6IFNSX0xPQ19NRU1PUlkpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBDUFRSX0VMMjpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ1BUUl9FTDIgaXMganVzdCBhcyBzcGVjaWFsLCBhbmQgbmVlZHMgYSBjZXJ0YWluIGFtb3VudFxcbitcXHRcXHQgKiBvZiBoYW5kaG9sZGluZy4gSXQgYWx3YXlzIGxpdmVzIGluIG1lbW9yeSwgZHVlIHRvIGJlaW5nXFxuK1xcdFxcdCAqIGhlYXZpbHkgdHJhcHBlZCB0aGFua3MgdG8gQ1BBQ1JfRUwxLlRDUEFDIGJlaW5nIFJFUzAuXFxuK1xcdFxcdCAqIEZFQVRfTlYycDEgZml4ZXMgdGhpcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxvY2F0ZV9tYXBwZWRfZWwyX3JlZ2lzdGVyKHZjcHUsIENQVFJfRUwyLCBDUEFDUl9FTDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGxvYyk7XFxuK1xcdFxcdGlmIChpc19oeXBfY3R4dCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxcbitcXHRcXHRcXHRsb2MtXFx1MDAzZWxvYyA9IFNSX0xPQ19TUEVDSUFMO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBOVkhDUl9FTDI6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFllcywgTlZIQ1JfRUwyIG1hcHMgdG8gaXRzZWxmIHdoZW4gbG9hZGVkIGluIG5lc3RlZFxcbitcXHRcXHQgKiBjb250ZXh0LiBJZiB5b3UgZmVlbCBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaXMgZG91YmxlXFxuK1xcdFxcdCAqIGJhY2tpbmcgb24gaXRzZWxmIHVwc2lkZSBkb3duLCB5b3UncmUgbm90IGFsb25lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V0FSTl9PTl9PTkNFKCFrdm1faGFzX252Myh2Y3B1LVxcdTAwM2Vrdm0pKTtcXG4rXFx0XFx0aWYgKGlzX2h5cF9jdHh0KHZjcHUpKSB7XFxuK1xcdFxcdFxcdGxvYy1cXHUwMDNlbG9jID0gU1JfTE9DX01FTU9SWTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bG9jLVxcdTAwM2Vsb2MgPSBTUl9MT0NfTE9BREVEIHwgU1JfTE9DX01BUFBFRDtcXG4rXFx0XFx0XFx0bG9jLVxcdTAwM2VtYXBfcmVnID0gTlZIQ1JfRUwyO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRsb2MtXFx1MDAzZWxvYyA9IGxvY2F0ZV9kaXJlY3RfcmVnaXN0ZXIodmNwdSwgcmVnKTtcXG4gXFx0fVxcbkBAIC0yNDksNiArMjc0LDcgQEAgc3RhdGljIHU2NCByZWFkX3NyX2Zyb21fY3B1KGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbiBcXHRjYXNlIERBQ1IzMl9FTDI6XFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfREFDUjMyX0VMMik7XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUZTUjMyX0VMMjpcXHR2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19JRlNSMzJfRUwyKTtcXHRicmVhaztcXG4gXFx0Y2FzZSBEQkdWQ1IzMl9FTDI6XFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfREJHVkNSMzJfRUwyKTtcXHRicmVhaztcXG4rXFx0Y2FzZSBOVkhDUl9FTDI6XFx0XFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKTtcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuIFxcdH1cXG4gXFxuQEAgLTI4Nyw2ICszMTMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZV9zcl90b19jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcsIHU2NCB2YWwpXFxuIFxcdGNhc2UgREFDUjMyX0VMMjpcXHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19EQUNSMzJfRUwyKTtcXHRicmVhaztcXG4gXFx0Y2FzZSBJRlNSMzJfRUwyOlxcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0lGU1IzMl9FTDIpO1xcdGJyZWFrO1xcbiBcXHRjYXNlIERCR1ZDUjMyX0VMMjpcXHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19EQkdWQ1IzMl9FTDIpO1xcdGJyZWFrO1xcbitcXHRjYXNlIE5WSENSX0VMMjpcXHRcXHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19OVkhDUl9FTDIpO1xcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTMxMSw5ICszMzgsMTYgQEAgdTY0IHZjcHVfcmVhZF9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXFxuIFxcdFxcdHN3aXRjaCAocmVnKSB7XFxuIFxcdFxcdGNhc2UgQ05USENUTF9FTDI6XFxuIFxcdFxcdFxcdHZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7XFxuLVxcdFxcdFxcdHZhbCBcXHUwMDI2PSBDTlRLQ1RMX1ZBTElEX0JJVFM7XFxuLVxcdFxcdFxcdHZhbCB8PSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByZWcpIFxcdTAwMjYgfkNOVEtDVExfVkFMSURfQklUUztcXG4rXFx0XFx0XFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcXG4rXFx0XFx0XFx0XFx0dmFsIFxcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcXG4rXFx0XFx0XFx0XFx0dmFsIHw9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgXFx1MDAyNiB+Q05US0NUTF9WQUxJRF9CSVRTO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJldHVybiB2YWw7XFxuK1xcdFxcdGNhc2UgQ1BUUl9FTDI6XFxuK1xcdFxcdFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKTtcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHR9XFxuQEAgLTM1OSw2ICszOTMsOSBAQCB2b2lkIHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0d3JpdGVfc3lzcmVnX2VsMSh2YWwsIFNZU19DTlRLQ1RMKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQ1BUUl9FTDI6XFxuK1xcdFxcdFxcdHdyaXRlX3N5c3JlZ19lbDEodmFsLCBTWVNfQ1BBQ1IpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHR9XFxuQEAgLTI4NDAsNiArMjg3NywxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRyZXR1cm4gUkVHX0hJRERFTjtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBudmhjcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxcbit7XFxuK1xcdGlmIChlbDJfdmlzaWJpbGl0eSh2Y3B1LCByZCkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAga3ZtX2hhc19mZWF0KHZjcHUtXFx1MDAzZWt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gUkVHX0hJRERFTjtcXG4rfVxcbitcXG4gc3RhdGljIHVuc2lnbmVkIGludCBzY3RscjJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxcbiB7XFxuQEAgLTM3NTMsNiArMzgwMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcXG4gXFx0XFx0XFx0IHN2ZV9lbDJfdmlzaWJpbGl0eSksXFxuIFxcbiBcXHRFTDJfUkVHX1ZOQ1IoSENSWF9FTDIsIHJlc2V0X3ZhbCwgMCksXFxuK1xcdEVMMl9SRUdfRklMVEVSRUQoTlZIQ1JfRUwyLCB1bmRlZl9hY2Nlc3MsIHJlc2V0X3ZhbCwgMCxcXG4rXFx0XFx0XFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcXG4gXFxuIFxcdEVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXFxuIFxcdEVMMl9SRUcoVFRCUjFfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbmluZGV4IDliODVhODRmNmZkNDk0Li43ZTA0MTQ1MDllODlhOCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG5AQCAtNTEsNiArNTEsOCBAQCBIQVNfTFM2NF9WXFxuIEhBU19MU1VJXFxuIEhBU19NT1BTXFxuIEhBU19ORVNURURfVklSVFxcbitIQVNfTlYyUDFcXG4rSEFTX05WM1xcbiBIQVNfQkJNTDJfTk9BQk9SVFxcbiBIQVNfUEFOXFxuIEhBU19QTVVWM1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrIGIvYXJjaC9hcm02NC90b29scy9nZW4tc3lzcmVnLmF3a1xcbmluZGV4IDg2ODYwYWI2NzJkYzc4Li5kN2Y3Y2ViNzY4ZmU1YyAxMDA3NTVcXG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXFxuKysrIGIvYXJjaC9hcm02NC90b29scy9nZW4tc3lzcmVnLmF3a1xcbkBAIC0yMjgsNyArMjI4LDcgQEAgJDEgPT0gXFxcIkVuZFN5c3JlZ1xcXCIgXFx1MDAyNlxcdTAwMjYgYmxvY2tfY3VycmVudCgpID09IFxcXCJTeXNyZWdcXFwiIHtcXG4gfVxcbiBcXG4gIyBDdXJyZW50bHkgdGhpcyBpcyBlZmZlY3RpdmV5IGEgY29tbWVudCwgaW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGVtaXRcXG4tIyBkZWZpbmVzIGZvciB0aGUgZmllbGRzLlxcbisjIGRlZmluZXMgZm9yIHRoZSBmaWVsZHMuIFxcXCJNYXBwaW5nXFxcIiBkb2VzIGVtaXQgdGhlIFJFU3gvVU5LTiBkZWZpbml0aW9ucy5cXG4gKCQxID09IFxcXCJGaWVsZHNcXFwiIHx8ICQxID09IFxcXCJNYXBwaW5nXFxcIikgXFx1MDAyNlxcdTAwMjYgYmxvY2tfY3VycmVudCgpID09IFxcXCJTeXNyZWdcXFwiIHtcXG4gXFx0ZXhwZWN0X2ZpZWxkcygyKVxcbiBcXG5AQCAtMjM5LDkgKzIzOSwxNSBAQCAkMSA9PSBcXFwiRW5kU3lzcmVnXFxcIiBcXHUwMDI2XFx1MDAyNiBibG9ja19jdXJyZW50KCkgPT0gXFxcIlN5c3JlZ1xcXCIge1xcbiBcXHRwcmludCBcXFwiXFxcIlxcbiBcXG4gXFx0bmV4dF9iaXQgPSAtMVxcbi1cXHRyZXMwID0gbnVsbFxcbi1cXHRyZXMxID0gbnVsbFxcbi1cXHR1bmtuID0gbnVsbFxcbitcXHRpZiAoJDEgPT0gXFxcIk1hcHBpbmdcXFwiKSB7XFxuK1xcdFxcdHJlczAgPSAkMiBcXFwiX1JFUzBcXFwiXFxuK1xcdFxcdHJlczEgPSAkMiBcXFwiX1JFUzFcXFwiXFxuK1xcdFxcdHVua24gPSAkMiBcXFwiX1VOS05cXFwiXFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlczAgPSBudWxsXFxuK1xcdFxcdHJlczEgPSBudWxsXFxuK1xcdFxcdHVua24gPSBudWxsXFxuK1xcdH1cXG4gXFxuIFxcdG5leHRcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXFxuaW5kZXggYmMxNzg4YjE2NjJiNzYuLmFmZTkzMzc4NTFhMmUzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXFxuKysrIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcXG5AQCAtMjM4NiwxNyArMjM4Niw0MCBAQCBFbmRFbnVtXFxuIEVuZFN5c3JlZ1xcbiBcXG4gU3lzcmVnXFx0SURfQUE2NE1NRlI0X0VMMVxcdDNcXHQwXFx0MFxcdDdcXHQ0XFxuLVJlczBcXHQ2Mzo0OFxcbitVbnNpZ25lZEVudW1cXHQ2Mzo2MFxcdE1URUZHVFxcbitcXHQwYjAwMDBcXHROSVxcbitcXHQwYjAwMDFcXHRJTVBcXG4rRW5kRW51bVxcbitVbnNpZ25lZEVudW1cXHQ1OTo1NlxcdFNDUlhcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuK0VuZEVudW1cXG4rVW5zaWduZWRFbnVtXFx0NTU6NTJcXHRURVZcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuK0VuZEVudW1cXG4rVW5zaWduZWRFbnVtXFx0NTE6NDhcXHRUUFNcXG4rXFx0MGIwMDAwXFx0VkFMXzAwMDBcXG4rXFx0MGIwMDAxXFx0VkFMXzAwMDFcXG4rXFx0MGIwMDEwXFx0VkFMXzAwMTBcXG4rRW5kRW51bVxcbiBVbnNpZ25lZEVudW1cXHQ0Nzo0NFxcdFNSTUFTS1xcbiBcXHQwYjAwMDBcXHROSVxcbiBcXHQwYjAwMDFcXHRJTVBcXG4rXFx0MGIwMDEwXFx0U1JNQVNLMlxcbitFbmRFbnVtXFxuK1Vuc2lnbmVkRW51bVxcdDQzOjQwXFx0VExCSURcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuIEVuZEVudW1cXG4tUmVzMFxcdDQzOjQwXFxuIFVuc2lnbmVkRW51bVxcdDM5OjM2XFx0RTNEU0VcXG4gXFx0MGIwMDAwXFx0TklcXG4gXFx0MGIwMDAxXFx0SU1QXFxuIEVuZEVudW1cXG4tUmVzMFxcdDM1OjMyXFxuK1Vuc2lnbmVkRW51bVxcdDM1OjMyXFx0RUFFU1JcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuK0VuZEVudW1cXG4gVW5zaWduZWRFbnVtXFx0MzE6MjhcXHRSTUVHRElcXG4gXFx0MGIwMDAwXFx0TklcXG4gXFx0MGIwMDAxXFx0SU1QXFxuQEAgLTI0MTAsNiArMjQzMyw3IEBAIFVuc2lnbmVkRW51bVxcdDIzOjIwXFx0TlZfZnJhY1xcbiBcXHQwYjAwMDBcXHROVl9OVjJcXG4gXFx0MGIwMDAxXFx0TlYyX09OTFlcXG4gXFx0MGIwMDEwXFx0TlYyUDFcXG4rXFx0MGIwMDExXFx0TlYzXFxuIEVuZEVudW1cXG4gVW5zaWduZWRFbnVtXFx0MTk6MTZcXHRGR1dURTNcXG4gXFx0MGIwMDAwXFx0TklcXG5AQCAtNDI0Miw2ICs0MjY2LDkgQEAgRmllbGRcXHQxXFx0RTJUUkVcXG4gRmllbGRcXHQwXFx0RTBIVFJFXFxuIEVuZFN5c3JlZ1xcbiBcXG4rU3lzcmVnXFx0TlZIQ1JfRUwyXFx0M1xcdDRcXHQxXFx0NVxcdDBcXG4rTWFwcGluZ1xcdEhDUl9FTDJcXG4rRW5kU3lzcmVnXFxuIFxcbiBTeXNyZWcgSERGR1JUUjJfRUwyXFx0M1xcdDRcXHQzXFx0MVxcdDBcXG4gUmVzMFxcdDYzOjI1XFxuQEAgLTQ1MjEsNyArNDU0OCwxNCBAQCBGaWVsZHNcXHRaQ1JfRUx4XFxuIEVuZFN5c3JlZ1xcbiBcXG4gU3lzcmVnXFx0SENSWF9FTDJcXHQzXFx0NFxcdDFcXHQyXFx0Mlxcbi1SZXMwXFx0NjM6MjVcXG4rUmVzMFxcdDYzOjM1XFxuK0ZpZWxkXFx0MzRcXHROVm5UVExCT1NcXG4rRmllbGRcXHQzM1xcdE5WblRUTEJJU1xcbitGaWVsZFxcdDMyXFx0TlZuVFRMQlxcbitSZXMwXFx0MzE6MjhcXG4rRmllbGRcXHQyN1xcdE5WVEdFXFxuK0ZpZWxkXFx0MjZcXHRTUk1BU0tFblxcbitSZXMwXFx0MjVcXG4gRmllbGRcXHQyNFxcdFBBQ01FblxcbiBGaWVsZFxcdDIzXFx0RW5GUE1cXG4gRmllbGRcXHQyMlxcdEdDU0VuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE5LjA0OTE0Mjg5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxMTkyNDY0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9pbml0X252X3N5c3JlZ3NcIixcbiAgICBcImxpbWl0X252X2lkX3JlZ1wiLFxuICAgIFwibnZoY3JfZWwyX3Zpc2liaWxpdHlcIixcbiAgICBcImdldF9yZWdfZml4ZWRfYml0c1wiLFxuICAgIFwiZml4dXBfbnZfZ3Vlc3RfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA4ZGE2MmEzY2VkYmY4OGZmM2U2OGFhYzk3YmQxZDBiYTlhN2RiMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE2OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmE0MjY4M2FmNzlmYjVkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtOTY4LDYgKzk2OCw3IEBAIHN0cnVjdCBhcm02NF9mdHJfcmVnICpnZXRfYXJtNjRfZnRyX3JlZyh1MzIgc3lzX2lkKTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnIxX292ZXJyaWRlO1xuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyMl9vdmVycmlkZTtcbitleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjRfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHBmcjBfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHBmcjFfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHpmcjBfb3ZlcnJpZGU7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaFxuaW5kZXggM2Y5MjMzYjVhMTMwODEuLmY2Y2Q4NTEwNDc5NDc0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oXG5AQCAtMjg3LDIxICsyODcsNiBAQFxuIFx0XHRcdFx0IEdFTk1BU0soMTksIDE4KSB8XHRcXFxuIFx0XHRcdFx0IEdFTk1BU0soMTUsIDApKVxuIFxuLS8qXG4tICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dFxuLSAqIGF0IHRoaXMgcG9pbnQgaW4gdGltZS4gSXQgZG9lc24ndCBtZWFuIHRoYXQgd2UgYWN0dWFsbHkgKmhhbmRsZSpcbi0gKiB0aGVtLCBidXQgdGhhdCBhdCBsZWFzdCB0aG9zZSB0aGF0IGFyZSBub3QgYWR2ZXJ0aXNlZCB0byBhIGd1ZXN0XG4tICogd2lsbCBiZSBSRVMwIGZvciB0aGF0IGd1ZXN0LlxuLSAqL1xuLSNkZWZpbmUgX19IQ1JYX0VMMl9NQVNLXHRcdChCSVRfVUxMKDYpKVxuLSNkZWZpbmUgX19IQ1JYX0VMMl9uTUFTS1x0KEdFTk1BU0tfVUxMKDI0LCAxNCkgfCBcXFxuLVx0XHRcdFx0IEdFTk1BU0tfVUxMKDExLCA3KSAgfCBcXFxuLVx0XHRcdFx0IEdFTk1BU0tfVUxMKDUsIDApKVxuLSNkZWZpbmUgX19IQ1JYX0VMMl9SRVMwXHRcdH4oX19IQ1JYX0VMMl9uTUFTSyB8IF9fSENSWF9FTDJfTUFTSylcbi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMVx0XHR+KF9fSENSWF9FTDJfbk1BU0sgfCBcXFxuLVx0XHRcdFx0ICBfX0hDUlhfRUwyX01BU0sgIHwgXFxcbi1cdFx0XHRcdCAgX19IQ1JYX0VMMl9SRVMwKVxuLVxuIC8qIEh5cCBQcmVmZXRjaCBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyIChIUEZBUi9IREZBUikgKi9cbiAjZGVmaW5lIEhQRkFSX01BU0tcdCh+VUwoMHhmKSlcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuaW5kZXggNWJmM2Q3ZTFkOTJjNzcuLmQ2ZjQzMmIxNTU4ZjVmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcbkBAIC0yNjYsNiArMjY2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2c2Vycm9yX3N0YXRlX2lzX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAgICAgKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKSBcdTAwMjYgSENSWF9FTDJfVE1FQSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MihzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG4rXHRcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG4rXHRcdGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4rXHRcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMykpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbmVzdGVkX252M19jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gKGhhc192aGUoKSBcdTAwMjZcdTAwMjYga3ZtX2hhc19udjModmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNiBpc19uZXN0ZWRfY3R4dCh2Y3B1KSBcdTAwMjZcdTAwMjZcbitcdFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpIFx1MDAyNiBIQ1JfRUwyX05WKSBcdTAwMjZcdTAwMjZcbitcdFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKSBcdTAwMjYgSENSWF9FTDJfTlZUR0UpKTtcbit9XG4rXG4gLypcbiAgKiBUaGUgbGF5b3V0IG9mIFNQU1IgZm9yIGFuIEFBcmNoMzIgc3RhdGUgaXMgZGlmZmVyZW50IHdoZW4gb2JzZXJ2ZWQgZnJvbSBhblxuICAqIEFBcmNoNjQgU1BTUl9FTHggb3IgYW4gQUFyY2gzMiBTUFNSXyouIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBBQXJjaDMyXG5AQCAtNjE3LDcgKzYzNyw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1faW5jcl9wYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICovXG4gc3RhdGljIGlubGluZSB1NjQgdmNwdV9zYW5pdGlzZWRfY3B0cl9lbDIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHU2NCBjcHRyID0gX192Y3B1X3N5c19yZWcodmNwdSwgQ1BUUl9FTDIpO1xuK1x0dTY0IGNwdHIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7XG4gXG4gXHRpZiAoIXZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4gXHRcdGNwdHIgPSB0cmFuc2xhdGVfY3B0cl9lbDJfdG9fY3BhY3JfZWwxKGNwdHIpO1xuQEAgLTY4Niw2ICs3MDYsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X2hjcngoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0XHRpZiAoa3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NElTQVIxX0VMMSwgTFM2NCwgTFM2NF9WKSlcbiBcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfRW5BU1I7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE5WMyBpcyBhIGhvc3Qtc3BlY2lmaWMgZXh0ZW5zaW9uLCBhbmQgd2UgYWx3YXlzIHVzZSBpdFxuK1x0XHQgKiB3aGVuIHByZXNlbnQgYW5kIHRoYXQgdGhlIGd1ZXN0IHVzZXMgTlYuIEl0IG1heSBiZSBiZVxuK1x0XHQgKiBoaWRkZW4gZnJvbSB0aGUgZ3Vlc3QgdGhvdWdoLlxuK1x0XHQgKi9cbitcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2Y3B1X2hhc19udih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkge1xuK1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5oY3J4X2VsMiB8PSBIQ1JYX0VMMl9OVlRHRTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIHRoZSBndWVzdCBpcyBOVjItY2FwYWJsZSwgdGhlbiB3ZSBuZWVkIHRvIHNlZVxuK1x0XHRcdCAqIGFsbCB0aGUgVExCSXMsIGFzIGNvbmZpZ3VyZWQgaW4gSENSX0VMMi5cbitcdFx0XHQgKiBPdGhlcndpc2UsIHJlbGF4IHRoZSBUTEJJIHRyYXBzIHRvIG9ubHkgVEdFPTAuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFrdm1faGFzX252Mih2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gKEhDUlhfRUwyX05WblRUTEIgIHxcbitcdFx0XHRcdFx0XHRcdEhDUlhfRUwyX05WblRUTEJJUyk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiYWUyYzRmOTJlZjVjMC4uMjY0OGM4YTcxN2JhMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTU0Myw2ICs1NDMsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcbiBcdE1EQ1JfRUwyLFx0LyogTW9uaXRvciBEZWJ1ZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChFTDIpICovXG4gXHRDTlRIQ1RMX0VMMixcdC8qIENvdW50ZXItdGltZXIgSHlwZXJ2aXNvciBDb250cm9sIHJlZ2lzdGVyICovXG4gXHRaQ1JfRUwyLFx0LyogU1ZFIENvbnRyb2wgUmVnaXN0ZXIgKEVMMikgKi9cbitcdEhDUl9FTDIsXHQvKiBIeXBlcnZpc29yIENvbnRyb2wgUmVnaXN0ZXIgKi9cbiBcbiBcdC8qIEFueSBWTkNSLWNhcGFibGUgcmVnIGdvZXMgYWZ0ZXIgdGhpcyBwb2ludCAqL1xuIFx0TUFSS0VSKF9fVk5DUl9TVEFSVF9fKSxcbkBAIC01NzEsNyArNTcyLDcgQEAgZW51bSB2Y3B1X3N5c3JlZyB7XG4gXHRWTkNSKFRGU1JfRUwxKSxcdC8qIFRhZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKEVMMSkgKi9cbiBcdFZOQ1IoVlBJRFJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBQcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoVk1QSURSX0VMMiksLyogVmlydHVhbGl6YXRpb24gTXVsdGlwcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi9cbi1cdFZOQ1IoSENSX0VMMiksXHQvKiBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbitcdFZOQ1IoTlZIQ1JfRUwyKSwvKiBOViBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoSFNUUl9FTDIpLFx0LyogSHlwZXJ2aXNvciBTeXN0ZW0gVHJhcCBSZWdpc3RlciAqL1xuIFx0Vk5DUihWVFRCUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIFRhYmxlIEJhc2UgUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoVlRDUl9FTDIpLFx0LyogVmlydHVhbGl6YXRpb24gVHJhbnNsYXRpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5pbmRleCAxNDM2NmQzNWNlODJmMC4uOWU4YTQ5ZmE4YjYzOGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5AQCAtMTEsNyArMTEsNyBAQFxuICNkZWZpbmUgVk5DUl9WVENSX0VMMiAgICAgICAgICAgMHgwNDBcbiAjZGVmaW5lIFZOQ1JfVk1QSURSX0VMMiAgICAgICAgIDB4MDUwXG4gI2RlZmluZSBWTkNSX0NOVFZPRkZfRUwyICAgICAgICAweDA2MFxuLSNkZWZpbmUgVk5DUl9IQ1JfRUwyICAgICAgICAgICAgMHgwNzhcbisjZGVmaW5lIFZOQ1JfTlZIQ1JfRUwyICAgICAgICAgIDB4MDc4XG4gI2RlZmluZSBWTkNSX0hTVFJfRUwyICAgICAgICAgICAweDA4MFxuICNkZWZpbmUgVk5DUl9WUElEUl9FTDIgICAgICAgICAgMHgwODhcbiAjZGVmaW5lIFZOQ1JfVFBJRFJfRUwyICAgICAgICAgIDB4MDkwXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uMTRmYmZhOGU2YjdiNTAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTc4NSw2ICs3ODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9yYXpbXSA9IHtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnIwX292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyMl9vdmVycmlkZTtcbitzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnI0X292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMF9vdmVycmlkZTtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NHBmcjFfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjR6ZnIwX292ZXJyaWRlO1xuQEAgLTg1OCw3ICs4NTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IF9fZnRyX3JlZ19lbnRyeSB7XG4gXHRBUk02NF9GVFJfUkVHX09WRVJSSURFKFNZU19JRF9BQTY0TU1GUjJfRUwxLCBmdHJfaWRfYWE2NG1tZnIyLFxuIFx0XHRcdCAgICAgICBcdTAwMjZpZF9hYTY0bW1mcjJfb3ZlcnJpZGUpLFxuIFx0QVJNNjRfRlRSX1JFRyhTWVNfSURfQUE2NE1NRlIzX0VMMSwgZnRyX2lkX2FhNjRtbWZyMyksXG4tXHRBUk02NF9GVFJfUkVHKFNZU19JRF9BQTY0TU1GUjRfRUwxLCBmdHJfaWRfYWE2NG1tZnI0KSxcbitcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlkX2FhNjRtbWZyNF9vdmVycmlkZSksXG4gXG4gXHQvKiBPcDEgPSAwLCBDUm4gPSAxMCwgQ1JtID0gNCAqL1xuIFx0QVJNNjRfRlRSX1JFRyhTWVNfTVBBTUlEUl9FTDEsIGZ0cl9tcGFtaWRyKSxcbkBAIC0yNjIwLDYgKzI2MjIsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdFx0eyAvKiBTZW50aW5lbCAqLyB9XG4gXHRcdH0sXG4gXHR9LFxuK1x0e1xuK1x0XHQuZGVzYyA9IFwiRkVBVF9OVjJwMVwiLFxuK1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19OVjJQMSxcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXG4rXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJQMSlcbitcdH0sXG4rXHR7XG4rXHRcdC5kZXNjID0gXCJGRUFUX05WM1wiLFxuK1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19OVjMsXG4rXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuK1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuK1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKVxuK1x0fSxcbiBcdHtcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfMzJCSVRfRUwwX0RPX05PVF9VU0UsXG4gXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2ltYWdlLXZhcnMuaCBiL2FyY2gvYXJtNjQva2VybmVsL2ltYWdlLXZhcnMuaFxuaW5kZXggZDRjN2Q0NWFlNmJjODMuLmQxNWMyY2IxYjBmMjhhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmhcbkBAIC01MSw2ICs1MSw3IEBAIFBJX0VYUE9SVF9TWU0oaWRfYWE2NGlzYXIyX292ZXJyaWRlKTtcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjFfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NG1tZnIyX292ZXJyaWRlKTtcbitQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyNF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0cGZyMF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0cGZyMV9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0c21mcjBfb3ZlcnJpZGUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3BpL2lkcmVnLW92ZXJyaWRlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXG5pbmRleCBiYzU3YjI5MGU1ZTdiYS4uNGU0NzYxNmJjYWMyM2EgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXG5AQCAtMTA2LDYgKzEwNiwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYyBtbWZyMiBfX3ByZWw2NF9pbml0Y29uc3QgPSB7XG4gXHR9LFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJfc2V0X2Rlc2MgbW1mcjQgX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xuK1x0Lm5hbWVcdFx0PSBcImlkX2FhNjRtbWZyNFwiLFxuK1x0Lm92ZXJyaWRlXHQ9IFx1MDAyNmlkX2FhNjRtbWZyNF9vdmVycmlkZSxcbitcdC5maWVsZHNcdFx0PSB7XG4rXHRcdEZJRUxEKFwibnZfZnJhY1wiLCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIE5VTEwpLFxuK1x0XHR7fVxuK1x0fSxcbit9O1xuK1xuIHN0YXRpYyBib29sIF9faW5pdCBwZnIwX3N2ZV9maWx0ZXIodTY0IHZhbClcbiB7XG4gXHQvKlxuQEAgLTIyMCw2ICsyMjksNyBAQCBQUkVMNjQoY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYywgcmVnKSByZWdzW10gX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xuIFx0eyBcdTAwMjZtbWZyMFx0fSxcbiBcdHsgXHUwMDI2bW1mcjFcdH0sXG4gXHR7IFx1MDAyNm1tZnIyXHR9LFxuK1x0eyBcdTAwMjZtbWZyNFx0fSxcbiBcdHsgXHUwMDI2cGZyMCBcdH0sXG4gXHR7IFx1MDAyNnBmcjEgXHR9LFxuIFx0eyBcdTAwMjZpc2FyMVx0fSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMgYi9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcbmluZGV4IDQxNTVmZTg5YjU4YTE3Li5kYjYwZmFjYWQ5ZjNjMCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG5AQCAtODc2LDggKzg3NiwxNCBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zZXRfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApXG4gXHRhc3NpZ25fY2xlYXJfc2V0X2JpdCh0dnQwMiwgQ05USENUTF9FTDFOVlZDVCwgY2xyLCBzZXQpO1xuIFx0YXNzaWduX2NsZWFyX3NldF9iaXQodHB0MDIsIENOVEhDVExfRUwxTlZQQ1QsIGNsciwgc2V0KTtcbiBcbi1cdC8qIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3Nvci4gKi9cbi1cdHN5c3JlZ19jbGVhcl9zZXQoY250aGN0bF9lbDIsIGNsciwgc2V0KTtcbitcdC8qXG4rXHQgKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBWSEUsIHNvIHVzZSB0aGUgQ05USENUTF9FTDIgYWNjZXNzb3IsIHVubGVzc1xuK1x0ICogd2UgYXJlIHN1cmUgQ05US0NUTF9FTDEgaXMgY29tcGxldGVseSBzdGF0ZWZ1bCB3aXRoIEZFQVRfTlYycDEuXG4rXHQgKi9cbitcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxuK1x0XHRzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7XG4rXHRlbHNlXG4rXHRcdHN5c3JlZ19jbGVhcl9zZXQoY250a2N0bF9lbDEsIGNsciwgc2V0KTtcbiB9XG4gXG4gdm9pZCBrdm1fdGltZXJfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9jb25maWcuYyBiL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXG5pbmRleCAwNjIyMTYyYjA4OWU1MC4uN2U4NjQ3OTE0MjcyMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vY29uZmlnLmNcbkBAIC0yMjUsNiArMjI1LDcgQEAgc3RydWN0IHJlZ19mZWF0X21hcF9kZXNjIHtcbiAjZGVmaW5lIEZFQVRfSENYXHRcdElEX0FBNjRNTUZSMV9FTDEsIEhDWCwgSU1QXG4gI2RlZmluZSBGRUFUX1MyUElFXHRcdElEX0FBNjRNTUZSM19FTDEsIFMyUElFLCBJTVBcbiAjZGVmaW5lIEZFQVRfR0NJRVx0XHRJRF9BQTY0UEZSMl9FTDEsIEdDSUUsIElNUFxuKyNkZWZpbmUgRkVBVF9OVjNcdFx0SURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzXG4gXG4gc3RhdGljIGJvb2wgbm90X2ZlYXRfYWE2NGVsMyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuQEAgLTkwNCw2ICs5MDUsMTIgQEAgc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVBfRkdUKGhkZmd3dHIyX2Rlc2MsIGhkZmd3dHIyX21hc2tzLFxuIFxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xuK1x0TkVFRFNfRkVBVChIQ1JYX0VMMl9OVlRHRVx0XHR8XG4rXHRcdCAgIEhDUlhfRUwyX05WblRUTEJcdFx0fFxuK1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCSVNcdFx0fFxuK1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCT1MsXG4rXHRcdCAgIEZFQVRfTlYzKSxcbitcdE5FRURTX0ZFQVQoSENSWF9FTDJfU1JNQVNLRW4sIEZFQVRfU1JNQVNLKSxcbiBcdE5FRURTX0ZFQVQoSENSWF9FTDJfUEFDTUVuLCBmZWF0X3BhdXRoX2xyKSxcbiBcdE5FRURTX0ZFQVQoSENSWF9FTDJfRW5GUE0sIEZFQVRfRlBNUiksXG4gXHRORUVEU19GRUFUKEhDUlhfRUwyX0dDU0VuLCBGRUFUX0dDUyksXG5AQCAtOTMzLDcgKzk0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xuIH07XG4gXG4gXG4tc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAoaGNyeF9kZXNjLCBfX0hDUlhfRUwyLFxuK3N0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKGhjcnhfZGVzYywgSENSWF9FTDIsXG4gXHRcdFx0ICAgICAgaGNyeF9mZWF0X21hcCwgRkVBVF9IQ1gpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyX2ZlYXRfbWFwW10gPSB7XG5AQCAtMTAxMCw2ICsxMDE3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3JfZmVhdF9tYXBbXSA9IHtcbiBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3JfZGVzYywgSENSX0VMMixcbiBcdFx0XHQgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfQUE2NEVMMik7XG4gXG4rc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAobnZoY3JfZGVzYywgTlZIQ1JfRUwyLFxuK1x0XHRcdCAgICAgIGhjcl9mZWF0X21hcCwgRkVBVF9OVjMpO1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgc2N0bHIyX2ZlYXRfbWFwW10gPSB7XG4gXHRORUVEU19GRUFUKFNDVExSMl9FTDFfTk1FQVx0fFxuIFx0XHQgICBTQ1RMUjJfRUwxX0VBU0UsXG5AQCAtMTM4NCw2ICsxMzk0LDcgQEAgdm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhkZmd3dHIyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2aGNyeF9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhjcl9kZXNjKTtcbitcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNm52aGNyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2c2N0bHIyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2dGNyMl9lbDJfZGVzYyk7XG4gXHRjaGVja19yZWdfZGVzYyhcdTAwMjZzY3Rscl9lbDFfZGVzYyk7XG5AQCAtMTU3OSwxMSArMTU5MCwyMSBAQCBzdHJ1Y3QgcmVzeCBnZXRfcmVnX2ZpeGVkX2JpdHMoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEhDUlhfRUwyOlxuIFx0XHRyZXN4ID0gY29tcHV0ZV9yZWdfcmVzeF9iaXRzKGt2bSwgXHUwMDI2aGNyeF9kZXNjLCAwLCAwKTtcbi1cdFx0cmVzeC5yZXMxIHw9IF9fSENSWF9FTDJfUkVTMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEhDUl9FTDI6XG4gXHRcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZoY3JfZGVzYywgMCwgMCk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBOVkhDUl9FTDI6XG4rXHRcdC8qXG4rXHRcdCAqIE9ubHkgYXBwbHkgc2FuaXRpc2F0aW9uIGlmIHdlIGRvIGhhdmUgRkVBVF9OVjMuXG4rXHRcdCAqIE90aGVyd2lzZSwgdGhlIHJlZ2lzdGVyIGFsaWFzZXMgd2l0aCBIQ1JfRUwyIGluIFZOQ1IsXG4rXHRcdCAqIGFuZCB3ZSdyZSBiZXR0ZXIgb2ZmIHJlbHlpbmcgb24gZGF0YSB0cmFuc2ZlcnMgYmV0d2VlblxuK1x0XHQgKiBOVkhDUl9FTDIgYW5kIEhDUl9FTDIgdG8gc2FuaXRpc2UgdGhpbmdzLlxuK1x0XHQgKi9cbitcdFx0cmVzeCA9IChrdm1faGFzX252Myhrdm0pID9cbitcdFx0XHRjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZudmhjcl9kZXNjLCAwLCAwKSA6XG4rXHRcdFx0KHR5cGVvZihyZXN4KSl7fSk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1RMUjJfRUwxOlxuIFx0Y2FzZSBTQ1RMUjJfRUwyOlxuIFx0XHRyZXN4ID0gY29tcHV0ZV9yZWdfcmVzeF9iaXRzKGt2bSwgXHUwMDI2c2N0bHIyX2Rlc2MsIDAsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXG5pbmRleCAzYzgyZjM5Mjg0NWQxNC4uZjVkYzU3OGQ4Yzk4NTYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXG5AQCAtOTAsNiArOTAsNyBAQCBlbnVtIGNndF9ncm91cF9pZCB7XG4gXHRDR1RfSENSWF9FbkZQTSxcbiBcdENHVF9IQ1JYX1RDUjJFbixcbiBcdENHVF9IQ1JYX1NDVExSMkVuLFxuK1x0Q0dUX0hDUlhfbk5WVEdFLFxuIFxuIFx0Q0dUX0NOVEhDVExfRUwxVFZULFxuIFx0Q0dUX0NOVEhDVExfRUwxVFZDVCxcbkBAIC0xMjEsNiArMTIyLDggQEAgZW51bSBjZ3RfZ3JvdXBfaWQge1xuIFx0Q0dUX01EQ1JfVERFX1REUkEsXG4gXHRDR1RfTURDUl9URENDX1RERV9UREEsXG4gXG4rXHRDR1RfSENSX05WX0hDUlhfbk5WVEdFLFxuK1xuIFx0Q0dUX0lDSF9IQ1JfVENfVERJUixcbiBcbiBcdC8qXG5AQCAtNDEzLDYgKzQxNiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRyYXBfYml0cyBjb2Fyc2VfdHJhcF9iaXRzW10gPSB7XG4gXHRcdC5tYXNrXHRcdD0gSENSWF9FTDJfU0NUTFIyRW4sXG4gXHRcdC5iZWhhdmlvdXJcdD0gQkVIQVZFX0ZPUldBUkRfUlcsXG4gXHR9LFxuK1x0W0NHVF9IQ1JYX25OVlRHRV0gPSB7XG4rXHRcdC5pbmRleFx0XHQ9IEhDUlhfRUwyLFxuK1x0XHQudmFsdWVcdFx0PSAwLFxuK1x0XHQubWFza1x0XHQ9IEhDUlhfRUwyX05WVEdFLFxuK1x0XHQuYmVoYXZpb3VyXHQ9IEJFSEFWRV9GT1JXQVJEX1JXLFxuK1x0fSxcbiBcdFtDR1RfQ05USENUTF9FTDFUVlRdID0ge1xuIFx0XHQuaW5kZXhcdFx0PSBDTlRIQ1RMX0VMMixcbiBcdFx0LnZhbHVlXHRcdD0gQ05USENUTF9FTDFUVlQsXG5AQCAtNDY4LDYgKzQ3Nyw3IEBAIHN0YXRpYyBjb25zdCBlbnVtIGNndF9ncm91cF9pZCAqY29hcnNlX2NvbnRyb2xfY29tYm9bXSA9IHtcbiBcdFx0XHRcdFx0Q0dUX0hDUl9UVk0sIENHVF9IQ1JfVFJWTSwgQ0dUX0hDUlhfU0NUTFIyRW4pLFxuIFx0TUNCKENHVF9IQ1JfVFBVX1RJQ0FCLFx0XHRDR1RfSENSX1RQVSwgQ0dUX0hDUl9USUNBQiksXG4gXHRNQ0IoQ0dUX0hDUl9UUFVfVE9DVSxcdFx0Q0dUX0hDUl9UUFUsIENHVF9IQ1JfVE9DVSksXG4rXHRNQ0IoQ0dUX0hDUl9OVl9IQ1JYX25OVlRHRSxcdENHVF9IQ1JfTlYsIENHVF9IQ1JYX25OVlRHRSksXG4gXHRNQ0IoQ0dUX0hDUl9OVjFfbk5WMl9FTlNDWFQsXHRDR1RfSENSX05WMV9uTlYyLCBDR1RfSENSX0VOU0NYVCksXG4gXHRNQ0IoQ0dUX01EQ1JfVFBNX1RQTUNSLFx0XHRDR1RfTURDUl9UUE0sIENHVF9NRENSX1RQTUNSKSxcbiBcdE1DQihDR1RfTURDUl9UUE1fSFBNTixcdFx0Q0dUX01EQ1JfVFBNLCBDR1RfTURDUl9IUE1OKSxcbkBAIC04NTMsNiArODYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBlbmNvZGluZ190b190cmFwX2NvbmZpZyBlbmNvZGluZ190b19jZ3RbXSBfX2luaXRjb25zdCA9IHtcbiBcdFNSX1RSQVAoU1lTX1NDVExSMl9FTDIsXHRcdENHVF9IQ1JfTlYpLFxuIFx0U1JfUkFOR0VfVFJBUChTWVNfSENSX0VMMixcbiBcdFx0ICAgICAgU1lTX0hDUlhfRUwyLFx0Q0dUX0hDUl9OViksXG4rXHRTUl9UUkFQKFNZU19OVkhDUl9FTDIsXHRcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UpLFxuIFx0U1JfVFJBUChTWVNfU01QUklNQVBfRUwyLFx0Q0dUX0hDUl9OViksXG4gXHRTUl9UUkFQKFNZU19TTUNSX0VMMixcdFx0Q0dUX0hDUl9OViksXG4gXHRTUl9SQU5HRV9UUkFQKFNZU19UVEJSMF9FTDIsXG5AQCAtMjMyMCw3ICsyMzMxLDYgQEAgaW50IF9faW5pdCBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyh2b2lkKVxuIFx0QlVJTERfQlVHX09OKF9fTlJfQ0dUX0dST1VQX0lEU19fIFx1MDAzZSBCSVQoVENfQ0dUX0JJVFMpKTtcbiBcdEJVSUxEX0JVR19PTihfX05SX0ZHVF9HUk9VUF9JRFNfXyBcdTAwM2UgQklUKFRDX0ZHVF9CSVRTKSk7XG4gXHRCVUlMRF9CVUdfT04oX19OUl9GR19GSUxURVJfSURTX18gXHUwMDNlIEJJVChUQ19GR0ZfQklUUykpO1xuLVx0QlVJTERfQlVHX09OKF9fSENSWF9FTDJfTUFTSyBcdTAwMjYgX19IQ1JYX0VMMl9uTUFTSyk7XG4gXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShlbmNvZGluZ190b19jZ3QpOyBpKyspIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnICpjZ3QgPSBcdTAwMjZlbmNvZGluZ190b19jZ3RbaV07XG5AQCAtMjM0NiwxMCArMjM1Niw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKF9fSENSWF9FTDJfUkVTMCAhPSBIQ1JYX0VMMl9SRVMwKVxuLVx0XHRrdm1faW5mbyhcIlNhbml0aXNlZCBIQ1JfRUwyX1JFUzAgPSAlMDE2bGx4LCBleHBlY3RpbmcgJTAxNmxseFxcblwiLFxuLVx0XHRcdCBfX0hDUlhfRUwyX1JFUzAsIEhDUlhfRUwyX1JFUzApO1xuLVxuIFx0a3ZtX2luZm8oXCJudjogJWxkIGNvYXJzZSBncmFpbmVkIHRyYXAgaGFuZGxlcnNcXG5cIixcbiBcdFx0IEFSUkFZX1NJWkUoZW5jb2RpbmdfdG9fY2d0KSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oXG5pbmRleCA0YmY2MjRhNDk1OTFkZi4uN2IyNzI5NmM5NDYwNzAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmhcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxuQEAgLTEwOCw5ICsxMDgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfY3B0cl90cmFwc192aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3RcbiBcdCAqIHdyaXRpbmcgdG8gQ1BUUl9FTDIgdmlhIENQQUNSX0VMMSBjYW4ndCBzZXQgYW55IG9mIFRDUEFDIG9yIFRUQSxcbiBcdCAqIGFzIHRoZXkgYXJlIFJFUzAgaW4gdGhlIGd1ZXN0J3Mgdmlldy4gVG8gd29yayBhcm91bmQgaXQsIHRyYXAgdGhlXG4tXHQgKiBzdWNrZXIgdXNpbmcgdGhlIHZlcnkgc2FtZSBiaXQgaXQgY2FuJ3Qgc2V0Li4uXG4rXHQgKiBzdWNrZXIgdXNpbmcgdGhlIHZlcnkgc2FtZSBiaXQgaXQgY2FuJ3Qgc2V0LiBGRUFUX05WMnAxIGZpeGVzIGl0LlxuIFx0ICovXG4tXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgaXNfaHlwX2N0eHQodmNwdSkpXG4rXHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSBcdTAwMjZcdTAwMjZcbitcdCAgICB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiBpc19oeXBfY3R4dCh2Y3B1KSlcbiBcdFx0dmFsIHw9IENQVFJfRUwyX1RDUEFDO1xuIFxuIFx0LypcbkBAIC0zMjUsNiArMzI2LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RlYWN0aXZhdGVfdHJhcHNfbXBhbSh2b2lkKVxuIFx0XHR3cml0ZV9zeXNyZWdfcyhNUEFNSENSX0hPU1RfRkxBR1MsIFNZU19NUEFNSENSX0VMMik7XG4gfVxuIFxuKy8qXG4rICogSnVzdCBsaWtlIGZvciBIQ1JfRUwyLCB3ZSBjYW4ndCBsZXQgdGhlIGd1ZXN0IG1lc3Mgd2l0aCBzb21lIG9mIHRoZVxuKyAqIGJhc2ljcyB3ZSByZWx5IG9uIGluIEhDUlhfRUwyLiBIb3dldmVyLCB0aGUgbWFqb3IgZGlmZmVyZW5jZSBpcyB0aGF0XG4rICogSENSWF9FTDIgb25seSBhZmZlY3RzIEVMMSwgYW5kIG5ldmVyIEVMMiAoc3VkZGVuIG91dGJ1cnN0IG9mIHNhbml0eSwgSVxuKyAqIGd1ZXNzKS4gU28gaXQgaXMgYWx3YXlzIHRoZSBndWVzdCBpbmZsaWN0aW5nIGl0IG9uIGl0cyBvd24gZ3Vlc3R4LlxuKyAqXG4rICogVGhpbmdzIHdlIGRvbid0IHdhbnQgdG8gbGV0IHRoZSBndWVzdCBjb250cm9sIGFyZTpcbisgKlxuKyAqIC0gVE1FQTogVGhhdCdzIGZvciB1cyB0byBkZWNpZGUgaG93IGFuIFNFQSBpcyByb3V0ZWQsIG5vdCB0aGUgZ3Vlc3QuXG4rICpcbisgKiAtIFBUVFdJOiBTaW1pbGFybHksIGl0IGlzIGZvciB1cyB0byBkZWNpZGUgd2hldGhlciBSZWR1Y2VkIENvaGVyZW5jeSBmb3JcbisgKiAgIHRoZSBQVFcgaXMgYSB0aGluZy4gSXQgcmVhbGx5IGlzbid0LlxuKyAqXG4rICogLSBFbklEQ1AxMjg6IFdlIGRvbid0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC5cbisgKi9cbisjZGVmaW5lIE5WX0hDUlhfR1VFU1RfRVhDTFVERVx0KEhDUlhfRUwyX1RNRUFcdCAgICB8IEhDUlhfRUwyX1BUVFdJIHwgXFxcbitcdFx0XHRcdCBIQ1JYX0VMMl9FbklEQ1AxMjgpXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfdHJhcHNfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpoY3R4dCA9IGhvc3RfZGF0YV9wdHIoaG9zdF9jdHh0KTtcbkBAIC0zNTAsOCArMzY5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfdHJhcHNfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dTY0IGhjcnggPSB2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDI7XG4gXHRcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSkge1xuIFx0XHRcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JYX0VMMik7XG4tXHRcdFx0aGNyeCB8PSB2YWwgXHUwMDI2IF9fSENSWF9FTDJfTUFTSztcbi1cdFx0XHRoY3J4IFx1MDAyNj0gfih+dmFsIFx1MDAyNiBfX0hDUlhfRUwyX25NQVNLKTtcbitcdFx0XHRoY3J4IHw9ICh2YWwgXHUwMDI2IH5OVl9IQ1JYX0dVRVNUX0VYQ0xVREUpO1xuK1x0XHRcdGhjcnggXHUwMDI2PSB+KH52YWwgXHUwMDI2IH5OVl9IQ1JYX0dVRVNUX0VYQ0xVREUpO1xuIFx0XHR9XG4gXG4gXHRcdGN0eHRfc3lzX3JlZyhoY3R4dCwgSENSWF9FTDIpID0gcmVhZF9zeXNyZWdfcyhTWVNfSENSWF9FTDIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaCBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaFxuaW5kZXggYTE3Y2JlNzU4MmRlOTAuLmMzODI4NDhkMzE5NDc5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmhcbkBAIC0xNzIsNiArMTcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0KVxuIFxuIFx0aWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSlcbiBcdFx0Y3R4dF9zeXNfcmVnKGN0eHQsIFNDVExSMl9FTDEpID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TQ1RMUjIpO1xuK1xuK1x0LyogUmV0cmlldmUgTDIncyBIQ1JfRUwyLCBhbmQgc2F2ZSBpdCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0aWYgKGlzX25lc3RlZF9udjNfY3R4dChjdHh0X3RvX3ZjcHUoY3R4dCkpKVxuK1x0XHRjdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMl9yZXR1cm5fc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqY3R4dClcbkBAIC0yODUsNiArMjg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19yZXN0b3JlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0LFxuIFxuIFx0aWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSlcbiBcdFx0d3JpdGVfc3lzcmVnX2VsMShjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSksIFNZU19TQ1RMUjIpO1xuK1xuK1x0LypcbitcdCAqIFB1Ymxpc2ggdGhlIEwyIHZpZXcgb2YgSENSX0VMMiB0byB0aGUgSFcgaWYgTDEgaXMgdXNpbmcgTlYzLlxuK1x0ICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSdzIG93biBWTkNSLlxuK1x0ICovXG4rXHRpZiAoaXNfbmVzdGVkX252M19jdHh0KGN0eHRfdG9fdmNwdShjdHh0KSkpXG4rXHRcdHdyaXRlX3N5c3JlZ19zKGN0eHRfc3lzX3JlZyhjdHh0LCBOVkhDUl9FTDIpLCBTWVNfTlZIQ1JfRUwyKTtcbiB9XG4gXG4gLyogUmVhZCB0aGUgVkNQVSBzdGF0ZSdzIFBTVEFURSwgYnV0IHRyYW5zbGF0ZSAodilFTDIgdG8gRUwxLiAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Ny4uZjEyOWYyMmYxNTYxOGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5AQCAtNzAsNiArNzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxuIFx0XHRcdGhjciB8PSBIQ1JfTlYxO1xuIFxuK1x0XHQvKiBQdWJsaXNoIHRoZSBndWVzdCdzIHZpZXcgb2YgSENSX0VMMiB0byB0aGUgSFcgKi9cbitcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4rXHRcdFx0d3JpdGVfc3lzcmVnX3MoX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMiksIFNZU19OVkhDUl9FTDIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBOb3RoaW5nIGluIEhDUl9FTDIgc2hvdWxkIGltcGFjdCBydW5uaW5nIGluIGh5cGVydmlzb3JcbiBcdFx0ICogY29udGV4dCwgYXBhcnQgZnJvbSBiaXRzIHdlIGhhdmUgZGVmaW5lZCBhcyBSRVN4IChFMkgsXG5AQCAtMzM5LDYgKzM0NSwxMCBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV9lcmV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXHR1NjQgZXNyID0ga3ZtX3ZjcHVfZ2V0X2Vzcih2Y3B1KTtcbiBcdHU2NCBzcHNyLCBlbHIsIG1vZGU7XG4gXG4rXHQvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovXG4rXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0LypcbiBcdCAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lXG4gXHQgKiBpZiB0aGlzIGlzIGEgVkhFIGd1ZXN0IGh5cGVydmlzb3IgcmV0dXJuaW5nIHRvIGl0cyBvd25cbkBAIC0zNDksOCArMzU5LDggQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfZXJldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0ICogVW5sZXNzIHRoZSB0cmFwIGhhcyB0byBiZSBmb3J3YXJkZWQgZnVydGhlciBkb3duIHRoZSBsaW5lLFxuIFx0ICogb2YgY291cnNlLi4uXG4gXHQgKi9cbi1cdGlmICgoX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikgXHUwMDI2IEhDUl9OVikgfHxcbi1cdCAgICAoX192Y3B1X3N5c19yZWcodmNwdSwgSEZHSVRSX0VMMikgXHUwMDI2IEhGR0lUUl9FTDJfRVJFVCkpXG4rXHRpZiAoaXNfbmVzdGVkX2N0eHQodmNwdSkgfHxcbitcdCAgICBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSBcdTAwMjYgSEZHSVRSX0VMMl9FUkVUKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRzcHNyID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TUFNSKTtcbkBAIC00NDEsNiArNDUxLDkgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfY3BhY3JfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXHR1NjQgZXNyID0ga3ZtX3ZjcHVfZ2V0X2Vzcih2Y3B1KTtcbiBcdGludCBydDtcbiBcbitcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghaXNfaHlwX2N0eHQodmNwdSkgfHwgZXNyX3N5czY0X3RvX3N5c3JlZyhlc3IpICE9IFNZU19DUEFDUl9FTDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC01MzQsMTkgKzU0NywxNyBAQCBzdGF0aWMgY29uc3QgZXhpdF9oYW5kbGVyX2ZuIGh5cF9leGl0X2hhbmRsZXJzW10gPSB7XG4gXHRbMHgzRl1cdFx0XHRcdD0ga3ZtX2h5cF9oYW5kbGVfaW1wZGVmLFxuIH07XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbitzdGF0aWMgdm9pZCBmaXh1cF9udl9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzeW5jaHJvbml6ZV92Y3B1X3BzdGF0ZSh2Y3B1KTtcbi1cbiBcdC8qXG4gXHQgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3XG4gXHQgKiBzbyB0aGF0IHRoZSB1c3VhbCBoZWxwZXJzIHdvcmsgY29ycmVjdGx5LiBUaGlzIGVuZm9yY2VzIG91clxuIFx0ICogaW52YXJpYW50IHRoYXQgdGhlIGd1ZXN0J3MgSFlQIGNvbnRleHQgc3RhdHVzIGlzIHByZXNlcnZlZFxuIFx0ICogYWNyb3NzIGEgcnVuLlxuIFx0ICovXG4tXHRpZiAodmNwdV9oYXNfbnYodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdW5saWtlbHkoaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSkpIHtcbitcdGlmICh1bmxpa2VseShob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpKSkge1xuIFx0XHR1NjQgbW9kZSA9ICp2Y3B1X2Nwc3IodmNwdSkgXHUwMDI2IChQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpO1xuK1x0XHR1NjQgaGNyO1xuIFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBQU1JfTU9ERV9FTDF0OlxuQEAgLTU1OSwxMSArNTcwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXG4gXHRcdCp2Y3B1X2Nwc3IodmNwdSkgXHUwMDI2PSB+KFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XG4gXHRcdCp2Y3B1X2Nwc3IodmNwdSkgfD0gbW9kZTtcbitcbitcdFx0LyogUHVibGlzaCB0aGUgbGF0ZXN0IEhDUl9FTDIgdG8gdGhlIGVtdWxhdGlvbiAqL1xuK1x0XHRoY3IgPSAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cbitcdFx0XHRyZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpIDpcbitcdFx0XHRfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBOVkhDUl9FTDIpO1xuK1xuK1x0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTtcbiBcdH1cbiBcbiBcdC8qIEFwcGx5IGV4dHJlbWUgcGFyYW5vaWEhICovXG4tXHRCVUdfT04odmNwdV9oYXNfbnYodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcbitcdEJVR19PTighIWhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkgIT0gaXNfaHlwX2N0eHQodmNwdSkpO1xuK31cbitcbitzdGF0aWMgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4re1xuK1x0c3luY2hyb25pemVfdmNwdV9wc3RhdGUodmNwdSk7XG4rXG4rXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4rXHRcdGZpeHVwX252X2d1ZXN0X2V4aXQodmNwdSk7XG4gXG4gXHRyZXR1cm4gX19maXh1cF9ndWVzdF9leGl0KHZjcHUsIGV4aXRfY29kZSwgaHlwX2V4aXRfaGFuZGxlcnMpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuaW5kZXggYmU2ODViNjNlOGNmMjYuLjBjNGVmMWNlMzJhZTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuQEAgLTQyLDEwICs0MiwxMiBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR1NjQgdmFsO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBkb24ndCBzYXZlIENQVFJfRUwyLCBhcyBhY2Nlc3NlcyB0byBDUEFDUl9FTDFcbi1cdFx0ICogYXJlIGFsd2F5cyB0cmFwcGVkLCBlbnN1cmluZyB0aGF0IHRoZSBpbi1tZW1vcnlcbi1cdFx0ICogY29weSBpcyBhbHdheXMgdXAtdG8tZGF0ZS4gQSBzbWFsbCBibGVzc2luZy4uLlxuK1x0XHQgKiBXaXRob3V0IEZFQVRfTlYycDEsIHdlIGRvbid0IHNhdmUgQ1BUUl9FTDIsIGFzIGFjY2Vzc2VzXG4rXHRcdCAqIHRvIENQQUNSX0VMMSBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlXG4rXHRcdCAqIGluLW1lbW9yeSBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXG4gXHRcdCAqL1xuK1x0XHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxuK1x0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMiwgcmVhZF9zeXNyZWdfZWwxKFNZU19DUEFDUikpO1xuIFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyLFx0IHJlYWRfc3lzcmVnX2VsMShTWVNfU0NUTFIpKTtcbiBcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFRUQlIwX0VMMixcdCByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIwKSk7XG4gXHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMV9FTDIsXHQgcmVhZF9zeXNyZWdfZWwxKFNZU19UVEJSMSkpO1xuQEAgLTY3LDExICs2OSwxOCBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBUaGUgRUwxIHZpZXcgb2YgQ05US0NUTF9FTDEgaGFzIGEgYnVuY2ggb2YgUkVTMCBiaXRzIHdoZXJlXG4gXHRcdCAqIHRoZSBpbnRlcmVzdGluZyBDTlRIQ1RMX0VMMiBiaXRzIGxpdmUuIFNvIHByZXNlcnZlIHRoZXNlXG4gXHRcdCAqIGJpdHMgd2hlbiByZWFkaW5nIGJhY2sgdGhlIGd1ZXN0LXZpc2libGUgdmFsdWUuXG4rXHRcdCAqXG4rXHRcdCAqIFdoaWxlIE5WMnAxIGZpeGVzIHNvbWUgb2YgdGhhdCwgaXQgbWFrZXMgQ05USENUTF9FTDIuRUNWXG4rXHRcdCAqIGV2ZW4gbW9yZSBicm9rZW4gdGhhbiBpdCBhbHJlYWR5IHdhcyB3aXRoIE5WMi5cbiBcdFx0ICovXG4gXHRcdHZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7XG4tXHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcbitcdFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcbitcdFx0XHR2YWwgXHUwMDI2PSBDTlRLQ1RMX1ZBTElEX0JJVFM7XG4rXHRcdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbitcdFx0XHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgQ05USENUTF9FTDIsIHw9LCB2YWwpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFNQX0VMMixcdCByZWFkX3N5c3JlZyhzcF9lbDEpKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5pbmRleCBkZmI5NmVkYmRjNDNjNi4uNjRjOGZiODJmYWRmNmQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0xNzI4LDcgKzE3MjgsNyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcbiBcdFx0ICogWW91IGdldCBFSVRIRVJcbiBcdFx0ICpcbiBcdFx0ICogLSBGRUFUX1ZIRSB3aXRob3V0IEZFQVRfRTJIMFxuLVx0XHQgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMlxuK1x0XHQgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMihwMSkvTlYzXG4gXHRcdCAqIC0gSENSX0VMMi5OVjEgYmVpbmcgUkVTMFxuIFx0XHQgKlxuIFx0XHQgKiBPUlxuQEAgLTE3NDAsNyArMTc0MCwxMyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcbiBcdFx0aWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyX0UySDAsIGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMpKSB7XG4gXHRcdFx0dmFsID0gMDtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcbitcdFx0XHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSlcbitcdFx0XHRcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKTtcbitcdFx0XHRlbHNlIGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXG4rXHRcdFx0XHR2YWwgPSBJRF9SRUdfTElNSVRfRklFTERfRU5VTSh2YWwsIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMlAxKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcbitcdFx0XHR2YWwgXHUwMDI2PSB+SURfQUE2NE1NRlI0X0VMMV9FMkgwO1xuIFx0XHRcdHZhbCB8PSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIEUySDAsIE5JX05WMSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG5AQCAtMTgyNiw2ICsxODMyLDEwIEBAIGludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JfRUwyKTtcbiBcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JfRUwyLCByZXN4KTtcbiBcbitcdC8qIE5WSENSX0VMMiAqL1xuK1x0cmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIE5WSENSX0VMMik7XG4rXHRzZXRfc3lzcmVnX21hc2tzKGt2bSwgTlZIQ1JfRUwyLCByZXN4KTtcbitcbiBcdC8qIEhDUlhfRUwyICovXG4gXHRyZXN4ID0gZ2V0X3JlZ19maXhlZF9iaXRzKGt2bSwgSENSWF9FTDIpO1xuIFx0c2V0X3N5c3JlZ19tYXNrcyhrdm0sIEhDUlhfRUwyLCByZXN4KTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjBhZWIyZTczNmZkZTM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTE4Myw4ICsxODMsNiBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcbiBcdHN3aXRjaCAocmVnKSB7XG4gXHRcdE1BUFBFRF9FTDJfU1lTUkVHKFNDVExSX0VMMiwgICBTQ1RMUl9FTDEsXG4gXHRcdFx0XHQgIHRyYW5zbGF0ZV9zY3Rscl9lbDJfdG9fc2N0bHJfZWwxXHQgICAgICk7XG4tXHRcdE1BUFBFRF9FTDJfU1lTUkVHKENQVFJfRUwyLCAgICBDUEFDUl9FTDEsXG4tXHRcdFx0XHQgIHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDFcdCAgICAgKTtcbiBcdFx0TUFQUEVEX0VMMl9TWVNSRUcoVFRCUjBfRUwyLCAgIFRUQlIwX0VMMSxcbiBcdFx0XHRcdCAgdHJhbnNsYXRlX3R0YnIwX2VsMl90b190dGJyMF9lbDFcdCAgICAgKTtcbiBcdFx0TUFQUEVEX0VMMl9TWVNSRUcoVFRCUjFfRUwyLCAgIFRUQlIxX0VMMSwgICBOVUxMXHQgICAgICk7XG5AQCAtMjEwLDYgKzIwOCwzMyBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcbiBcdFx0bG9jLVx1MDAzZWxvYyA9ICgoaXNfaHlwX2N0eHQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cbiBcdFx0XHQgICAgU1JfTE9DX1NQRUNJQUwgOiBTUl9MT0NfTUVNT1JZKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIENQVFJfRUwyOlxuK1x0XHQvKlxuK1x0XHQgKiBDUFRSX0VMMiBpcyBqdXN0IGFzIHNwZWNpYWwsIGFuZCBuZWVkcyBhIGNlcnRhaW4gYW1vdW50XG4rXHRcdCAqIG9mIGhhbmRob2xkaW5nLiBJdCBhbHdheXMgbGl2ZXMgaW4gbWVtb3J5LCBkdWUgdG8gYmVpbmdcbitcdFx0ICogaGVhdmlseSB0cmFwcGVkIHRoYW5rcyB0byBDUEFDUl9FTDEuVENQQUMgYmVpbmcgUkVTMC5cbitcdFx0ICogRkVBVF9OVjJwMSBmaXhlcyB0aGlzLlxuK1x0XHQgKi9cbitcdFx0bG9jYXRlX21hcHBlZF9lbDJfcmVnaXN0ZXIodmNwdSwgQ1BUUl9FTDIsIENQQUNSX0VMMSxcbitcdFx0XHRcdFx0ICAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMSxcbitcdFx0XHRcdFx0ICAgbG9jKTtcbitcdFx0aWYgKGlzX2h5cF9jdHh0KHZjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxuK1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfU1BFQ0lBTDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5WSENSX0VMMjpcbitcdFx0LypcbitcdFx0ICogWWVzLCBOVkhDUl9FTDIgbWFwcyB0byBpdHNlbGYgd2hlbiBsb2FkZWQgaW4gbmVzdGVkXG4rXHRcdCAqIGNvbnRleHQuIElmIHlvdSBmZWVsIGxpa2UgdGhlIGFyY2hpdGVjdHVyZSBpcyBkb3VibGVcbitcdFx0ICogYmFja2luZyBvbiBpdHNlbGYgdXBzaWRlIGRvd24sIHlvdSdyZSBub3QgYWxvbmUuXG4rXHRcdCAqL1xuK1x0XHRXQVJOX09OX09OQ0UoIWt2bV9oYXNfbnYzKHZjcHUtXHUwMDNla3ZtKSk7XG4rXHRcdGlmIChpc19oeXBfY3R4dCh2Y3B1KSkge1xuK1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfTUVNT1JZO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfTE9BREVEIHwgU1JfTE9DX01BUFBFRDtcbitcdFx0XHRsb2MtXHUwMDNlbWFwX3JlZyA9IE5WSENSX0VMMjtcbitcdFx0fVxuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGxvYy1cdTAwM2Vsb2MgPSBsb2NhdGVfZGlyZWN0X3JlZ2lzdGVyKHZjcHUsIHJlZyk7XG4gXHR9XG5AQCAtMjQ5LDYgKzI3NCw3IEBAIHN0YXRpYyB1NjQgcmVhZF9zcl9mcm9tX2NwdShlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdGNhc2UgREFDUjMyX0VMMjpcdHZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0RBQ1IzMl9FTDIpO1x0YnJlYWs7XG4gXHRjYXNlIElGU1IzMl9FTDI6XHR2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19JRlNSMzJfRUwyKTtcdGJyZWFrO1xuIFx0Y2FzZSBEQkdWQ1IzMl9FTDI6XHR2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19EQkdWQ1IzMl9FTDIpO1x0YnJlYWs7XG4rXHRjYXNlIE5WSENSX0VMMjpcdFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKTtcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0fVxuIFxuQEAgLTI4Nyw2ICszMTMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZV9zcl90b19jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcsIHU2NCB2YWwpXG4gXHRjYXNlIERBQ1IzMl9FTDI6XHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19EQUNSMzJfRUwyKTtcdGJyZWFrO1xuIFx0Y2FzZSBJRlNSMzJfRUwyOlx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfSUZTUjMyX0VMMik7XHRicmVhaztcbiBcdGNhc2UgREJHVkNSMzJfRUwyOlx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfREJHVkNSMzJfRUwyKTtcdGJyZWFrO1xuK1x0Y2FzZSBOVkhDUl9FTDI6XHRcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX05WSENSX0VMMik7XHRicmVhaztcbiBcdGRlZmF1bHQ6XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdH1cbiB9XG5AQCAtMzExLDkgKzMzOCwxNiBAQCB1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0c3dpdGNoIChyZWcpIHtcbiBcdFx0Y2FzZSBDTlRIQ1RMX0VMMjpcbiBcdFx0XHR2YWwgPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpO1xuLVx0XHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0XHR2YWwgfD0gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSBcdTAwMjYgfkNOVEtDVExfVkFMSURfQklUUztcbitcdFx0XHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSkge1xuK1x0XHRcdFx0dmFsIFx1MDAyNj0gQ05US0NUTF9WQUxJRF9CSVRTO1xuK1x0XHRcdFx0dmFsIHw9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgXHUwMDI2IH5DTlRLQ1RMX1ZBTElEX0JJVFM7XG4rXHRcdFx0fVxuIFx0XHRcdHJldHVybiB2YWw7XG4rXHRcdGNhc2UgQ1BUUl9FTDI6XG4rXHRcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbitcdFx0XHRcdHJldHVybiByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRyZXR1cm4gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKTtcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdH1cbkBAIC0zNTksNiArMzkzLDkgQEAgdm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0XHQgKi9cbiBcdFx0XHR3cml0ZV9zeXNyZWdfZWwxKHZhbCwgU1lTX0NOVEtDVEwpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIENQVFJfRUwyOlxuK1x0XHRcdHdyaXRlX3N5c3JlZ19lbDEodmFsLCBTWVNfQ1BBQ1IpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0fVxuQEAgLTI4NDAsNiArMjg3NywxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0cmV0dXJuIFJFR19ISURERU47XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZoY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZClcbit7XG4rXHRpZiAoZWwyX3Zpc2liaWxpdHkodmNwdSwgcmQpID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAga3ZtX2hhc19mZWF0KHZjcHUtXHUwMDNla3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBSRUdfSElEREVOO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgaW50IHNjdGxyMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxuIHtcbkBAIC0zNzUzLDYgKzM4MDAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XG4gXHRcdFx0IHN2ZV9lbDJfdmlzaWJpbGl0eSksXG4gXG4gXHRFTDJfUkVHX1ZOQ1IoSENSWF9FTDIsIHJlc2V0X3ZhbCwgMCksXG4rXHRFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsXG4rXHRcdFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcbiBcbiBcdEVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXG4gXHRFTDJfUkVHKFRUQlIxX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIDApLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjdlMDQxNDUwOWU4OWE4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC01MSw2ICs1MSw4IEBAIEhBU19MUzY0X1ZcbiBIQVNfTFNVSVxuIEhBU19NT1BTXG4gSEFTX05FU1RFRF9WSVJUXG4rSEFTX05WMlAxXG4rSEFTX05WM1xuIEhBU19CQk1MMl9OT0FCT1JUXG4gSEFTX1BBTlxuIEhBU19QTVVWM1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5pbmRleCA4Njg2MGFiNjcyZGM3OC4uZDdmN2NlYjc2OGZlNWMgMTAwNzU1XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5AQCAtMjI4LDcgKzIyOCw3IEBAICQxID09IFwiRW5kU3lzcmVnXCIgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcIlN5c3JlZ1wiIHtcbiB9XG4gXG4gIyBDdXJyZW50bHkgdGhpcyBpcyBlZmZlY3RpdmV5IGEgY29tbWVudCwgaW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGVtaXRcbi0jIGRlZmluZXMgZm9yIHRoZSBmaWVsZHMuXG4rIyBkZWZpbmVzIGZvciB0aGUgZmllbGRzLiBcIk1hcHBpbmdcIiBkb2VzIGVtaXQgdGhlIFJFU3gvVU5LTiBkZWZpbml0aW9ucy5cbiAoJDEgPT0gXCJGaWVsZHNcIiB8fCAkMSA9PSBcIk1hcHBpbmdcIikgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcIlN5c3JlZ1wiIHtcbiBcdGV4cGVjdF9maWVsZHMoMilcbiBcbkBAIC0yMzksOSArMjM5LDE1IEBAICQxID09IFwiRW5kU3lzcmVnXCIgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcIlN5c3JlZ1wiIHtcbiBcdHByaW50IFwiXCJcbiBcbiBcdG5leHRfYml0ID0gLTFcbi1cdHJlczAgPSBudWxsXG4tXHRyZXMxID0gbnVsbFxuLVx0dW5rbiA9IG51bGxcbitcdGlmICgkMSA9PSBcIk1hcHBpbmdcIikge1xuK1x0XHRyZXMwID0gJDIgXCJfUkVTMFwiXG4rXHRcdHJlczEgPSAkMiBcIl9SRVMxXCJcbitcdFx0dW5rbiA9ICQyIFwiX1VOS05cIlxuK1x0fSBlbHNlIHtcbitcdFx0cmVzMCA9IG51bGxcbitcdFx0cmVzMSA9IG51bGxcbitcdFx0dW5rbiA9IG51bGxcbitcdH1cbiBcbiBcdG5leHRcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9zeXNyZWcgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuaW5kZXggYmMxNzg4YjE2NjJiNzYuLmFmZTkzMzc4NTFhMmUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG5AQCAtMjM4NiwxNyArMjM4Niw0MCBAQCBFbmRFbnVtXG4gRW5kU3lzcmVnXG4gXG4gU3lzcmVnXHRJRF9BQTY0TU1GUjRfRUwxXHQzXHQwXHQwXHQ3XHQ0XG4tUmVzMFx0NjM6NDhcbitVbnNpZ25lZEVudW1cdDYzOjYwXHRNVEVGR1RcbitcdDBiMDAwMFx0TklcbitcdDBiMDAwMVx0SU1QXG4rRW5kRW51bVxuK1Vuc2lnbmVkRW51bVx0NTk6NTZcdFNDUlhcbitcdDBiMDAwMFx0TklcbitcdDBiMDAwMVx0SU1QXG4rRW5kRW51bVxuK1Vuc2lnbmVkRW51bVx0NTU6NTJcdFRFVlxuK1x0MGIwMDAwXHROSVxuK1x0MGIwMDAxXHRJTVBcbitFbmRFbnVtXG4rVW5zaWduZWRFbnVtXHQ1MTo0OFx0VFBTXG4rXHQwYjAwMDBcdFZBTF8wMDAwXG4rXHQwYjAwMDFcdFZBTF8wMDAxXG4rXHQwYjAwMTBcdFZBTF8wMDEwXG4rRW5kRW51bVxuIFVuc2lnbmVkRW51bVx0NDc6NDRcdFNSTUFTS1xuIFx0MGIwMDAwXHROSVxuIFx0MGIwMDAxXHRJTVBcbitcdDBiMDAxMFx0U1JNQVNLMlxuK0VuZEVudW1cbitVbnNpZ25lZEVudW1cdDQzOjQwXHRUTEJJRFxuK1x0MGIwMDAwXHROSVxuK1x0MGIwMDAxXHRJTVBcbiBFbmRFbnVtXG4tUmVzMFx0NDM6NDBcbiBVbnNpZ25lZEVudW1cdDM5OjM2XHRFM0RTRVxuIFx0MGIwMDAwXHROSVxuIFx0MGIwMDAxXHRJTVBcbiBFbmRFbnVtXG4tUmVzMFx0MzU6MzJcbitVbnNpZ25lZEVudW1cdDM1OjMyXHRFQUVTUlxuK1x0MGIwMDAwXHROSVxuK1x0MGIwMDAxXHRJTVBcbitFbmRFbnVtXG4gVW5zaWduZWRFbnVtXHQzMToyOFx0Uk1FR0RJXG4gXHQwYjAwMDBcdE5JXG4gXHQwYjAwMDFcdElNUFxuQEAgLTI0MTAsNiArMjQzMyw3IEBAIFVuc2lnbmVkRW51bVx0MjM6MjBcdE5WX2ZyYWNcbiBcdDBiMDAwMFx0TlZfTlYyXG4gXHQwYjAwMDFcdE5WMl9PTkxZXG4gXHQwYjAwMTBcdE5WMlAxXG4rXHQwYjAwMTFcdE5WM1xuIEVuZEVudW1cbiBVbnNpZ25lZEVudW1cdDE5OjE2XHRGR1dURTNcbiBcdDBiMDAwMFx0TklcbkBAIC00MjQyLDYgKzQyNjYsOSBAQCBGaWVsZFx0MVx0RTJUUkVcbiBGaWVsZFx0MFx0RTBIVFJFXG4gRW5kU3lzcmVnXG4gXG4rU3lzcmVnXHROVkhDUl9FTDJcdDNcdDRcdDFcdDVcdDBcbitNYXBwaW5nXHRIQ1JfRUwyXG4rRW5kU3lzcmVnXG4gXG4gU3lzcmVnIEhERkdSVFIyX0VMMlx0M1x0NFx0M1x0MVx0MFxuIFJlczBcdDYzOjI1XG5AQCAtNDUyMSw3ICs0NTQ4LDE0IEBAIEZpZWxkc1x0WkNSX0VMeFxuIEVuZFN5c3JlZ1xuIFxuIFN5c3JlZ1x0SENSWF9FTDJcdDNcdDRcdDFcdDJcdDJcbi1SZXMwXHQ2MzoyNVxuK1JlczBcdDYzOjM1XG4rRmllbGRcdDM0XHROVm5UVExCT1NcbitGaWVsZFx0MzNcdE5WblRUTEJJU1xuK0ZpZWxkXHQzMlx0TlZuVFRMQlxuK1JlczBcdDMxOjI4XG4rRmllbGRcdDI3XHROVlRHRVxuK0ZpZWxkXHQyNlx0U1JNQVNLRW5cbitSZXMwXHQyNVxuIEZpZWxkXHQyNFx0UEFDTUVuXG4gRmllbGRcdDIzXHRFbkZQTVxuIEZpZWxkXHQyMlx0R0NTRW5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE5LjA0OTE0NDg0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MTExMDQxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBOZWVkIGZvciBGdXp6aW5nOiBBUk02NCBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIHBhdGNoZXMgKmFic29sdXRlbHkqIGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdlIHNob3VsZCBiZSBmdXp6aW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFSTTY0IEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBgRkVBVF9OVjNgIGFuZCBgRkVBVF9OVjJwMWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpdHNlbGYgaXMgY29tcGxleCwgYW5kIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMuXG5cblRoZSBjaGFuZ2VzIHNwYW4gYSBmYWlybHkgd2lkZSBhcnJheSBvZiBmaWxlcyB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bWAgZGlyZWN0b3J5OiBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgbmV3IGZlYXR1cmVzIGFuZCBzeXN0ZW0gcmVnaXN0ZXJzLCBjb3JlIGNvbmZpZ3VyYXRpb24sIGFuZCBlbXVsYXRpb24gY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBhZGRpdGlvbnMgb2YgYGt2bV9oYXNfbnYyYCwgYGt2bV9oYXNfbnYzYCwgYGlzX25lc3RlZF9udjNfY3R4dGAsIGBOVkhDUl9FTDJgLCBhbmQgdGhlIGFzc29jaWF0ZWQgdHJhcCBoYW5kbGluZyBhbmQgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaHlwL3ZoZS9zd2l0Y2guY2AgYW5kIGBuZXN0ZWQuY2AgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYXMgdGhvc2UgYXJlIG9mdGVuIGhvdCBzcG90cyBmb3IgYnVncyBpbiB2aXJ0dWFsaXphdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGludm9sdmUgZW11bGF0aW9uIGFuZCByZWdpc3RlciBtYW5pcHVsYXRpb24sIGFyZSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoZSBjb2RlJ3MgcmVhY2hhYmlsaXR5LiBZZXMsIGFic29sdXRlbHkuIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaXMgYSBmZWF0dXJlIHRoYXQgKmNhbiogYmUgdGVzdGVkLiBJdCdzIGEgY29uZmlndXJlZCBmdW5jdGlvbmFsaXR5LCBzbyB3ZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGRldGVybWluZSBob3cgdG8gZW5hYmxlL2NvbmZpZ3VyZSB0aGUgZmVhdHVyZS4gTGV0J3MgZG8gYSBzZWFyY2ggZm9yIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29uZmlncyB0byBkZXRlcm1pbmUgaG93IHdlIGNhbiBlbmFibGUgdGhpcyBmZWF0dXJlIGFuZCwgdGhlcmVmb3JlLCBmdXp6IGl0IGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMyNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjI2LjU2MDI1MTg3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg3ODkxMzE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUk02NF9IQVNfTkVTVEVEX1ZJUlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19udjIoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC0yNzAte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaDoyNzE6XFx0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtMjcyLVxcdFxcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmg9Mjc1PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oLTI3Ni17XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjI3NzpcXHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC0yNzgtXFx0XFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTExNjg9c3RhdGljIGlubGluZSB1NjQgKl9fX2N0eHRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0LCBpbnQgcilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xMTcwLSNpZiAhZGVmaW5lZCAoX19LVk1fTlZIRV9IWVBFUlZJU09SX18pXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjExNzE6XFx0aWYgKHVubGlrZWx5KGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xMTcyLVxcdFxcdCAgICAgciBcXHUwMDNlPSBfX1ZOQ1JfU1RBUlRfXyBcXHUwMDI2XFx1MDAyNiBjdHh0LVxcdTAwM2V2bmNyX2FycmF5KSlcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oPTEwPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2hhc19udihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaC0xMi1cXHRyZXR1cm4gKCFfX2lzX2RlZmluZWQoX19LVk1fTlZIRV9IWVBFUlZJU09SX18pIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmg6MTM6XFx0XFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmgtMTQtXFx0XFx0dmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfSEFTX0VMMikpO1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTE4ODc9c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTAzLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA0OlxcdHJldHVybiAoX19zeXN0ZW1fbWF0Y2hlc19jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTA1LVxcdFxcdCEoaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIHNjb3BlKSB8fFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTI1NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYwOS1cXHRcXHQuZGVzYyA9IFxcXCJOZXN0ZWQgVmlydHVhbGl6YXRpb24gU3VwcG9ydFxcXCIsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI2MTA6XFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTkVTVEVEX1ZJUlQsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI2MTEtXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz0zNjQ9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTQ0Mi1cXHRjYXNlIEtWTV9DQVBfQVJNX0VMMjpcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo0NDM6XFx0XFx0ciA9IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy00NDQtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz0xNTU5PXN0YXRpYyB1bnNpZ25lZCBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTU3Ni1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxNTc3OlxcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE1NzgtXFx0XFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyLCBcXHUwMDI2ZmVhdHVyZXMpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM9Mjk5OT1zdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTMwNjEtXFx0XFx0XFx0XFx0ICAgICBcXFwiaFxcXCIgOiBcXFwiblxcXCIpLFxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjMwNjI6XFx0XFx0IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSA/IFxcXCIrTlYyXFxcIjogXFxcIlxcXCIpO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTMwNjMtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0yOTg9dm9pZCBrdm1fczJfcHRkdW1wX2NyZWF0ZV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTMwNS1cXHRcXHRcXHQgICAgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5tbXUsIFxcdTAwMjZrdm1fcGd0YWJsZV9sZXZlbHNfZm9wcyk7XFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MzA2OlxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkpXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMzA3LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5kZWJ1Z2ZzX252X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihcXFwibmVzdGVkXFxcIiwga3ZtLVxcdTAwM2VkZWJ1Z2ZzX2RlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjU3LjQzOTE3Mjg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5ODAxMjI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIGZvciBBUk02NCBLVk0gQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGRpZyB1cCBzb21lIGV4aXN0aW5nIEtWTSBjb25maWd1cmF0aW9ucyB0YWlsb3JlZCBmb3IgQVJNNjQgYXJjaGl0ZWN0dXJlcy4gVGhlIHNwZWNpZmljcyB3aWxsIGRlcGVuZCBvbiB3aGF0IEknbSBhaW1pbmcgZm9yIOKAkyBwZXJmb3JtYW5jZSBiZW5jaG1hcmtpbmcsIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBleHBlcmltZW50YXRpb24sIHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucywgb3IgcG9zc2libHkgZXZlbiBkZWJ1Z2dpbmcgYSBLVk0tcmVsYXRlZCBpc3N1ZSBvbiBBUk0uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHF1ZXJ5aW5nIGZvciBjb21tb24gYmFzZSBzZXR1cHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHdlYWx0aCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWNyb3NzIHZhcmlvdXMgZGlzdHJpYnV0aW9ucy4gSXQgbWlnaHQgYmUgaGVscGZ1bCB0byB0YXJnZXQgcGFydGljdWxhciBPUyB2YXJpYW50cyBvciBoeXBlcnZpc29yIHZlcnNpb25zIGFzIGEgd2F5IHRvIG5hcnJvdyB0aGUgc2NvcGUsIGFzIHdlbGwgYXMgY29uc2lkZXJpbmcga2VybmVsIHZlcnNpb25zIHRvIGF2b2lkIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBJIGtub3cgdGhhdCBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uIGlzIGEgY3JpdGljYWwgZWxlbWVudCB3aXRoIEFSTSwgc28gSSB3aWxsIHByaW9yaXRpemUgY29uZmlndXJhdGlvbnMgdGhhdCBleHBsaWNpdGx5IGFkZHJlc3MgdGhlIGRldmljZSB0cmVlIGFuZCBhbnkgc3BlY2lmaWMgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgbWVtb3J5IGlzIG1hcHBlZCBhbmQgbWFuYWdlZCwgYW5kIGVzcGVjaWFsbHkgbG9vayBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCBoYW5kbGUgaW50ZXJydXB0IGNvbnRyb2xsZXJzIGFuZCB0aGUgdmlydHVhbGl6ZWQgc3lzdGVtJ3MgcGVyaXBoZXJhbHMgZWZmZWN0aXZlbHkuIEFueSBpbnNpZ2h0cyBpbnRvIG9wdGltaXphdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHZpcnRpbyBkcml2ZXJzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGV4dGVuc2lvbnMgKGxpa2UgU1ZFKSB3b3VsZCBiZSBhIGJvbnVzLCBidXQgSSB3aWxsIGJlIGhhcHB5IHRvIGxlYXJuIGFuZCBleHBsb3JlIGFueXRoaW5nIEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Nzg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDAuNzM3MTg4MzQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM2MDcxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDMuMTAwODA2NDE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MTk4Njk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmVzdGVkIFZpcnR1YWxpemF0aW9uIG9uIEFSTTY0OiBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG51YW5jZXMgb3Iga25vYnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvbiBBUk02NCBhcmNoaXRlY3R1cmVzLiBXZSBhbGwga25vdyB0aGUgYmFzaWNzIG9mIHZpcnR1YWxpemF0aW9uLCBidXQgQVJNNjQgaGFzIGl0cyBvd24gc2V0IG9mIHBlY3VsaWFyaXRpZXMsIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FuIGJlIGEgd2hvbGUgZGlmZmVyZW50IGJlYXN0LiBJJ20gdGhpbmtpbmcgYmV5b25kIGp1c3QgdGhlIGdlbmVyaWMgQ1BVIGZlYXR1cmVzIGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBhcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgSSdsbCBuZWVkIGVuYWJsZWQ/IEFueSBmaXJtd2FyZSByZXF1aXJlbWVudHMgdGhhdCBtaWdodCBiZSB1bmlxdWUgdG8gbmVzdGVkIHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBjYXZlYXRzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgcGVyaGFwcyByZWxhdGVkIHRvIHRoZSBoeXBlcnZpc29yIGNob3NlbiAobGlrZSBLVk0gb3IgWGVuKT8gTWF5YmUgY2VydGFpbiBvcHRpbWl6YXRpb25zIG9yIG1pdGlnYXRpb25zIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgYXQgdGhlIGhvc3Qgb3IgZ3Vlc3QgbGV2ZWw/IEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBhbGwgdGhlIHBvdGVudGlhbCBnb3RjaGFzIGJlZm9yZSBJIGV2ZW4gc3RhcnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRvIGZpbmQgdGhlIHNwZWNpZmljIGRvY3VtZW50YXRpb24gb3IgYmVzdCBwcmFjdGljZXMsIG9yIHdoZXRoZXIgSSBuZWVkIHRvIGdldCByZWFkeSB0byBkZWVwIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYSBjdXN0b20gY29uZmlndXJhdGlvbiB0byBnZXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdvcmtpbmcgb3B0aW1hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjA3LjA4Mjc5NjYzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk3MDEyODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzowNy43NTI1MDcyNDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3NDIyMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQXJtNjQgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2V0dGluZ3MgYXJlIGRlZmluZWQgZm9yIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIFRoYXQncyBhbG1vc3QgYWx3YXlzIHRoZSBjZW50cmFsIHBsYWNlIGZvciBjb25maWd1cmluZyBmZWF0dXJlcy4gU28sIGxldCdzIHN0YXJ0IHdpdGggYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIEl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IG9wdGlvbnMgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCB3aWxsIGJlIGRlc2NyaWJlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBmaWxlIG9yIGJlIGluY2x1ZGVkIGZyb20gaXQuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBsb2NhdGUgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzoxMS45NTk5Mzk5ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mjk3OTQ4MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVTVEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MTIuMjQyOTMxOTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQ4Mjc2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDpcblxuKipEaWdnaW5nIGludG8gYSBLVk0gSXNzdWUqKlxuXG5IbW0sIGNvdWxkIHRoaXMgYmUgc29tZXRoaW5nIHNwZWNpZmljIHRvIEtWTSBjb25maWd1cmF0aW9uPyBJdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxpa2VseSBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gYENPTkZJR19LVk1gIOKAkyB0aGF0IHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgcGllY2UuIE9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVgLiBUaGF0IE1ha2VmaWxlIHNob3VsZCB0ZWxsIG1lIGV4YWN0bHkgaG93IHRoaW5ncyBhcmUgYmVpbmcgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgaG9wZWZ1bGx5LCBpdCdsbCBpbGx1bWluYXRlIHRoaXMgc3BlY2lmaWMgaXNzdWUgb3IgYXQgbGVhc3QgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIExldCdzIHNlZSB3aGF0IGNsdWVzIHRoaXMgTWFrZWZpbGUgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MTUuNTE3NzYyMTg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg1NzE2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVxcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjIwOlxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTIxLVxcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI1LVxcdCB2Z2ljL3ZnaWMtbW1pby12My5vIHZnaWMvdmdpYy1rdm0tZGV2aWNlLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjI2OlxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cXHQgdmdpYy92Z2ljLXY1Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MTYuMTY2MzM5NTQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODg2MDkzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIEFSTTY0IHNpZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBlbXVsYXRlLW5lc3RlZC5vYCBhbmQgYG5lc3RlZC5vYCBhcmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGlmIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGNvZGUgc2VlbXMgZnVuY3Rpb25hbCBhbmQgZGlyZWN0bHkgbW9kaWZpZXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBzbyBJJ20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLlxuXG5Gcm9tIGEgcXVpY2sgc2tpbSwgaGVyZSdzIHdoYXQncyBiZWVuIHRvdWNoZWQ6IGBrdm1fdGltZXJfdmNwdV9sb2FkYCwgdGhhdCBzZWVtcyBsaWtlIGEgaG90IHBhdGggdG8gbG9vayBpbnRvLiBUaGVuIHRoZXJlJ3MgYGNoZWNrX2ZlYXR1cmVfbWFwYCwgYGdldF9yZWdfZml4ZWRfYml0c2AsIGFuZCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgLCB3aGljaCBJJ2xsIGNhdGVnb3JpemUgYXMgYmVpbmcgbW9yZSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2lkZSBvZiB0aGluZ3MuIFRoZXJlJ3MgYSBmbHVycnkgb2YgYWN0aXZpdHkgaW4gdGhlIGBoeXBgIGRpcmVjdG9yeSwgd2l0aCBgX19hY3RpdmF0ZV9jcHRyX3RyYXBzX3ZoZWAsIGBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbmAsIGBfX3N5c3JlZ19zYXZlX2VsMV9zdGF0ZWAsIGBfX3N5c3JlZ19yZXN0b3JlX2VsMV9zdGF0ZWAsIGBfX2NvbXB1dGVfaGNyYCwgYGt2bV9oeXBfaGFuZGxlX2VyZXRgLCBga3ZtX2h5cF9oYW5kbGVfY3BhY3JfZWwxYCwgYGZpeHVwX252X2d1ZXN0X2V4aXRgLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgbGlrZWx5IGJlaW5nIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBhdGhzLCBhbGwgcmVsYXRpbmcgdG8gdGhlIGh5cGVydmlzb3IncyBpbnRlcmFjdGlvbi5cblxuRmluYWxseSwgaW4gdGhlIG1haW4gS1ZNIGRpcmVjdG9yeSwgSSBzZWUgYGxpbWl0X252X2lkX3JlZ2AsIGBrdm1faW5pdF9udl9zeXNyZWdzYCwgYW5kIGEgc2VyaWVzIG9mIHN5c3JlZyBmdW5jdGlvbnMsIGxpa2UgYGxvY2F0ZV9yZWdpc3RlcmAsIGByZWFkX3NyX2Zyb21fY3B1YCwgYHdyaXRlX3NyX3RvX2NwdWAsIGB2Y3B1X3JlYWRfc3lzX3JlZ2AsIGB2Y3B1X3dyaXRlX3N5c19yZWdgLCBhbmQgYG52aGNyX2VsMl92aXNpYmlsaXR5YC4gVGhhdCdzIGEgZ29vZCBvdmVydmlldy5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBsaW1pdF9udl9pZF9yZWdgLCBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGFuZCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIOKAkyB0aG9zZSBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSB0aGUgY29yZSBvZiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQsIG9yIGF0IGxlYXN0IHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjQuOTU0OTUwOTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDU2NTk5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGltaXRfbnZfaWRfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1NDc9c3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2MDUtICovXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTYwNjp1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjA3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjUuMjYwNjE1NTIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTg2MDI3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBga3ZtX2luaXRfbnZfc3lzcmVnc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBga3ZtX2luaXRfbnZfc3lzcmVnc2AuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIEtWTSBpbml0aWFsaXplcyB0aGUgbm9uLXZvbGF0aWxlIHN5c3RlbSByZWdpc3RlcnMsIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGNlcnRhaW4gYXNwZWN0cyBvZiB2aXJ0dWFsaXphdGlvbiBvciBndWVzdCBzdGF0ZSBwZXJzaXN0ZW5jZS4gSXQncyBhIGNydWNpYWwgZnVuY3Rpb24gYmVjYXVzZSBpZiB0aGVzZSByZWdpc3RlcnMgYXJlbid0IHByb3Blcmx5IGNvbmZpZ3VyZWQgZHVyaW5nIGd1ZXN0IHN0YXJ0dXAsIHdlJ3JlIGdvaW5nIHRvIHNlZSBhIHdob2xlIGhvc3Qgb2YgdW5wcmVkaWN0YWJsZSBiZWhhdmlvcnMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5zdGFiaWxpdHksIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgZXZlbiBjb21wbGV0ZSBndWVzdCBmYWlsdXJlcy4gSSdtIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgaXQncyB0b3VjaGluZyDigJMgdGhpbmdzIGxpa2UgTVNSX0lBMzJfVk1fQ1IsIE1TUl9JQTMyX1ZNX0hTQVZFX1BBLCBhbmQgb3RoZXJzIGFzc29jaWF0ZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBBcmUgdGhleSBiZWluZyBzZXQgdG8gYSBzYWZlLCBrbm93biBzdGF0ZT8gSXMgdGhlcmUgYSBjaGVjayBmb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIG1vZGlmeSB0aGVtPyBUaGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscyBoZXJlLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBlYWNoIHJlZ2lzdGVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBvbWlzc2lvbnMgb3IgdW5leHBlY3RlZCB2YWx1ZXMuIEknbSBhbHNvIGludGVyZXN0ZWQgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQgb24gZGlmZmVyZW50IENQVSBhcmNoaXRlY3R1cmVzLiBUaGlzIGlzIGFuIGFyZWEgd2hlcmUgc3VidGxlIGhhcmR3YXJlIHZhcmlhdGlvbnMgY2FuIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJJ20gaG9waW5nIHRvIHNlZSBhIHdlbGwtY29tbWVudGVkLCByb2J1c3QgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGlzIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcmVsaWFibGUgYW5kIHNlY3VyZSB2aXJ0dWFsIGVudmlyb25tZW50LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjU1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjkuNTc5MjIxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNzcxODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9pbml0X252X3N5c3JlZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc2V0X3N5c3JlZ19tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIGludCBzciwgc3RydWN0IHJlc3ggcmVzeClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE3OTgtXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTc5OTppbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjMwLjE3MzAwMTIzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ0MjM5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUmVnaXN0ZXIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLlwiIFRoaXMgaXMgd2hlcmUgSSBzdGFydC4gSSBrbm93IHRoaXMgcmVnaXN0ZXIgaW50aW1hdGVseTsgaXQncyB0aGUgZ2F0ZXdheSwgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlLiBJdCdzIG5vdCBhIHN1Z2dlc3Rpb24sIGl0J3MgYSAqY2hlY2sqLiBJIGFscmVhZHkgaGF2ZSBhIG1lbnRhbCBtb2RlbCBvZiB3aGF0IGl0ICpzaG91bGQqIGNvbnRhaW4sIGdpdmVuIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGFuZCB0aGUgY3VycmVudCBleGVjdXRpb24gc3RhdGUsIGJ1dCBJIG5lZWQgYSBjb25jcmV0ZSBkYXRhIHBvaW50LiBJJ20gbm90IGp1c3QgaWRseSBjdXJpb3VzOyBJJ20gc3lzdGVtYXRpY2FsbHkgdHJhY2luZyBhIHBvdGVudGlhbCBpc3N1ZSwgdmVyaWZ5aW5nIG15IGFzc3VtcHRpb25zLCBvciBwcmVwYXJpbmcgdG8gYWRkcmVzcyBhIHNwZWNpZmljIHByb2JsZW0uIEtub3dpbmcgdGhlIGV4YWN0IHZhbHVlIG9mIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2VzcyBnaXZlcyBtZSBjcml0aWNhbCBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjMzLjUxNzI0NDQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2OTEzMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZoY3JfZWwyX3Zpc2liaWxpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI4NzA9c3RhdGljIHVuc2lnbmVkIGludCB2bmNyX2VsMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjg3OS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjI4ODA6c3RhdGljIHVuc2lnbmVkIGludCBudmhjcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yODgxLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zMjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzgwMy1cXHRFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzozODA0OlxcdFxcdFxcdCBudmhjcl9lbDJfdmlzaWJpbGl0eSksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0zODA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzozMy42NTc5NDIzMjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MzA1MTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBTeXN0ZW0gUmVnaXN0ZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHN5c3RlbSByZWdpc3RlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZXNlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnM6IGB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzLCB0aGUgbGluY2hwaW5zIG9mIG1hbmFnaW5nIHRoZSB2aXJ0dWFsIENQVSdzIHZpZXcgb2YgdGhlIGFyY2hpdGVjdHVyYWwgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZG8sIEkgc3VzcGVjdCwgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBwcm9iYWJseSBzaXQgcmlnaHQgaW4gdGhlIG1pZGRsZSBvZiBhbGwgdGhlIHJlZ2lzdGVyLWFjY2VzcyBvcGVyYXRpb25zLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHdoYXQgdGhlaXIgbG9naWMgaXMgYW5kIHdoZXJlIHRoZXkgYXJlIGNhbGxlZCBmcm9tLCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSB2aXJ0dWFsIG1hY2hpbmUncyBzeXN0ZW0gcmVnaXN0ZXJzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yaywgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkIGZyb20uIEkgYmV0IHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscyBoZXJlIGFuZCB0aGF0IHRoaXMgaXMgd2hlcmUgd2UgaGF2ZSBwcm9ibGVtcyB3aXRoIGhhbmRsaW5nIHRoZSBjb3JyZWN0IHN0YXRlIG9mIHRoZSByZWdpc3RlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzEwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MzcuMDQwOTk3NzE1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEzOTI4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9yZWFkX3N5c19yZWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI4ND1zdGF0aWMgdm9pZCB3cml0ZV9zcl90b19jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTMyMC1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjMyMTp1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTMyMi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTUyND1zdGF0aWMgYm9vbCBhY2Nlc3Nfcncoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy01MzAtXFx0ZWxzZVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NTMxOlxcdFxcdHAtXFx1MDAzZXJlZ3ZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZyk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy01MzItXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjA0LVxcdGlmICh+bWFzaykge1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NjA1OlxcdFxcdHZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZyk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy02MDYtXFx0XFx0dmFsIFxcdTAwMjY9IH5tYXNrO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz02MTg9c3RhdGljIGJvb2wgYWNjZXNzX2FjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjI3LVxcdGdldF9hY2Nlc3NfbWFzayhyLCBcXHUwMDI2bWFzaywgXFx1MDAyNnNoaWZ0KTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjYyODpcXHRwLVxcdTAwM2VyZWd2YWwgPSAodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnKSBcXHUwMDI2IG1hc2spIFxcdTAwM2VcXHUwMDNlIHNoaWZ0O1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjI5LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0yNjEyPXN0YXRpYyBib29sIGFjY2Vzc19jc3NlbHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MTktXFx0ZWxzZVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MjYyMDpcXHRcXHRwLVxcdTAwM2VyZWd2YWwgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCByZWcpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYyMS1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjYyND1zdGF0aWMgYm9vbCBhY2Nlc3NfY2NzaWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yNjMxLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MjYzMjpcXHRjc3NlbHIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBDU1NFTFJfRUwxKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MzMtXFx0Y3NzZWxyIFxcdTAwMjY9IENTU0VMUl9FTDFfTGV2ZWwgfCBDU1NFTFJfRUwxX0luRDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjgwOD1zdGF0aWMgYm9vbCBhY2Nlc3NfZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxNC1cXHRlbHNlXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyODE1OlxcdFxcdHAtXFx1MDAzZXJlZ3ZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIEVMUl9FTDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxNi1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDA3OT1zdGF0aWMgYm9vbCBoYW5kbGVfdm1hbGxzMTJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg3LVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDA4ODpcXHR2dHRiciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFZUVEJSX0VMMik7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg5LVxcdGxpbWl0ID0gQklUX1VMTChrdm1fZ2V0X3BhX2JpdHModmNwdS1cXHUwMDNla3ZtKSk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQxMDM9c3RhdGljIGJvb2wgaGFuZGxlX3JpcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDYtXFx0dTMyIHN5c19lbmNvZGluZyA9IHN5c19pbnNuKHAtXFx1MDAzZU9wMCwgcC1cXHUwMDNlT3AxLCBwLVxcdTAwM2VDUm4sIHAtXFx1MDAzZUNSbSwgcC1cXHUwMDNlT3AyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxMDc6XFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDgtXFx0dTY0IGJhc2UsIHJhbmdlO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MTU4PXN0YXRpYyBib29sIGhhbmRsZV9pcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNjEtXFx0dTMyIHN5c19lbmNvZGluZyA9IHN5c19pbnNuKHAtXFx1MDAzZU9wMCwgcC1cXHUwMDNlT3AxLCBwLVxcdTAwM2VDUm4sIHAtXFx1MDAzZUNSbSwgcC1cXHUwMDNlT3AyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxNjI6XFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjM3LjI5MjM5NTU4OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzNDQ1NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyBgdmNwdV93cml0ZV9zeXNfcmVnYCoqXG5cbkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyB0byBsb29rIGF0IGB2Y3B1X3dyaXRlX3N5c19yZWdgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGNvbnRleHQuIFdoeSBhcmUgd2UgZXZlbiBleGFtaW5pbmcgdGhpcyBmdW5jdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBhIHJlY2VudCBidWcgcmVwb3J0PyBQZXJmb3JtYW5jZSB0dW5pbmc/IFNlY3VyaXR5IGFuYWx5c2lzPyBLbm93aW5nIHRoZSBvYmplY3RpdmUgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBpdC5cblxuSSdsbCBzdGFydCBieSBtYWtpbmcgc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvZiB3aGF0IFwic3lzX3JlZ1wiIHJlZmVycyB0by4gSXQncyBsaWtlbHkgYSBzeXN0ZW0tbGV2ZWwgcmVnaXN0ZXIgd2l0aGluIHRoZSB2aXJ0dWFsIENQVSdzIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgd2hpY2ggYXJjaGl0ZWN0dXJlIHdlJ3JlIGRlYWxpbmcgd2l0aCAoeDg2LCBBUk0sIGV0Yy4pIGlzIGNydWNpYWwgaGVyZSwgYXMgdGhlIHNwZWNpZmljIHN5c3RlbSByZWdpc3RlcnMgYW5kIHRoZWlyIGZ1bmN0aW9ucyBhcmUgaGlnaGx5IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuXG5cbk5leHQsIEknbGwgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgYHZjcHVfd3JpdGVfc3lzX3JlZ2AuIFNwZWNpZmljYWxseSBJJ2xsIG5lZWQgdG8ga25vdzpcbiogICAqKldoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8qKiBJcyB0aGVyZSBhIGB2Y3B1YCBzdHJ1Y3Q/IEEgcmVnaXN0ZXIgc3RhdGUgc3RydWN0dXJlPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNoYWRvdyByZWdpc3RlcnMsIG9yIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3M/IEhvdyBkb2VzIHRoZSBzdHJ1Y3R1cmUgY2hhbmdlIGR1cmluZyB0aGUgd3JpdGVzP1xuKiAgICoqV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHJlZ2lzdGVycyBiZWluZyB3cml0dGVuIHRvPyoqIEFuZCB3aGF0IGFyZSB0aGVpciBtZWFuaW5ncz8gV2hpY2ggcmVnaXN0ZXJzIGFyZSBjb25zaWRlcmVkIGNyaXRpY2FsLCBhbmQgd2hpY2ggY2FuIGJlIG1vcmUgc2FmZWx5IG1vZGlmaWVkLlxuKiAgICoqV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcz8qKiBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHJlZ2lzdGVyIHZhbHVlcywgb3IgYWNjZXNzIHBlcm1pc3Npb25zPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBjb25jZXJucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHZDUFVzIGNvbmN1cnJlbnRseT9cblxuRnJvbSB0aGVyZSwgSSdsbCBleHBsb3JlIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgdkNQVS4gV2hhdCBraW5kIG9mIHZhbGlkYXRpb24gaXMgYmVpbmcgZG9uZSBiZWZvcmUgYHZjcHVfd3JpdGVfc3lzX3JlZ2A/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlPyBBcmUgYW55IGFzc3VtcHRpb25zIG1hZGUgcmVnYXJkaW5nIHRoZSBndWVzdCBvcGVyYXRpbmcgc3lzdGVtJ3MgYmVoYXZpb3I/XG5cbkZpbmFsbHksIGlmIEkgYW0gZG9pbmcgdGhpcyBmb3IgYSBzcGVjaWZpYyBwdXJwb3NlLCBsaWtlIGEgYnVnLCBJIHdpbGwgbGlrZWx5IHRoZW4gYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgYmVoYXZpb3IsIHN1Y2ggYXMgdHJhY2luZyBkb3duIHRoZSBmbG93IG9mIHRoZSBjb2RlLCB0byBzZWUgaG93IHRoZSB3cml0ZSBpbXBhY3RzIGxhdGVyIGFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTIwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6NDEuNjE1ODQzNTQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIyNDg4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV93cml0ZV9zeXNfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zMjE9dTY0IHZjcHVfcmVhZF9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTM3NC1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjM3NTp2b2lkIHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzc2LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NTI0PXN0YXRpYyBib29sIGFjY2Vzc19ydyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUyOC1cXHRpZiAocC1cXHUwMDNlaXNfd3JpdGUpXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo1Mjk6XFx0XFx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIHAtXFx1MDAzZXJlZ3ZhbCwgci1cXHUwMDNlcmVnKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUzMC1cXHRlbHNlXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjExLVxcdHZhbCB8PSAocC1cXHUwMDNlcmVndmFsIFxcdTAwMjYgKG1hc2sgXFx1MDAzZVxcdTAwM2Ugc2hpZnQpKSBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjYxMjpcXHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgdmFsLCByLVxcdTAwM2VyZWcpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjEzLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0xMDAwPXN0YXRpYyB1NjQgcmVzZXRfYW1haXJfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMTAwMi1cXHR1NjQgYW1haXIgPSByZWFkX3N5c3JlZyhhbWFpcl9lbDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MTAwMzpcXHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgYW1haXIsIEFNQUlSX0VMMSk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDA0LVxcdHJldHVybiBhbWFpcjtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAwNz1zdGF0aWMgdTY0IHJlc2V0X2FjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMTAwOS1cXHR1NjQgYWN0bHIgPSByZWFkX3N5c3JlZyhhY3Rscl9lbDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MTAxMDpcXHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgYWN0bHIsIEFDVExSX0VMMSk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDExLVxcdHJldHVybiBhY3RscjtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAxND1zdGF0aWMgdTY0IHJlc2V0X21waWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMTAyOC1cXHRtcGlkciB8PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAzMSk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDI5OlxcdHZjcHVfd3JpdGVfc3lzX3JlZyh2Y3B1LCBtcGlkciwgTVBJRFJfRUwxKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMzAtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI2MTI9c3RhdGljIGJvb2wgYWNjZXNzX2Nzc2VscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYxNy1cXHRpZiAocC1cXHUwMDNlaXNfd3JpdGUpXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyNjE4OlxcdFxcdHZjcHVfd3JpdGVfc3lzX3JlZyh2Y3B1LCBwLVxcdTAwM2VyZWd2YWwsIHJlZyk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yNjE5LVxcdGVsc2VcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjgwOD1zdGF0aWMgYm9vbCBhY2Nlc3NfZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxMi1cXHRpZiAocC1cXHUwMDNlaXNfd3JpdGUpXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyODEzOlxcdFxcdHZjcHVfd3JpdGVfc3lzX3JlZyh2Y3B1LCBwLVxcdTAwM2VyZWd2YWwsIEVMUl9FTDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxNC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjQxLjg3ODA5ODM0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU1MDYzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBzeXN0ZW0gcmVnaXN0ZXIsIGBOVkhDUl9FTDJgLCBhbmQgdHdlYWtzIHRoZSBleGlzdGluZyBzeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZSBmdW5jdGlvbnMgKGB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgKSB0byBoYW5kbGUgYENQVFJfRUwyYCB3aXRoIHRoZSBuZXcgbG9naWMsIGNvbnRpbmdlbnQgb24gYEFSTTY0X0hBU19OVjJQMWAgYmVpbmcgZGVmaW5lZC4gSXQgYWxzbyBtb2RpZmllcyBgX19jb21wdXRlX2hjcmAgdG8gd3JpdGUgdG8gZWl0aGVyIGBOVkhDUl9FTDJgIG9yIGBTWVNfTlZIQ1JfRUwyYCwgYW5kIGltcG9ydGFudGx5LCBjaGFuZ2VzIGBmaXh1cF9ndWVzdF9leGl0YCB0byBjYWxsIGBmaXh1cF9udl9ndWVzdF9leGl0YCwgd2hpY2ggcmVhZHMgYE5WSENSX0VMMmAgYW5kIGFzc2lnbnMgaXRzIHZhbHVlIHRvIGBIQ1JfRUwyYC5cblxuVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yazsgZGVmaW5pdGVseSB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGBsaW1pdF9udl9pZF9yZWdgLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgLCBhbmQgYF9fY29tcHV0ZV9oY3JgLlxuXG5BaGEhIE5vdyBJJ20gcmVtZW1iZXJpbmcgdGhhdCBgX19jb21wdXRlX2hjcmAsIGBmaXh1cF9udl9ndWVzdF9leGl0YCwgYW5kIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgIHJlc2lkZSB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmNgIGZpbGVzLiBUaGlzIG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gRUwyIOKAkyB0aGUgaHlwZXJ2aXNvcidzIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpcyBjYW4gc3l6a2FsbGVyIGJlIHVzZWQgdG8gdGFyZ2V0IHRoZW0/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnkgcnVubmluZyBLVk0gZ3Vlc3RzLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IGFsbCB0aGUgZHVja3MgaW4gYSByb3cuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gd29yaywgYmV5b25kIHRoZSBvYnZpb3VzLiBJIHJhbiBhIHF1aWNrIHNlYXJjaCBmb3IgYE5FU1RFRGAgaW4gYm90aCBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AgYW5kIHRoZSB0b3AtbGV2ZWwgYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIGJ1dCBjYW1lIHVwIGVtcHR5LiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgYGFyY2gvYXJtNjQva3ZtL01ha2VmaWxlYC4gQmluZ28hIEl0IGxvb2tzIGxpa2UgYGVtdWxhdGUtbmVzdGVkLm9gIGFuZCBgbmVzdGVkLm9gIGFyZSBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGFzIGxvbmcgYXMgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFNvIGl0IHNlZW1zIHRoYXQgYEtWTWAgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IGNvbmZpZ3VyYXRpb24uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB2ZXJpZnkgYEFSTTY0X0hBU19ORVNURURfVklSVGAgaW4gYGFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY2AgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjI5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjQ5LjQzMzE2NTMwOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODU5MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSTTY0X0hBU19ORVNURURfVklSVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTE4ODc9c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTAzLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA0OlxcdHJldHVybiAoX19zeXN0ZW1fbWF0Y2hlc19jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTA1LVxcdFxcdCEoaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIHNjb3BlKSB8fFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTI1NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYwOS1cXHRcXHQuZGVzYyA9IFxcXCJOZXN0ZWQgVmlydHVhbGl6YXRpb24gU3VwcG9ydFxcXCIsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI2MTA6XFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTkVTVEVEX1ZJUlQsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI2MTEtXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjQ5LjYxMjAzMDE2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg5NjgyNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIEFSTTY0IGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlIGlzbid0IGEgZGVkaWNhdGVkIGBDT05GSUdfQVJNNjRfTkVTVEVEX1ZJUlRgIG9wdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEluc3RlYWQsIGl0IHNlZW1zIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0byBkZXRlcm1pbmUgc3VwcG9ydC5cblxuVGhlIG5leHQgdGhvdWdodCBpcywgd2hhdCBhYm91dCBgQ09ORklHX0FSTTY0X1ZIRWA/IEFoIHllcywgVmlydHVhbGl6YXRpb24gSG9zdCBFeHRlbnNpb25zLiBUaGF0IHJpbmdzIGEgYmVsbC4gTmVzdGVkIHZpcnR1YWxpemF0aW9uICpkb2VzKiBkZXBlbmQgb24gVkhFLCB0aGF0J3MgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZSBvbiBBUk02NC4gQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzbid0IFZIRSB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBLVk0/IE9yIG1heWJlIHBhcnQgb2YgS1ZNJ3MgYmFzZSBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbiBiZWNhdXNlIGl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIGlmIGl04oCZcyBleHBsaWNpdGx5IHJlcXVpcmVkIG9yIGluaGVyZW50bHkgcHJlc2VudC4gTGV0IG1lIG1ha2Ugc3VyZSBJIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjU0LjgwMTcxNTY5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMzY2MjMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJNNjRfVkhFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6NTUuMjQ0MDg5ODI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDEyMzMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLVk0gY29uZmlndXJhdGlvbiBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSBpbiB0aGUgTGludXgga2VybmVsLiBXaGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncz8gTmF0dXJhbGx5LCBpdCdzIGdvaW5nIHRvIGJlIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgZGV0YWlscyBvbiBob3cgdGhlIEtWTSBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgb3B0aW9ucyBmb3IgZW5hYmxpbmcgS1ZNLCBkZWZpbmluZyBzcGVjaWZpYyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHNvbWUgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzo1OC40ODUzMjYwNjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTg1Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzo1OC43NjExOTMyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjY2MDM5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtWTSBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBjbGVhciB0aGUga2V5IGxpZXMgd2l0aGluIHRoZXNlIGZvY3VzIHN5bWJvbHMuIExldCdzIGJyZWFrIHRoZW0gZG93bi4gSSBoYXZlOlxuXG4qICAgYGt2bV9pbml0X252X3N5c3JlZ3NgXG4qICAgYGxpbWl0X252X2lkX3JlZ2BcbiogICBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgXG4qICAgYGZpeHVwX252X2d1ZXN0X2V4aXRgXG4qICAgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWBcbiogICBgX19jb21wdXRlX2hjcmBcblxuQWxyaWdodCwgaW1tZWRpYXRlbHkgSSByZWNvZ25pemUgdGhhdCBgX19jb21wdXRlX2hjcmAgYW5kIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgIHJlc2lkZSBpbiB0aGUgaHlwZXJ2aXNvciBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmNgLiBUaGlzIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIEkgaGF2ZSB0byBiZSBzdXJlIGFib3V0IGBmaXh1cF9udl9ndWVzdF9leGl0YC4gSSBiZWxpZXZlIGl0J3Mgc3RhdGljLi4uIHllcywgY29uZmlybWVkLCBpdCdzIGFsc28gc3RhdGljIHdpdGhpbiBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2AuIEdvb2QsIGFuZCB0aGF0J3MgdGhlIGNvcnJlY3QgbmFtZS4gSSByZW1lbWJlciBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoLiBPa2F5LCBhbmQgYF9fY29tcHV0ZV9oY3JgIGlzIHN0YXRpYyB0b28sIGFuZCBpdCBjb21wdXRlcyB0aGUgSENSLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgc2F2ZXMgdGhlIFZFTDIgc3RhdGUuIGBrdm1faW5pdF9udl9zeXNyZWdzYCBpcyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIGBsaW1pdF9udl9pZF9yZWdgIGxpbWl0cyB0aGUgTlYgSUQgcmVnaXN0ZXIuIEZpbmFsbHksIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAgY2hlY2tzIHRoZSB2aXNpYmlsaXR5LlxuXG5UaGVzZSBzeW1ib2xzIHNlZW0gdG8gYmUgd2VsbC1jaG9zZW4uIFRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBjb2RlIEkgYW0gaW50ZXJlc3RlZCBpbi4gVGhleSdyZSBub3QganVzdCBnZW5lcmljLCBwb3RlbnRpYWxseSBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyIHRoYW4gdGhlIG9uZXMgdGhhdCBhcmUgY2FsbGVkIG9uIHRoZSBndWVzdCBleGl0LiBCdXQsIGV2ZW4gdGhvc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgbG9naWMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBXYWl0LCBgX19jb21wdXRlX2hjcmAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGd1ZXN0IGVudHJ5LiBJdCBjb3VsZCBiZSBhIGhvdCBwYXRoLCB0aG91Z2guIExldCdzIHNlZS4uLiBhbmQgYGZpeHVwX252X2d1ZXN0X2V4aXRgIGlzIGNhbGxlZCBmcm9tIGBmaXh1cF9ndWVzdF9leGl0YCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBjYWxsZWQgb24gKmV2ZXJ5KiBndWVzdCBleGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhvc2UuXG5cblBlcmhhcHMgSSBzaG91bGQgcmVmb2N1cyBvbiB0aGUgaW5pdCBhbmQgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gYXZvaWQgZ2V0dGluZyBib2dnZWQgZG93biBpbiBob3QgcGF0aHMuIExldCdzIHN0aWNrIHdpdGg6XG5cbiogICBga3ZtX2luaXRfbnZfc3lzcmVnc2BcbiogICBgbGltaXRfbnZfaWRfcmVnYFxuKiAgIGBudmhjcl9lbDJfdmlzaWJpbGl0eWBcbiogICBBbmQsIGFzIGFuIGV4dHJhLCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgIGZyb20gYGFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxODowOC40MjcyMzUzMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzkyMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvcHVsYXRlX252X3RyYXBfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYz0yMjk3PXN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2FsbF9mZ3RfbWFza3MoaW50IHJldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMtMjMyNS1cXG5hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jOjIzMjY6aW50IF9faW5pdCBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyh2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMtMjMyNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE4OjA4LjY1MDAzMzAyN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTA1NzA4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE5WIEFjY2VzcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgcmVsYXRlZCB0byBOViBhY2Nlc3MuIGBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZ2AgbG9va3MgbGlrZSBhIG5vbi1zdGFydGVyLiBJdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCdzIG9ubHkgY2FsbGVkIGR1cmluZyBib290LCBtZWFuaW5nIG5vIHVzZXItY29udHJvbGxlZCBpbnB1dC4gTm90IGlkZWFsLlxuXG5Ib3dldmVyLCBgbGltaXRfbnZfaWRfcmVnYCBpcyBjYWxsZWQgd2hlbiB1c2Vyc3BhY2UgcmVhZHMgSUQgcmVnaXN0ZXJzLiBUaGF0J3MgaW1tZWRpYXRlbHkgcHJvbWlzaW5nLiBUaGVuIEkgc2VlIGBrdm1faW5pdF9udl9zeXNyZWdzYCwgY2FsbGVkIHdoZW4gYSB2Q1BVIGluaXRpYWxpemVzLCBhbmQgdGhhdCBzZWVtcyBsaWtlIGEgc29saWQgdGFyZ2V0IHRvby4gTmV4dCB1cCwgYG52aGNyX2VsMl92aXNpYmlsaXR5YCBpcyBjYWxsZWQgd2hlbiB1c2Vyc3BhY2UgYWNjZXNzZXMgdGhlIHN5c3RlbSByZWdpc3Rlciwgd2hpY2ggaXMgZ3JlYXQuXG5cbmB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgIGFyZSBpbnRlcmVzdGluZywgYXMgdGhleSd2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBgQ1BUUl9FTDJgIGFuZCBgQ05USENUTF9FTDJgLiBUaGVzZSBhcmUgY2FsbGVkIGFueXRpbWUgdXNlcnNwYWNlIG9yIHRoZSBndWVzdCBhY2Nlc3NlcyBzeXN0ZW0gcmVnaXN0ZXJzLiBUaGV5J3JlIHBvdGVudGlhbGx5IGdvb2QsIGJ1dCB0aGV5J3JlIHByZXR0eSBnZW5lcmFsLCB3aGljaCBtaWdodCBtYWtlIGZ1enppbmcgbGVzcyBlZmZlY3RpdmUuIFBlcmhhcHMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhlc2UuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhdCBga3ZtX2hhc19udjJgIGFuZCBga3ZtX2hhc19udjNgLiBUaGV5J3JlIGlubGluZSBmdW5jdGlvbnMsIHNvIHByb2JhYmx5IG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGFyZ2V0cy5cblxuT2theSwgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYHRpbWVyX3NldF90cmFwc2AgaW4gYGFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBjb3VsZCBsZWFkIHNvbWV3aGVyZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3MzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MTQuMTU1NzQ0MTkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY4ODk3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGltZXJfc2V0X3RyYXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM9NzQ3PXN0YXRpYyB2b2lkIGt2bV90aW1lcl92Y3B1X2xvYWRfbmVzdGVkX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMtNzgwLVxcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYzo3ODE6c3RhdGljIHZvaWQgdGltZXJfc2V0X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHRpbWVyX21hcCAqbWFwKVxcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYy03ODIte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jPTg4OT12b2lkIGt2bV90aW1lcl92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTkyMC1cXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM6OTIxOlxcdHRpbWVyX3NldF90cmFwcyh2Y3B1LCBcXHUwMDI2bWFwKTtcXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMtOTIyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MTQuNDAyNjQwMjg2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzAyODYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBUaW1lciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGB0aW1lcl9zZXRfdHJhcHNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgZ2V0dGluZyBjYWxsZWQgd2hlbmV2ZXIgYSB2Q1BVIGdldHMgbG9hZGVkIG9udG8gYSBwaHlzaWNhbCBDUFUg4oCTIGBrdm1fdGltZXJfdmNwdV9sb2FkYC4gVGhhdCdzIGEgY2xhc3NpYyBob3QgcGF0aCBzaXR1YXRpb24sIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSwgc28gd2UgbmVlZCB0byBiZSBleHRyYSBjYXJlZnVsIHdpdGggaXQuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSAqd2hhdCogaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IHBhdGgsIHBhcnRpY3VsYXJseSBpZiB3ZSdyZSBzZWVpbmcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgYGFybTY0YCwgYW5kIHRoZSB0aW1lciBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEknbGwgZ28gc3RyYWlnaHQgdG8gYGFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYGNoZWNrX2ZlYXR1cmVfbWFwYC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBob3cgdGhlIHRpbWVycyBhcmUgY29uZmlndXJlZCBvciB3aGF0IGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZlYXR1cmUgc2V0LCBhbmQgcG90ZW50aWFsbHkgdGhlIGNvbmZpZ3VyYXRpb24sIHdpbGwgb2ZmZXIgY2x1ZXMgdG8gdGhlIGhvdCBwYXRoIGxvZ2ljIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdkNQVSBsb2FkaW5nIGFuZCB0aW1lciBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxODoxNy44NzI5MjkyNTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQ0NzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19mZWF0dXJlX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9jb25maWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9jb25maWcuYz0xMzc2PXN0YXRpYyB2b2lkIF9faW5pdCBjaGVja19yZWdfZGVzYyhjb25zdCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2MgKnIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xMzgxLVxcbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jOjEzODI6dm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xMzgzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MTguMTE2Mzg0Mzc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTg2MTM3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbml0aWFsaXphdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBjaGVja19mZWF0dXJlX21hcGAgaXMgYmVpbmcgZGVmaW5lZCB3aXRoaW4gYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIGl0J3MgcHJvYmFibHkgYWJvdXQgaW5pdGlhbGl6aW5nIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdC4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgYGdldF9yZWdfZml4ZWRfYml0c2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jYC4gVGhhdCBmaWxlIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGZpbGUgcGF0aC4gSXQgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBzb21lIGNvbnRleHQgZm9yIGBjaGVja19mZWF0dXJlX21hcGAgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQVJNNjQgS1ZNIGNvbmZpZ3VyYXRpb24uIEkgZXhwZWN0IHRoYXQgZGlnZ2luZyBpbnRvIHRoYXQgZnVuY3Rpb24gd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBmZWF0dXJlIG1hcCdzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGluaXRpYWxpemVkLCBvciB2YWxpZGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MjAuODc1MDAxNzExWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2MTc2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3JlZ19maXhlZF9iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jPTE1MDk9dm9pZCBjb21wdXRlX2ZndShzdHJ1Y3Qga3ZtICprdm0sIGVudW0gZmd0X2dyb3VwX2lkIGZndClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jLTE1NTItXFxuYXJjaC9hcm02NC9rdm0vY29uZmlnLmM6MTU1MzpzdHJ1Y3QgcmVzeCBnZXRfcmVnX2ZpeGVkX2JpdHMoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xNTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MjEuMDk1NjI1MjE3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjY5Nzg1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSB0YXJnZXQgaXMgdkNQVSBpbml0aWFsaXphdGlvbiwgYW5kIGBnZXRfcmVnX2ZpeGVkX2JpdHNgIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdGhhdCBhcmUgd29ydGggZm9jdXNpbmcgb24gZm9yIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgY2FuZGlkYXRlIGZvY3VzIHN5bWJvbHMgaW5jbHVkZXM6IGBrdm1faW5pdF9udl9zeXNyZWdzYCwgYGxpbWl0X252X2lkX3JlZ2AsIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAsIGFuZCBgZ2V0X3JlZ19maXhlZF9iaXRzYC4gVGhlc2UgYXJlIGFsbCBkaXJlY3RseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIGtleSByZWdpc3RlciBsb2dpYyB3aXRoaW4gdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbi4gTG9va2luZyBmdXJ0aGVyLCBJJ2xsIGFkZCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGV2ZW4gdGhvdWdoIGl0J3Mgb24gdGhlIGV4aXQgcGF0aC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgYE5WSENSX0VMMmAgbG9naWMsIHdoaWNoIGlzIG5ldy5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBhZmZlY3RzIGBhcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYW5kIHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFRoYXQncyBzdHJhaWdodGZvcndhcmQ7IHRoZSBgS1ZNYCBjb25maWcgaXMgc3VmZmljaWVudCB0byBidWlsZCB0aGVzZSBjb2RlIHBhdGhzLiBObyBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgYXBwYXJlbnQuXG5cblNvLCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB2aWV3IGZvciBmdXp6aW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgYSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb24gd2l0aCBjbGVhciBlbnRyeSBwb2ludHMuXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYGt2bV9pbml0X252X3N5c3JlZ3NgXG4gICAgKiAgIGBsaW1pdF9udl9pZF9yZWdgXG4gICAgKiAgIGBudmhjcl9lbDJfdmlzaWJpbGl0eWBcbiAgICAqICAgYGdldF9yZWdfZml4ZWRfYml0c2BcbiAgICAqICAgYGZpeHVwX252X2d1ZXN0X2V4aXRgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBLVk1gXG5cbk15IHJlYXNvbmluZyBpcyBzaW1wbGUuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyBhbmQgdjJwMSBzdXBwb3J0IGluIEtWTS4gSXQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBLVk0gaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluY2x1ZGluZyB0aGUgc3lzcmVncyAoTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZsb3cuIFRoaXMgbWVhbnMgdGhhdCBieSBydW5uaW5nIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIEtWTSBndWVzdCwgd2UgY2FuIGFjdGl2YXRlIHRoZSBhZmZlY3RlZCBjb2RlIHRvIGJlIGZ1enplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NzcsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE4OjI5LjcyMjYwNzQyMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODk5Mjc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2luaXRfbnZfc3lzcmVnc1wiLFxuICAgIFwibGltaXRfbnZfaWRfcmVnXCIsXG4gICAgXCJudmhjcl9lbDJfdmlzaWJpbGl0eVwiLFxuICAgIFwiZ2V0X3JlZ19maXhlZF9iaXRzXCIsXG4gICAgXCJmaXh1cF9udl9ndWVzdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gdjMgKEZFQVRfTlYzKSBhbmQgRkVBVF9OVjJwMSBpbiBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgaW5jbHVkaW5nIHN5c3JlZyBoYW5kbGluZyAoZS5nLiwgTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZpeHVwcy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGNhbiBiZSB0ZXN0ZWQgYnkgcnVubmluZyBLVk0gZ3Vlc3RzIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2luaXRfbnZfc3lzcmVnc1wiLFxuICAgIFwibGltaXRfbnZfaWRfcmVnXCIsXG4gICAgXCJudmhjcl9lbDJfdmlzaWJpbGl0eVwiLFxuICAgIFwiZ2V0X3JlZ19maXhlZF9iaXRzXCIsXG4gICAgXCJmaXh1cF9udl9ndWVzdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gdjMgKEZFQVRfTlYzKSBhbmQgRkVBVF9OVjJwMSBpbiBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgaW5jbHVkaW5nIHN5c3JlZyBoYW5kbGluZyAoZS5nLiwgTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZpeHVwcy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGNhbiBiZSB0ZXN0ZWQgYnkgcnVubmluZyBLVk0gZ3Vlc3RzIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownqx5s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 17:53:44 +0000 UTC FinishedAt: 2026-07-02 18:18:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4d1ca70c-d658-4c6a-9b98-514e3e9be4e4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_init_nv_sysregs", "limit_nv_id_reg", "nvhcr_el2_visibility", "get_reg_fixed_bits", "fixup_nv_guest_exit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pbml0X252X3N5c3JlZ3MmIzM0OywKICAgICYjMzQ7bGltaXRfbnZfaWRfcmVnJiMzNDssCiAgICAmIzM0O252aGNyX2VsMl92aXNpYmlsaXR5JiMzNDssCiAgICAmIzM0O2dldF9yZWdfZml4ZWRfYml0cyYjMzQ7LAogICAgJiMzNDtmaXh1cF9udl9ndWVzdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDhkYTYyYTNjZWRiZjg4ZmYzZTY4YWFjOTdiZDFkMGJhOWE3ZGIwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTY6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmE0MjY4M2FmNzlmYjVkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtOTY4LDYgJiM0Mzs5NjgsNyBAQCBzdHJ1Y3QgYXJtNjRfZnRyX3JlZyAqZ2V0X2FybTY0X2Z0cl9yZWcodTMyIHN5c19pZCk7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnIwX292ZXJyaWRlO1xuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyMV9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyNF9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMF9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMV9vdmVycmlkZTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0emZyMF9vdmVycmlkZTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oXG5pbmRleCAzZjkyMzNiNWExMzA4MS4uZjZjZDg1MTA0Nzk0NzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcbkBAIC0yODcsMjEgJiM0MzsyODcsNiBAQFxuIFx0XHRcdFx0IEdFTk1BU0soMTksIDE4KSB8XHRcXFxuIFx0XHRcdFx0IEdFTk1BU0soMTUsIDApKVxuIFxuLS8qXG4tICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dFxuLSAqIGF0IHRoaXMgcG9pbnQgaW4gdGltZS4gSXQgZG9lc24mIzM5O3QgbWVhbiB0aGF0IHdlIGFjdHVhbGx5ICpoYW5kbGUqXG4tICogdGhlbSwgYnV0IHRoYXQgYXQgbGVhc3QgdGhvc2UgdGhhdCBhcmUgbm90IGFkdmVydGlzZWQgdG8gYSBndWVzdFxuLSAqIHdpbGwgYmUgUkVTMCBmb3IgdGhhdCBndWVzdC5cbi0gKi9cbi0jZGVmaW5lIF9fSENSWF9FTDJfTUFTS1x0XHQoQklUX1VMTCg2KSlcbi0jZGVmaW5lIF9fSENSWF9FTDJfbk1BU0tcdChHRU5NQVNLX1VMTCgyNCwgMTQpIHwgXFxcbi1cdFx0XHRcdCBHRU5NQVNLX1VMTCgxMSwgNykgIHwgXFxcbi1cdFx0XHRcdCBHRU5NQVNLX1VMTCg1LCAwKSlcbi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMFx0XHR+KF9fSENSWF9FTDJfbk1BU0sgfCBfX0hDUlhfRUwyX01BU0spXG4tI2RlZmluZSBfX0hDUlhfRUwyX1JFUzFcdFx0fihfX0hDUlhfRUwyX25NQVNLIHwgXFxcbi1cdFx0XHRcdCAgX19IQ1JYX0VMMl9NQVNLICB8IFxcXG4tXHRcdFx0XHQgIF9fSENSWF9FTDJfUkVTMClcbi1cbiAvKiBIeXAgUHJlZmV0Y2ggRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAoSFBGQVIvSERGQVIpICovXG4gI2RlZmluZSBIUEZBUl9NQVNLXHQoflVMKDB4ZikpXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDViZjNkN2UxZDkyYzc3Li5kNmY0MzJiMTU1OGY1ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG5AQCAtMjY2LDYgJiM0MzsyNjYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHZzZXJyb3Jfc3RhdGVfaXNfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICAgICAoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpIFx1MDAyNiBIQ1JYX0VMMl9UTUVBKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MihzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX25lc3RlZF9udjNfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGhhc192aGUoKSBcdTAwMjZcdTAwMjYga3ZtX2hhc19udjModmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNiBpc19uZXN0ZWRfY3R4dCh2Y3B1KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSBcdTAwMjYgSENSX0VMMl9OVikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpIFx1MDAyNiBIQ1JYX0VMMl9OVlRHRSkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogVGhlIGxheW91dCBvZiBTUFNSIGZvciBhbiBBQXJjaDMyIHN0YXRlIGlzIGRpZmZlcmVudCB3aGVuIG9ic2VydmVkIGZyb20gYW5cbiAgKiBBQXJjaDY0IFNQU1JfRUx4IG9yIGFuIEFBcmNoMzIgU1BTUl8qLiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgQUFyY2gzMlxuQEAgLTYxNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9pbmNyX3BjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgKi9cbiBzdGF0aWMgaW5saW5lIHU2NCB2Y3B1X3Nhbml0aXNlZF9jcHRyX2VsMihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dTY0IGNwdHIgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7XG4mIzQzO1x0dTY0IGNwdHIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7XG4gXG4gXHRpZiAoIXZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4gXHRcdGNwdHIgPSB0cmFuc2xhdGVfY3B0cl9lbDJfdG9fY3BhY3JfZWwxKGNwdHIpO1xuQEAgLTY4Niw2ICYjNDM7NzA2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X3NldF9oY3J4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdFx0aWYgKGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRJU0FSMV9FTDEsIExTNjQsIExTNjRfVikpXG4gXHRcdFx0dmNwdS1cdTAwM2VhcmNoLmhjcnhfZWwyIHw9IEhDUlhfRUwyX0VuQVNSO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBOVjMgaXMgYSBob3N0LXNwZWNpZmljIGV4dGVuc2lvbiwgYW5kIHdlIGFsd2F5cyB1c2UgaXRcbiYjNDM7XHRcdCAqIHdoZW4gcHJlc2VudCBhbmQgdGhhdCB0aGUgZ3Vlc3QgdXNlcyBOVi4gSXQgbWF5IGJlIGJlXG4mIzQzO1x0XHQgKiBoaWRkZW4gZnJvbSB0aGUgZ3Vlc3QgdGhvdWdoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2Y3B1X2hhc19udih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkge1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfTlZUR0U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBJZiB0aGUgZ3Vlc3QgaXMgTlYyLWNhcGFibGUsIHRoZW4gd2UgbmVlZCB0byBzZWVcbiYjNDM7XHRcdFx0ICogYWxsIHRoZSBUTEJJcywgYXMgY29uZmlndXJlZCBpbiBIQ1JfRUwyLlxuJiM0MztcdFx0XHQgKiBPdGhlcndpc2UsIHJlbGF4IHRoZSBUTEJJIHRyYXBzIHRvIG9ubHkgVEdFPTAuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIWt2bV9oYXNfbnYyKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gKEhDUlhfRUwyX05WblRUTEIgIHxcbiYjNDM7XHRcdFx0XHRcdFx0XHRIQ1JYX0VMMl9OVm5UVExCSVMpO1xuJiM0MztcdFx0fVxuIFx0fVxuIH1cbiAjZW5kaWYgLyogX19BUk02NF9LVk1fRU1VTEFURV9IX18gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi4yNjQ4YzhhNzE3YmEwNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNTQzLDYgJiM0Mzs1NDMsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcbiBcdE1EQ1JfRUwyLFx0LyogTW9uaXRvciBEZWJ1ZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChFTDIpICovXG4gXHRDTlRIQ1RMX0VMMixcdC8qIENvdW50ZXItdGltZXIgSHlwZXJ2aXNvciBDb250cm9sIHJlZ2lzdGVyICovXG4gXHRaQ1JfRUwyLFx0LyogU1ZFIENvbnRyb2wgUmVnaXN0ZXIgKEVMMikgKi9cbiYjNDM7XHRIQ1JfRUwyLFx0LyogSHlwZXJ2aXNvciBDb250cm9sIFJlZ2lzdGVyICovXG4gXG4gXHQvKiBBbnkgVk5DUi1jYXBhYmxlIHJlZyBnb2VzIGFmdGVyIHRoaXMgcG9pbnQgKi9cbiBcdE1BUktFUihfX1ZOQ1JfU1RBUlRfXyksXG5AQCAtNTcxLDcgJiM0Mzs1NzIsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcbiBcdFZOQ1IoVEZTUl9FTDEpLFx0LyogVGFnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAoRUwxKSAqL1xuIFx0Vk5DUihWUElEUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIFByb2Nlc3NvciBJRCBSZWdpc3RlciAqL1xuIFx0Vk5DUihWTVBJRFJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBNdWx0aXByb2Nlc3NvciBJRCBSZWdpc3RlciAqL1xuLVx0Vk5DUihIQ1JfRUwyKSxcdC8qIEh5cGVydmlzb3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqL1xuJiM0MztcdFZOQ1IoTlZIQ1JfRUwyKSwvKiBOViBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoSFNUUl9FTDIpLFx0LyogSHlwZXJ2aXNvciBTeXN0ZW0gVHJhcCBSZWdpc3RlciAqL1xuIFx0Vk5DUihWVFRCUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIFRhYmxlIEJhc2UgUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoVlRDUl9FTDIpLFx0LyogVmlydHVhbGl6YXRpb24gVHJhbnNsYXRpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5pbmRleCAxNDM2NmQzNWNlODJmMC4uOWU4YTQ5ZmE4YjYzOGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5AQCAtMTEsNyAmIzQzOzExLDcgQEBcbiAjZGVmaW5lIFZOQ1JfVlRDUl9FTDIgICAgICAgICAgIDB4MDQwXG4gI2RlZmluZSBWTkNSX1ZNUElEUl9FTDIgICAgICAgICAweDA1MFxuICNkZWZpbmUgVk5DUl9DTlRWT0ZGX0VMMiAgICAgICAgMHgwNjBcbi0jZGVmaW5lIFZOQ1JfSENSX0VMMiAgICAgICAgICAgIDB4MDc4XG4mIzQzOyNkZWZpbmUgVk5DUl9OVkhDUl9FTDIgICAgICAgICAgMHgwNzhcbiAjZGVmaW5lIFZOQ1JfSFNUUl9FTDIgICAgICAgICAgIDB4MDgwXG4gI2RlZmluZSBWTkNSX1ZQSURSX0VMMiAgICAgICAgICAweDA4OFxuICNkZWZpbmUgVk5DUl9UUElEUl9FTDIgICAgICAgICAgMHgwOTBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbmluZGV4IDlhMjJkZjBjNTEyMGYzLi4xNGZiZmE4ZTZiN2I1MCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5AQCAtNzg1LDYgJiM0Mzs3ODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9yYXpbXSA9IHtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnIwX292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyMl9vdmVycmlkZTtcbiYjNDM7c3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyNF9vdmVycmlkZTtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NHBmcjBfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRwZnIxX292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0emZyMF9vdmVycmlkZTtcbkBAIC04NTgsNyAmIzQzOzg1OSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX19mdHJfcmVnX2VudHJ5IHtcbiBcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSMl9FTDEsIGZ0cl9pZF9hYTY0bW1mcjIsXG4gXHRcdFx0ICAgICAgIFx1MDAyNmlkX2FhNjRtbWZyMl9vdmVycmlkZSksXG4gXHRBUk02NF9GVFJfUkVHKFNZU19JRF9BQTY0TU1GUjNfRUwxLCBmdHJfaWRfYWE2NG1tZnIzKSxcbi1cdEFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQpLFxuJiM0MztcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQsXG4mIzQzO1x0XHRcdCAgICAgICBcdTAwMjZpZF9hYTY0bW1mcjRfb3ZlcnJpZGUpLFxuIFxuIFx0LyogT3AxID0gMCwgQ1JuID0gMTAsIENSbSA9IDQgKi9cbiBcdEFSTTY0X0ZUUl9SRUcoU1lTX01QQU1JRFJfRUwxLCBmdHJfbXBhbWlkciksXG5AQCAtMjYyMCw2ICYjNDM7MjYyMiwyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbiBcdFx0XHR7IC8qIFNlbnRpbmVsICovIH1cbiBcdFx0fSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRlc2MgPSBcJiMzNDtGRUFUX05WMnAxXCYjMzQ7LFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTlYyUDEsXG4mIzQzO1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcbiYjNDM7XHRcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXG4mIzQzO1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyUDEpXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0ZFQVRfTlYzXCYjMzQ7LFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTlYzLFxuJiM0MztcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuJiM0MztcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMylcbiYjNDM7XHR9LFxuIFx0e1xuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU18zMkJJVF9FTDBfRE9fTk9UX1VTRSxcbiBcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oIGIvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXG5pbmRleCBkNGM3ZDQ1YWU2YmM4My4uZDE1YzJjYjFiMGYyOGEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2ltYWdlLXZhcnMuaFxuQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIFBJX0VYUE9SVF9TWU0oaWRfYWE2NGlzYXIyX292ZXJyaWRlKTtcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjFfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NG1tZnIyX292ZXJyaWRlKTtcbiYjNDM7UElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjRfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHBmcjBfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHBmcjFfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHNtZnIwX292ZXJyaWRlKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xuaW5kZXggYmM1N2IyOTBlNWU3YmEuLjRlNDc2MTZiY2FjMjNhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xuQEAgLTEwNiw2ICYjNDM7MTA2LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjIG1tZnIyIF9fcHJlbDY0X2luaXRjb25zdCA9IHtcbiBcdH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmdHJfc2V0X2Rlc2MgbW1mcjQgX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xuJiM0MztcdC5uYW1lXHRcdD0gXCYjMzQ7aWRfYWE2NG1tZnI0XCYjMzQ7LFxuJiM0MztcdC5vdmVycmlkZVx0PSBcdTAwMjZpZF9hYTY0bW1mcjRfb3ZlcnJpZGUsXG4mIzQzO1x0LmZpZWxkc1x0XHQ9IHtcbiYjNDM7XHRcdEZJRUxEKFwmIzM0O252X2ZyYWNcJiMzNDssIElEX0FBNjRNTUZSNF9FTDFfTlZfZnJhY19TSElGVCwgTlVMTCksXG4mIzQzO1x0XHR7fVxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBib29sIF9faW5pdCBwZnIwX3N2ZV9maWx0ZXIodTY0IHZhbClcbiB7XG4gXHQvKlxuQEAgLTIyMCw2ICYjNDM7MjI5LDcgQEAgUFJFTDY0KGNvbnN0IHN0cnVjdCBmdHJfc2V0X2Rlc2MsIHJlZykgcmVnc1tdIF9fcHJlbDY0X2luaXRjb25zdCA9IHtcbiBcdHsgXHUwMDI2bW1mcjBcdH0sXG4gXHR7IFx1MDAyNm1tZnIxXHR9LFxuIFx0eyBcdTAwMjZtbWZyMlx0fSxcbiYjNDM7XHR7IFx1MDAyNm1tZnI0XHR9LFxuIFx0eyBcdTAwMjZwZnIwIFx0fSxcbiBcdHsgXHUwMDI2cGZyMSBcdH0sXG4gXHR7IFx1MDAyNmlzYXIxXHR9LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggNDE1NWZlODliNThhMTcuLmRiNjBmYWNhZDlmM2MwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcbkBAIC04NzYsOCAmIzQzOzg3NiwxNCBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zZXRfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApXG4gXHRhc3NpZ25fY2xlYXJfc2V0X2JpdCh0dnQwMiwgQ05USENUTF9FTDFOVlZDVCwgY2xyLCBzZXQpO1xuIFx0YXNzaWduX2NsZWFyX3NldF9iaXQodHB0MDIsIENOVEhDVExfRUwxTlZQQ1QsIGNsciwgc2V0KTtcbiBcbi1cdC8qIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3Nvci4gKi9cbi1cdHN5c3JlZ19jbGVhcl9zZXQoY250aGN0bF9lbDIsIGNsciwgc2V0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3NvciwgdW5sZXNzXG4mIzQzO1x0ICogd2UgYXJlIHN1cmUgQ05US0NUTF9FTDEgaXMgY29tcGxldGVseSBzdGF0ZWZ1bCB3aXRoIEZFQVRfTlYycDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXG4mIzQzO1x0XHRzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c3lzcmVnX2NsZWFyX3NldChjbnRrY3RsX2VsMSwgY2xyLCBzZXQpO1xuIH1cbiBcbiB2b2lkIGt2bV90aW1lcl92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jIGIvYXJjaC9hcm02NC9rdm0vY29uZmlnLmNcbmluZGV4IDA2MjIxNjJiMDg5ZTUwLi43ZTg2NDc5MTQyNzIzNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xuQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgc3RydWN0IHJlZ19mZWF0X21hcF9kZXNjIHtcbiAjZGVmaW5lIEZFQVRfSENYXHRcdElEX0FBNjRNTUZSMV9FTDEsIEhDWCwgSU1QXG4gI2RlZmluZSBGRUFUX1MyUElFXHRcdElEX0FBNjRNTUZSM19FTDEsIFMyUElFLCBJTVBcbiAjZGVmaW5lIEZFQVRfR0NJRVx0XHRJRF9BQTY0UEZSMl9FTDEsIEdDSUUsIElNUFxuJiM0MzsjZGVmaW5lIEZFQVRfTlYzXHRcdElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WM1xuIFxuIHN0YXRpYyBib29sIG5vdF9mZWF0X2FhNjRlbDMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC05MDQsNiAmIzQzOzkwNSwxMiBAQCBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUF9GR1QoaGRmZ3d0cjJfZGVzYywgaGRmZ3d0cjJfbWFza3MsXG4gXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3J4X2ZlYXRfbWFwW10gPSB7XG4mIzQzO1x0TkVFRFNfRkVBVChIQ1JYX0VMMl9OVlRHRVx0XHR8XG4mIzQzO1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCXHRcdHxcbiYjNDM7XHRcdCAgIEhDUlhfRUwyX05WblRUTEJJU1x0XHR8XG4mIzQzO1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCT1MsXG4mIzQzO1x0XHQgICBGRUFUX05WMyksXG4mIzQzO1x0TkVFRFNfRkVBVChIQ1JYX0VMMl9TUk1BU0tFbiwgRkVBVF9TUk1BU0spLFxuIFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9QQUNNRW4sIGZlYXRfcGF1dGhfbHIpLFxuIFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9FbkZQTSwgRkVBVF9GUE1SKSxcbiBcdE5FRURTX0ZFQVQoSENSWF9FTDJfR0NTRW4sIEZFQVRfR0NTKSxcbkBAIC05MzMsNyAmIzQzOzk0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xuIH07XG4gXG4gXG4tc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAoaGNyeF9kZXNjLCBfX0hDUlhfRUwyLFxuJiM0MztzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3J4X2Rlc2MsIEhDUlhfRUwyLFxuIFx0XHRcdCAgICAgIGhjcnhfZmVhdF9tYXAsIEZFQVRfSENYKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xuQEAgLTEwMTAsNiAmIzQzOzEwMTcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xuIHN0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKGhjcl9kZXNjLCBIQ1JfRUwyLFxuIFx0XHRcdCAgICAgIGhjcl9mZWF0X21hcCwgRkVBVF9BQTY0RUwyKTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAobnZoY3JfZGVzYywgTlZIQ1JfRUwyLFxuJiM0MztcdFx0XHQgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfTlYzKTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBzY3RscjJfZmVhdF9tYXBbXSA9IHtcbiBcdE5FRURTX0ZFQVQoU0NUTFIyX0VMMV9OTUVBXHR8XG4gXHRcdCAgIFNDVExSMl9FTDFfRUFTRSxcbkBAIC0xMzg0LDYgJiM0MzsxMzk0LDcgQEAgdm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhkZmd3dHIyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2aGNyeF9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhjcl9kZXNjKTtcbiYjNDM7XHRjaGVja19yZWdfZGVzYyhcdTAwMjZudmhjcl9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNnNjdGxyMl9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNnRjcjJfZWwyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2c2N0bHJfZWwxX2Rlc2MpO1xuQEAgLTE1NzksMTEgJiM0MzsxNTkwLDIxIEBAIHN0cnVjdCByZXN4IGdldF9yZWdfZml4ZWRfYml0cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSENSWF9FTDI6XG4gXHRcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZoY3J4X2Rlc2MsIDAsIDApO1xuLVx0XHRyZXN4LnJlczEgfD0gX19IQ1JYX0VMMl9SRVMxO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSENSX0VMMjpcbiBcdFx0cmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sIFx1MDAyNmhjcl9kZXNjLCAwLCAwKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBOVkhDUl9FTDI6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBhcHBseSBzYW5pdGlzYXRpb24gaWYgd2UgZG8gaGF2ZSBGRUFUX05WMy5cbiYjNDM7XHRcdCAqIE90aGVyd2lzZSwgdGhlIHJlZ2lzdGVyIGFsaWFzZXMgd2l0aCBIQ1JfRUwyIGluIFZOQ1IsXG4mIzQzO1x0XHQgKiBhbmQgd2UmIzM5O3JlIGJldHRlciBvZmYgcmVseWluZyBvbiBkYXRhIHRyYW5zZmVycyBiZXR3ZWVuXG4mIzQzO1x0XHQgKiBOVkhDUl9FTDIgYW5kIEhDUl9FTDIgdG8gc2FuaXRpc2UgdGhpbmdzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXN4ID0gKGt2bV9oYXNfbnYzKGt2bSkgP1xuJiM0MztcdFx0XHRjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZudmhjcl9kZXNjLCAwLCAwKSA6XG4mIzQzO1x0XHRcdCh0eXBlb2YocmVzeCkpe30pO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIFNDVExSMl9FTDE6XG4gXHRjYXNlIFNDVExSMl9FTDI6XG4gXHRcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZzY3RscjJfZGVzYywgMCwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcbmluZGV4IDNjODJmMzkyODQ1ZDE0Li5mNWRjNTc4ZDhjOTg1NiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcbkBAIC05MCw2ICYjNDM7OTAsNyBAQCBlbnVtIGNndF9ncm91cF9pZCB7XG4gXHRDR1RfSENSWF9FbkZQTSxcbiBcdENHVF9IQ1JYX1RDUjJFbixcbiBcdENHVF9IQ1JYX1NDVExSMkVuLFxuJiM0MztcdENHVF9IQ1JYX25OVlRHRSxcbiBcbiBcdENHVF9DTlRIQ1RMX0VMMVRWVCxcbiBcdENHVF9DTlRIQ1RMX0VMMVRWQ1QsXG5AQCAtMTIxLDYgJiM0MzsxMjIsOCBAQCBlbnVtIGNndF9ncm91cF9pZCB7XG4gXHRDR1RfTURDUl9UREVfVERSQSxcbiBcdENHVF9NRENSX1REQ0NfVERFX1REQSxcbiBcbiYjNDM7XHRDR1RfSENSX05WX0hDUlhfbk5WVEdFLFxuJiM0MztcbiBcdENHVF9JQ0hfSENSX1RDX1RESVIsXG4gXG4gXHQvKlxuQEAgLTQxMyw2ICYjNDM7NDE2LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHJhcF9iaXRzIGNvYXJzZV90cmFwX2JpdHNbXSA9IHtcbiBcdFx0Lm1hc2tcdFx0PSBIQ1JYX0VMMl9TQ1RMUjJFbixcbiBcdFx0LmJlaGF2aW91clx0PSBCRUhBVkVfRk9SV0FSRF9SVyxcbiBcdH0sXG4mIzQzO1x0W0NHVF9IQ1JYX25OVlRHRV0gPSB7XG4mIzQzO1x0XHQuaW5kZXhcdFx0PSBIQ1JYX0VMMixcbiYjNDM7XHRcdC52YWx1ZVx0XHQ9IDAsXG4mIzQzO1x0XHQubWFza1x0XHQ9IEhDUlhfRUwyX05WVEdFLFxuJiM0MztcdFx0LmJlaGF2aW91clx0PSBCRUhBVkVfRk9SV0FSRF9SVyxcbiYjNDM7XHR9LFxuIFx0W0NHVF9DTlRIQ1RMX0VMMVRWVF0gPSB7XG4gXHRcdC5pbmRleFx0XHQ9IENOVEhDVExfRUwyLFxuIFx0XHQudmFsdWVcdFx0PSBDTlRIQ1RMX0VMMVRWVCxcbkBAIC00NjgsNiAmIzQzOzQ3Nyw3IEBAIHN0YXRpYyBjb25zdCBlbnVtIGNndF9ncm91cF9pZCAqY29hcnNlX2NvbnRyb2xfY29tYm9bXSA9IHtcbiBcdFx0XHRcdFx0Q0dUX0hDUl9UVk0sIENHVF9IQ1JfVFJWTSwgQ0dUX0hDUlhfU0NUTFIyRW4pLFxuIFx0TUNCKENHVF9IQ1JfVFBVX1RJQ0FCLFx0XHRDR1RfSENSX1RQVSwgQ0dUX0hDUl9USUNBQiksXG4gXHRNQ0IoQ0dUX0hDUl9UUFVfVE9DVSxcdFx0Q0dUX0hDUl9UUFUsIENHVF9IQ1JfVE9DVSksXG4mIzQzO1x0TUNCKENHVF9IQ1JfTlZfSENSWF9uTlZUR0UsXHRDR1RfSENSX05WLCBDR1RfSENSWF9uTlZUR0UpLFxuIFx0TUNCKENHVF9IQ1JfTlYxX25OVjJfRU5TQ1hULFx0Q0dUX0hDUl9OVjFfbk5WMiwgQ0dUX0hDUl9FTlNDWFQpLFxuIFx0TUNCKENHVF9NRENSX1RQTV9UUE1DUixcdFx0Q0dUX01EQ1JfVFBNLCBDR1RfTURDUl9UUE1DUiksXG4gXHRNQ0IoQ0dUX01EQ1JfVFBNX0hQTU4sXHRcdENHVF9NRENSX1RQTSwgQ0dUX01EQ1JfSFBNTiksXG5AQCAtODUzLDYgJiM0Mzs4NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnIGVuY29kaW5nX3RvX2NndFtdIF9faW5pdGNvbnN0ID0ge1xuIFx0U1JfVFJBUChTWVNfU0NUTFIyX0VMMixcdFx0Q0dUX0hDUl9OViksXG4gXHRTUl9SQU5HRV9UUkFQKFNZU19IQ1JfRUwyLFxuIFx0XHQgICAgICBTWVNfSENSWF9FTDIsXHRDR1RfSENSX05WKSxcbiYjNDM7XHRTUl9UUkFQKFNZU19OVkhDUl9FTDIsXHRcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UpLFxuIFx0U1JfVFJBUChTWVNfU01QUklNQVBfRUwyLFx0Q0dUX0hDUl9OViksXG4gXHRTUl9UUkFQKFNZU19TTUNSX0VMMixcdFx0Q0dUX0hDUl9OViksXG4gXHRTUl9SQU5HRV9UUkFQKFNZU19UVEJSMF9FTDIsXG5AQCAtMjMyMCw3ICYjNDM7MjMzMSw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZClcbiBcdEJVSUxEX0JVR19PTihfX05SX0NHVF9HUk9VUF9JRFNfXyBcdTAwM2UgQklUKFRDX0NHVF9CSVRTKSk7XG4gXHRCVUlMRF9CVUdfT04oX19OUl9GR1RfR1JPVVBfSURTX18gXHUwMDNlIEJJVChUQ19GR1RfQklUUykpO1xuIFx0QlVJTERfQlVHX09OKF9fTlJfRkdfRklMVEVSX0lEU19fIFx1MDAzZSBCSVQoVENfRkdGX0JJVFMpKTtcbi1cdEJVSUxEX0JVR19PTihfX0hDUlhfRUwyX01BU0sgXHUwMDI2IF9fSENSWF9FTDJfbk1BU0spO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZW5jb2RpbmdfdG9fY2d0KTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnICpjZ3QgPSBcdTAwMjZlbmNvZGluZ190b19jZ3RbaV07XG5AQCAtMjM0NiwxMCAmIzQzOzIzNTYsNiBAQCBpbnQgX19pbml0IHBvcHVsYXRlX252X3RyYXBfY29uZmlnKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChfX0hDUlhfRUwyX1JFUzAgIT0gSENSWF9FTDJfUkVTMClcbi1cdFx0a3ZtX2luZm8oXCYjMzQ7U2FuaXRpc2VkIEhDUl9FTDJfUkVTMCA9ICUwMTZsbHgsIGV4cGVjdGluZyAlMDE2bGx4XFxuXCYjMzQ7LFxuLVx0XHRcdCBfX0hDUlhfRUwyX1JFUzAsIEhDUlhfRUwyX1JFUzApO1xuLVxuIFx0a3ZtX2luZm8oXCYjMzQ7bnY6ICVsZCBjb2Fyc2UgZ3JhaW5lZCB0cmFwIGhhbmRsZXJzXFxuXCYjMzQ7LFxuIFx0XHQgQVJSQVlfU0laRShlbmNvZGluZ190b19jZ3QpKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmhcbmluZGV4IDRiZjYyNGE0OTU5MWRmLi43YjI3Mjk2Yzk0NjA3MCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oXG5AQCAtMTA4LDkgJiM0MzsxMDgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfY3B0cl90cmFwc192aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3RcbiBcdCAqIHdyaXRpbmcgdG8gQ1BUUl9FTDIgdmlhIENQQUNSX0VMMSBjYW4mIzM5O3Qgc2V0IGFueSBvZiBUQ1BBQyBvciBUVEEsXG4gXHQgKiBhcyB0aGV5IGFyZSBSRVMwIGluIHRoZSBndWVzdCYjMzk7cyB2aWV3LiBUbyB3b3JrIGFyb3VuZCBpdCwgdHJhcCB0aGVcbi1cdCAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4mIzM5O3Qgc2V0Li4uXG4mIzQzO1x0ICogc3Vja2VyIHVzaW5nIHRoZSB2ZXJ5IHNhbWUgYml0IGl0IGNhbiYjMzk7dCBzZXQuIEZFQVRfTlYycDEgZml4ZXMgaXQuXG4gXHQgKi9cbi1cdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiBpc19oeXBfY3R4dCh2Y3B1KSlcbiYjNDM7XHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgaXNfaHlwX2N0eHQodmNwdSkpXG4gXHRcdHZhbCB8PSBDUFRSX0VMMl9UQ1BBQztcbiBcbiBcdC8qXG5AQCAtMzI1LDYgJiM0MzszMjYsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGVhY3RpdmF0ZV90cmFwc19tcGFtKHZvaWQpXG4gXHRcdHdyaXRlX3N5c3JlZ19zKE1QQU1IQ1JfSE9TVF9GTEFHUywgU1lTX01QQU1IQ1JfRUwyKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEp1c3QgbGlrZSBmb3IgSENSX0VMMiwgd2UgY2FuJiMzOTt0IGxldCB0aGUgZ3Vlc3QgbWVzcyB3aXRoIHNvbWUgb2YgdGhlXG4mIzQzOyAqIGJhc2ljcyB3ZSByZWx5IG9uIGluIEhDUlhfRUwyLiBIb3dldmVyLCB0aGUgbWFqb3IgZGlmZmVyZW5jZSBpcyB0aGF0XG4mIzQzOyAqIEhDUlhfRUwyIG9ubHkgYWZmZWN0cyBFTDEsIGFuZCBuZXZlciBFTDIgKHN1ZGRlbiBvdXRidXJzdCBvZiBzYW5pdHksIElcbiYjNDM7ICogZ3Vlc3MpLiBTbyBpdCBpcyBhbHdheXMgdGhlIGd1ZXN0IGluZmxpY3RpbmcgaXQgb24gaXRzIG93biBndWVzdHguXG4mIzQzOyAqXG4mIzQzOyAqIFRoaW5ncyB3ZSBkb24mIzM5O3Qgd2FudCB0byBsZXQgdGhlIGd1ZXN0IGNvbnRyb2wgYXJlOlxuJiM0MzsgKlxuJiM0MzsgKiAtIFRNRUE6IFRoYXQmIzM5O3MgZm9yIHVzIHRvIGRlY2lkZSBob3cgYW4gU0VBIGlzIHJvdXRlZCwgbm90IHRoZSBndWVzdC5cbiYjNDM7ICpcbiYjNDM7ICogLSBQVFRXSTogU2ltaWxhcmx5LCBpdCBpcyBmb3IgdXMgdG8gZGVjaWRlIHdoZXRoZXIgUmVkdWNlZCBDb2hlcmVuY3kgZm9yXG4mIzQzOyAqICAgdGhlIFBUVyBpcyBhIHRoaW5nLiBJdCByZWFsbHkgaXNuJiMzOTt0LlxuJiM0MzsgKlxuJiM0MzsgKiAtIEVuSURDUDEyODogV2UgZG9uJiMzOTt0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTlZfSENSWF9HVUVTVF9FWENMVURFXHQoSENSWF9FTDJfVE1FQVx0ICAgIHwgSENSWF9FTDJfUFRUV0kgfCBcXFxuJiM0MztcdFx0XHRcdCBIQ1JYX0VMMl9FbklEQ1AxMjgpXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV9jcHVfY29udGV4dCAqaGN0eHQgPSBob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCk7XG5AQCAtMzUwLDggJiM0MzszNjksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV90cmFwc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR1NjQgaGNyeCA9IHZjcHUtXHUwMDNlYXJjaC5oY3J4X2VsMjtcbiBcdFx0aWYgKGlzX25lc3RlZF9jdHh0KHZjcHUpKSB7XG4gXHRcdFx0dTY0IHZhbCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKTtcbi1cdFx0XHRoY3J4IHw9IHZhbCBcdTAwMjYgX19IQ1JYX0VMMl9NQVNLO1xuLVx0XHRcdGhjcnggXHUwMDI2PSB+KH52YWwgXHUwMDI2IF9fSENSWF9FTDJfbk1BU0spO1xuJiM0MztcdFx0XHRoY3J4IHw9ICh2YWwgXHUwMDI2IH5OVl9IQ1JYX0dVRVNUX0VYQ0xVREUpO1xuJiM0MztcdFx0XHRoY3J4IFx1MDAyNj0gfih+dmFsIFx1MDAyNiB+TlZfSENSWF9HVUVTVF9FWENMVURFKTtcbiBcdFx0fVxuIFxuIFx0XHRjdHh0X3N5c19yZWcoaGN0eHQsIEhDUlhfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX0hDUlhfRUwyKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmhcbmluZGV4IGExN2NiZTc1ODJkZTkwLi5jMzgyODQ4ZDMxOTQ3OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXG5AQCAtMTcyLDYgJiM0MzsxNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3NhdmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXG4gXG4gXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxuIFx0XHRjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSkgPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSMik7XG4mIzQzO1xuJiM0MztcdC8qIFJldHJpZXZlIEwyJiMzOTtzIEhDUl9FTDIsIGFuZCBzYXZlIGl0IGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0aWYgKGlzX25lc3RlZF9udjNfY3R4dChjdHh0X3RvX3ZjcHUoY3R4dCkpKVxuJiM0MztcdFx0Y3R4dF9zeXNfcmVnKGN0eHQsIE5WSENSX0VMMikgPSByZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zeXNyZWdfc2F2ZV9lbDJfcmV0dXJuX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXG5AQCAtMjg1LDYgJiM0MzsyODksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3Jlc3RvcmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQsXG4gXG4gXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxuIFx0XHR3cml0ZV9zeXNyZWdfZWwxKGN0eHRfc3lzX3JlZyhjdHh0LCBTQ1RMUjJfRUwxKSwgU1lTX1NDVExSMik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHVibGlzaCB0aGUgTDIgdmlldyBvZiBIQ1JfRUwyIHRvIHRoZSBIVyBpZiBMMSBpcyB1c2luZyBOVjMuXG4mIzQzO1x0ICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSYjMzk7cyBvd24gVk5DUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfbmVzdGVkX252M19jdHh0KGN0eHRfdG9fdmNwdShjdHh0KSkpXG4mIzQzO1x0XHR3cml0ZV9zeXNyZWdfcyhjdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7XG4gfVxuIFxuIC8qIFJlYWQgdGhlIFZDUFUgc3RhdGUmIzM5O3MgUFNUQVRFLCBidXQgdHJhbnNsYXRlICh2KUVMMiB0byBFTDEuICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbmluZGV4IGJiZTljZWJkM2Q5ZDU3Li5mMTI5ZjIyZjE1NjE4ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbkBAIC03MCw2ICYjNDM7NzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxuIFx0XHRcdGhjciB8PSBIQ1JfTlYxO1xuIFxuJiM0MztcdFx0LyogUHVibGlzaCB0aGUgZ3Vlc3QmIzM5O3MgdmlldyBvZiBIQ1JfRUwyIHRvIHRoZSBIVyAqL1xuJiM0MztcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4mIzQzO1x0XHRcdHdyaXRlX3N5c3JlZ19zKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpLCBTWVNfTlZIQ1JfRUwyKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogTm90aGluZyBpbiBIQ1JfRUwyIHNob3VsZCBpbXBhY3QgcnVubmluZyBpbiBoeXBlcnZpc29yXG4gXHRcdCAqIGNvbnRleHQsIGFwYXJ0IGZyb20gYml0cyB3ZSBoYXZlIGRlZmluZWQgYXMgUkVTeCAoRTJILFxuQEAgLTMzOSw2ICYjNDM7MzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbiBcdHU2NCBlc3IgPSBrdm1fdmNwdV9nZXRfZXNyKHZjcHUpO1xuIFx0dTY0IHNwc3IsIGVsciwgbW9kZTtcbiBcbiYjNDM7XHQvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovXG4mIzQzO1x0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lXG4gXHQgKiBpZiB0aGlzIGlzIGEgVkhFIGd1ZXN0IGh5cGVydmlzb3IgcmV0dXJuaW5nIHRvIGl0cyBvd25cbkBAIC0zNDksOCAmIzQzOzM1OSw4IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbiBcdCAqIFVubGVzcyB0aGUgdHJhcCBoYXMgdG8gYmUgZm9yd2FyZGVkIGZ1cnRoZXIgZG93biB0aGUgbGluZSxcbiBcdCAqIG9mIGNvdXJzZS4uLlxuIFx0ICovXG4tXHRpZiAoKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpIFx1MDAyNiBIQ1JfTlYpIHx8XG4tXHQgICAgKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhGR0lUUl9FTDIpIFx1MDAyNiBIRkdJVFJfRUwyX0VSRVQpKVxuJiM0MztcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSB8fFxuJiM0MztcdCAgICBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSBcdTAwMjYgSEZHSVRSX0VMMl9FUkVUKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRzcHNyID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TUFNSKTtcbkBAIC00NDEsNiAmIzQzOzQ1MSw5IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2NwYWNyX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0dTY0IGVzciA9IGt2bV92Y3B1X2dldF9lc3IodmNwdSk7XG4gXHRpbnQgcnQ7XG4gXG4mIzQzO1x0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRpZiAoIWlzX2h5cF9jdHh0KHZjcHUpIHx8IGVzcl9zeXM2NF90b19zeXNyZWcoZXNyKSAhPSBTWVNfQ1BBQ1JfRUwxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtNTM0LDE5ICYjNDM7NTQ3LDE3IEBAIHN0YXRpYyBjb25zdCBleGl0X2hhbmRsZXJfZm4gaHlwX2V4aXRfaGFuZGxlcnNbXSA9IHtcbiBcdFsweDNGXVx0XHRcdFx0PSBrdm1faHlwX2hhbmRsZV9pbXBkZWYsXG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuJiM0MztzdGF0aWMgdm9pZCBmaXh1cF9udl9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzeW5jaHJvbml6ZV92Y3B1X3BzdGF0ZSh2Y3B1KTtcbi1cbiBcdC8qXG4gXHQgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3XG4gXHQgKiBzbyB0aGF0IHRoZSB1c3VhbCBoZWxwZXJzIHdvcmsgY29ycmVjdGx5LiBUaGlzIGVuZm9yY2VzIG91clxuIFx0ICogaW52YXJpYW50IHRoYXQgdGhlIGd1ZXN0JiMzOTtzIEhZUCBjb250ZXh0IHN0YXR1cyBpcyBwcmVzZXJ2ZWRcbiBcdCAqIGFjcm9zcyBhIHJ1bi5cbiBcdCAqL1xuLVx0aWYgKHZjcHVfaGFzX252KHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHVubGlrZWx5KGhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkpKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkpKSB7XG4gXHRcdHU2NCBtb2RlID0gKnZjcHVfY3Bzcih2Y3B1KSBcdTAwMjYgKFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XG4mIzQzO1x0XHR1NjQgaGNyO1xuIFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBQU1JfTU9ERV9FTDF0OlxuQEAgLTU1OSwxMSAmIzQzOzU3MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFxuIFx0XHQqdmNwdV9jcHNyKHZjcHUpIFx1MDAyNj0gfihQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpO1xuIFx0XHQqdmNwdV9jcHNyKHZjcHUpIHw9IG1vZGU7XG4mIzQzO1xuJiM0MztcdFx0LyogUHVibGlzaCB0aGUgbGF0ZXN0IEhDUl9FTDIgdG8gdGhlIGVtdWxhdGlvbiAqL1xuJiM0MztcdFx0aGNyID0gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgICAgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkgP1xuJiM0MztcdFx0XHRyZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpIDpcbiYjNDM7XHRcdFx0X192Y3B1X3N5c19yZWcodmNwdSwgTlZIQ1JfRUwyKTtcbiYjNDM7XG4mIzQzO1x0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTtcbiBcdH1cbiBcbiBcdC8qIEFwcGx5IGV4dHJlbWUgcGFyYW5vaWEhICovXG4tXHRCVUdfT04odmNwdV9oYXNfbnYodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcbiYjNDM7XHRCVUdfT04oISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3luY2hyb25pemVfdmNwdV9wc3RhdGUodmNwdSk7XG4mIzQzO1xuJiM0MztcdGlmICh2Y3B1X2hhc19udih2Y3B1KSlcbiYjNDM7XHRcdGZpeHVwX252X2d1ZXN0X2V4aXQodmNwdSk7XG4gXG4gXHRyZXR1cm4gX19maXh1cF9ndWVzdF9leGl0KHZjcHUsIGV4aXRfY29kZSwgaHlwX2V4aXRfaGFuZGxlcnMpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuaW5kZXggYmU2ODViNjNlOGNmMjYuLjBjNGVmMWNlMzJhZTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuQEAgLTQyLDEwICYjNDM7NDIsMTIgQEAgc3RhdGljIHZvaWQgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dTY0IHZhbDtcbiBcbiBcdFx0Lypcbi1cdFx0ICogV2UgZG9uJiMzOTt0IHNhdmUgQ1BUUl9FTDIsIGFzIGFjY2Vzc2VzIHRvIENQQUNSX0VMMVxuLVx0XHQgKiBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlIGluLW1lbW9yeVxuLVx0XHQgKiBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXG4mIzQzO1x0XHQgKiBXaXRob3V0IEZFQVRfTlYycDEsIHdlIGRvbiYjMzk7dCBzYXZlIENQVFJfRUwyLCBhcyBhY2Nlc3Nlc1xuJiM0MztcdFx0ICogdG8gQ1BBQ1JfRUwxIGFyZSBhbHdheXMgdHJhcHBlZCwgZW5zdXJpbmcgdGhhdCB0aGVcbiYjNDM7XHRcdCAqIGluLW1lbW9yeSBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbiYjNDM7XHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIENQVFJfRUwyLCByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKSk7XG4gXHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIsXHQgcmVhZF9zeXNyZWdfZWwxKFNZU19TQ1RMUikpO1xuIFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgVFRCUjBfRUwyLFx0IHJlYWRfc3lzcmVnX2VsMShTWVNfVFRCUjApKTtcbiBcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFRUQlIxX0VMMixcdCByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIxKSk7XG5AQCAtNjcsMTEgJiM0Mzs2OSwxOCBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBUaGUgRUwxIHZpZXcgb2YgQ05US0NUTF9FTDEgaGFzIGEgYnVuY2ggb2YgUkVTMCBiaXRzIHdoZXJlXG4gXHRcdCAqIHRoZSBpbnRlcmVzdGluZyBDTlRIQ1RMX0VMMiBiaXRzIGxpdmUuIFNvIHByZXNlcnZlIHRoZXNlXG4gXHRcdCAqIGJpdHMgd2hlbiByZWFkaW5nIGJhY2sgdGhlIGd1ZXN0LXZpc2libGUgdmFsdWUuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogV2hpbGUgTlYycDEgZml4ZXMgc29tZSBvZiB0aGF0LCBpdCBtYWtlcyBDTlRIQ1RMX0VMMi5FQ1ZcbiYjNDM7XHRcdCAqIGV2ZW4gbW9yZSBicm9rZW4gdGhhbiBpdCBhbHJlYWR5IHdhcyB3aXRoIE5WMi5cbiBcdFx0ICovXG4gXHRcdHZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7XG4tXHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcbiYjNDM7XHRcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKSB7XG4mIzQzO1x0XHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbiYjNDM7XHRcdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbiYjNDM7XHRcdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBTUF9FTDIsXHQgcmVhZF9zeXNyZWcoc3BfZWwxKSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggZGZiOTZlZGJkYzQzYzYuLjY0YzhmYjgyZmFkZjZkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5AQCAtMTcyOCw3ICYjNDM7MTcyOCw3IEBAIHU2NCBsaW1pdF9udl9pZF9yZWcoc3RydWN0IGt2bSAqa3ZtLCB1MzIgcmVnLCB1NjQgdmFsKVxuIFx0XHQgKiBZb3UgZ2V0IEVJVEhFUlxuIFx0XHQgKlxuIFx0XHQgKiAtIEZFQVRfVkhFIHdpdGhvdXQgRkVBVF9FMkgwXG4tXHRcdCAqIC0gRkVBVF9OViBsaW1pdGVkIHRvIEZFQVRfTlYyXG4mIzQzO1x0XHQgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMihwMSkvTlYzXG4gXHRcdCAqIC0gSENSX0VMMi5OVjEgYmVpbmcgUkVTMFxuIFx0XHQgKlxuIFx0XHQgKiBPUlxuQEAgLTE3NDAsNyAmIzQzOzE3NDAsMTMgQEAgdTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpXG4gXHRcdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMl9FMkgwLCBrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xuIFx0XHRcdHZhbCA9IDA7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsID0gU1lTX0ZJRUxEX1BSRVBfRU5VTShJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSk7XG4mIzQzO1x0XHRcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpKVxuJiM0MztcdFx0XHRcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxuJiM0MztcdFx0XHRcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyUDEpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0dmFsID0gU1lTX0ZJRUxEX1BSRVBfRU5VTShJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSk7XG4mIzQzO1x0XHRcdHZhbCBcdTAwMjY9IH5JRF9BQTY0TU1GUjRfRUwxX0UySDA7XG4gXHRcdFx0dmFsIHw9IFNZU19GSUVMRF9QUkVQX0VOVU0oSURfQUE2NE1NRlI0X0VMMSwgRTJIMCwgTklfTlYxKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbkBAIC0xODI2LDYgJiM0MzsxODMyLDEwIEBAIGludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JfRUwyKTtcbiBcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JfRUwyLCByZXN4KTtcbiBcbiYjNDM7XHQvKiBOVkhDUl9FTDIgKi9cbiYjNDM7XHRyZXN4ID0gZ2V0X3JlZ19maXhlZF9iaXRzKGt2bSwgTlZIQ1JfRUwyKTtcbiYjNDM7XHRzZXRfc3lzcmVnX21hc2tzKGt2bSwgTlZIQ1JfRUwyLCByZXN4KTtcbiYjNDM7XG4gXHQvKiBIQ1JYX0VMMiAqL1xuIFx0cmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIEhDUlhfRUwyKTtcbiBcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JYX0VMMiwgcmVzeCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbmluZGV4IDVkNWM1NzlkNDU3OTAyLi4wYWViMmU3MzZmZGUzNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbkBAIC0xODMsOCAmIzQzOzE4Myw2IEBAIHN0YXRpYyB2b2lkIGxvY2F0ZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdmNwdV9zeXNyZWcgcmVnLFxuIFx0c3dpdGNoIChyZWcpIHtcbiBcdFx0TUFQUEVEX0VMMl9TWVNSRUcoU0NUTFJfRUwyLCAgIFNDVExSX0VMMSxcbiBcdFx0XHRcdCAgdHJhbnNsYXRlX3NjdGxyX2VsMl90b19zY3Rscl9lbDFcdCAgICAgKTtcbi1cdFx0TUFQUEVEX0VMMl9TWVNSRUcoQ1BUUl9FTDIsICAgIENQQUNSX0VMMSxcbi1cdFx0XHRcdCAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMVx0ICAgICApO1xuIFx0XHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMF9FTDIsICAgVFRCUjBfRUwxLFxuIFx0XHRcdFx0ICB0cmFuc2xhdGVfdHRicjBfZWwyX3RvX3R0YnIwX2VsMVx0ICAgICApO1xuIFx0XHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMV9FTDIsICAgVFRCUjFfRUwxLCAgIE5VTExcdCAgICAgKTtcbkBAIC0yMTAsNiAmIzQzOzIwOCwzMyBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcbiBcdFx0bG9jLVx1MDAzZWxvYyA9ICgoaXNfaHlwX2N0eHQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cbiBcdFx0XHQgICAgU1JfTE9DX1NQRUNJQUwgOiBTUl9MT0NfTUVNT1JZKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBDUFRSX0VMMjpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBDUFRSX0VMMiBpcyBqdXN0IGFzIHNwZWNpYWwsIGFuZCBuZWVkcyBhIGNlcnRhaW4gYW1vdW50XG4mIzQzO1x0XHQgKiBvZiBoYW5kaG9sZGluZy4gSXQgYWx3YXlzIGxpdmVzIGluIG1lbW9yeSwgZHVlIHRvIGJlaW5nXG4mIzQzO1x0XHQgKiBoZWF2aWx5IHRyYXBwZWQgdGhhbmtzIHRvIENQQUNSX0VMMS5UQ1BBQyBiZWluZyBSRVMwLlxuJiM0MztcdFx0ICogRkVBVF9OVjJwMSBmaXhlcyB0aGlzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb2NhdGVfbWFwcGVkX2VsMl9yZWdpc3Rlcih2Y3B1LCBDUFRSX0VMMiwgQ1BBQ1JfRUwxLFxuJiM0MztcdFx0XHRcdFx0ICAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMSxcbiYjNDM7XHRcdFx0XHRcdCAgIGxvYyk7XG4mIzQzO1x0XHRpZiAoaXNfaHlwX2N0eHQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4mIzQzO1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfU1BFQ0lBTDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTlZIQ1JfRUwyOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFllcywgTlZIQ1JfRUwyIG1hcHMgdG8gaXRzZWxmIHdoZW4gbG9hZGVkIGluIG5lc3RlZFxuJiM0MztcdFx0ICogY29udGV4dC4gSWYgeW91IGZlZWwgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIGRvdWJsZVxuJiM0MztcdFx0ICogYmFja2luZyBvbiBpdHNlbGYgdXBzaWRlIGRvd24sIHlvdSYjMzk7cmUgbm90IGFsb25lLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoIWt2bV9oYXNfbnYzKHZjcHUtXHUwMDNla3ZtKSk7XG4mIzQzO1x0XHRpZiAoaXNfaHlwX2N0eHQodmNwdSkpIHtcbiYjNDM7XHRcdFx0bG9jLVx1MDAzZWxvYyA9IFNSX0xPQ19NRU1PUlk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRsb2MtXHUwMDNlbG9jID0gU1JfTE9DX0xPQURFRCB8IFNSX0xPQ19NQVBQRUQ7XG4mIzQzO1x0XHRcdGxvYy1cdTAwM2VtYXBfcmVnID0gTlZIQ1JfRUwyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRsb2MtXHUwMDNlbG9jID0gbG9jYXRlX2RpcmVjdF9yZWdpc3Rlcih2Y3B1LCByZWcpO1xuIFx0fVxuQEAgLTI0OSw2ICYjNDM7Mjc0LDcgQEAgc3RhdGljIHU2NCByZWFkX3NyX2Zyb21fY3B1KGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuIFx0Y2FzZSBEQUNSMzJfRUwyOlx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfREFDUjMyX0VMMik7XHRicmVhaztcbiBcdGNhc2UgSUZTUjMyX0VMMjpcdHZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0lGU1IzMl9FTDIpO1x0YnJlYWs7XG4gXHRjYXNlIERCR1ZDUjMyX0VMMjpcdHZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0RCR1ZDUjMyX0VMMik7XHRicmVhaztcbiYjNDM7XHRjYXNlIE5WSENSX0VMMjpcdFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKTtcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0fVxuIFxuQEAgLTI4Nyw2ICYjNDM7MzEzLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVfc3JfdG9fY3B1KGVudW0gdmNwdV9zeXNyZWcgcmVnLCB1NjQgdmFsKVxuIFx0Y2FzZSBEQUNSMzJfRUwyOlx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfREFDUjMyX0VMMik7XHRicmVhaztcbiBcdGNhc2UgSUZTUjMyX0VMMjpcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0lGU1IzMl9FTDIpO1x0YnJlYWs7XG4gXHRjYXNlIERCR1ZDUjMyX0VMMjpcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0RCR1ZDUjMyX0VMMik7XHRicmVhaztcbiYjNDM7XHRjYXNlIE5WSENSX0VMMjpcdFx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfTlZIQ1JfRUwyKTtcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0fVxuIH1cbkBAIC0zMTEsOSAmIzQzOzMzOCwxNiBAQCB1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0c3dpdGNoIChyZWcpIHtcbiBcdFx0Y2FzZSBDTlRIQ1RMX0VMMjpcbiBcdFx0XHR2YWwgPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpO1xuLVx0XHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0XHR2YWwgfD0gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSBcdTAwMjYgfkNOVEtDVExfVkFMSURfQklUUztcbiYjNDM7XHRcdFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcbiYjNDM7XHRcdFx0XHR2YWwgXHUwMDI2PSBDTlRLQ1RMX1ZBTElEX0JJVFM7XG4mIzQzO1x0XHRcdFx0dmFsIHw9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgXHUwMDI2IH5DTlRLQ1RMX1ZBTElEX0JJVFM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRyZXR1cm4gdmFsO1xuJiM0MztcdFx0Y2FzZSBDUFRSX0VMMjpcbiYjNDM7XHRcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmVhZF9zeXNyZWdfZWwxKFNZU19DUEFDUik7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXR1cm4gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKTtcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdH1cbkBAIC0zNTksNiAmIzQzOzM5Myw5IEBAIHZvaWQgdmNwdV93cml0ZV9zeXNfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXG4gXHRcdFx0ICovXG4gXHRcdFx0d3JpdGVfc3lzcmVnX2VsMSh2YWwsIFNZU19DTlRLQ1RMKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQ1BUUl9FTDI6XG4mIzQzO1x0XHRcdHdyaXRlX3N5c3JlZ19lbDEodmFsLCBTWVNfQ1BBQ1IpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdH1cbkBAIC0yODQwLDYgJiM0MzsyODc3LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm5jcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZXR1cm4gUkVHX0hJRERFTjtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZoY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZWwyX3Zpc2liaWxpdHkodmNwdSwgcmQpID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGt2bV9oYXNfZmVhdCh2Y3B1LVx1MDAzZWt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUkVHX0hJRERFTjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdW5zaWduZWQgaW50IHNjdGxyMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxuIHtcbkBAIC0zNzUzLDYgJiM0MzszODAwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0XHRcdCBzdmVfZWwyX3Zpc2liaWxpdHkpLFxuIFxuIFx0RUwyX1JFR19WTkNSKEhDUlhfRUwyLCByZXNldF92YWwsIDApLFxuJiM0MztcdEVMMl9SRUdfRklMVEVSRUQoTlZIQ1JfRUwyLCB1bmRlZl9hY2Nlc3MsIHJlc2V0X3ZhbCwgMCxcbiYjNDM7XHRcdFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcbiBcbiBcdEVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXG4gXHRFTDJfUkVHKFRUQlIxX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIDApLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjdlMDQxNDUwOWU4OWE4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC01MSw2ICYjNDM7NTEsOCBAQCBIQVNfTFM2NF9WXG4gSEFTX0xTVUlcbiBIQVNfTU9QU1xuIEhBU19ORVNURURfVklSVFxuJiM0MztIQVNfTlYyUDFcbiYjNDM7SEFTX05WM1xuIEhBU19CQk1MMl9OT0FCT1JUXG4gSEFTX1BBTlxuIEhBU19QTVVWM1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5pbmRleCA4Njg2MGFiNjcyZGM3OC4uZDdmN2NlYjc2OGZlNWMgMTAwNzU1XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5AQCAtMjI4LDcgJiM0MzsyMjgsNyBAQCAkMSA9PSBcJiMzNDtFbmRTeXNyZWdcJiMzNDsgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcJiMzNDtTeXNyZWdcJiMzNDsge1xuIH1cbiBcbiAjIEN1cnJlbnRseSB0aGlzIGlzIGVmZmVjdGl2ZXkgYSBjb21tZW50LCBpbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gZW1pdFxuLSMgZGVmaW5lcyBmb3IgdGhlIGZpZWxkcy5cbiYjNDM7IyBkZWZpbmVzIGZvciB0aGUgZmllbGRzLiBcJiMzNDtNYXBwaW5nXCYjMzQ7IGRvZXMgZW1pdCB0aGUgUkVTeC9VTktOIGRlZmluaXRpb25zLlxuICgkMSA9PSBcJiMzNDtGaWVsZHNcJiMzNDsgfHwgJDEgPT0gXCYjMzQ7TWFwcGluZ1wmIzM0OykgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcJiMzNDtTeXNyZWdcJiMzNDsge1xuIFx0ZXhwZWN0X2ZpZWxkcygyKVxuIFxuQEAgLTIzOSw5ICYjNDM7MjM5LDE1IEBAICQxID09IFwmIzM0O0VuZFN5c3JlZ1wmIzM0OyBcdTAwMjZcdTAwMjYgYmxvY2tfY3VycmVudCgpID09IFwmIzM0O1N5c3JlZ1wmIzM0OyB7XG4gXHRwcmludCBcJiMzNDtcJiMzNDtcbiBcbiBcdG5leHRfYml0ID0gLTFcbi1cdHJlczAgPSBudWxsXG4tXHRyZXMxID0gbnVsbFxuLVx0dW5rbiA9IG51bGxcbiYjNDM7XHRpZiAoJDEgPT0gXCYjMzQ7TWFwcGluZ1wmIzM0Oykge1xuJiM0MztcdFx0cmVzMCA9ICQyIFwmIzM0O19SRVMwXCYjMzQ7XG4mIzQzO1x0XHRyZXMxID0gJDIgXCYjMzQ7X1JFUzFcJiMzNDtcbiYjNDM7XHRcdHVua24gPSAkMiBcJiMzNDtfVU5LTlwmIzM0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXMwID0gbnVsbFxuJiM0MztcdFx0cmVzMSA9IG51bGxcbiYjNDM7XHRcdHVua24gPSBudWxsXG4mIzQzO1x0fVxuIFxuIFx0bmV4dFxuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG5pbmRleCBiYzE3ODhiMTY2MmI3Ni4uYWZlOTMzNzg1MWEyZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbkBAIC0yMzg2LDE3ICYjNDM7MjM4Niw0MCBAQCBFbmRFbnVtXG4gRW5kU3lzcmVnXG4gXG4gU3lzcmVnXHRJRF9BQTY0TU1GUjRfRUwxXHQzXHQwXHQwXHQ3XHQ0XG4tUmVzMFx0NjM6NDhcbiYjNDM7VW5zaWduZWRFbnVtXHQ2Mzo2MFx0TVRFRkdUXG4mIzQzO1x0MGIwMDAwXHROSVxuJiM0MztcdDBiMDAwMVx0SU1QXG4mIzQzO0VuZEVudW1cbiYjNDM7VW5zaWduZWRFbnVtXHQ1OTo1Nlx0U0NSWFxuJiM0MztcdDBiMDAwMFx0TklcbiYjNDM7XHQwYjAwMDFcdElNUFxuJiM0MztFbmRFbnVtXG4mIzQzO1Vuc2lnbmVkRW51bVx0NTU6NTJcdFRFVlxuJiM0MztcdDBiMDAwMFx0TklcbiYjNDM7XHQwYjAwMDFcdElNUFxuJiM0MztFbmRFbnVtXG4mIzQzO1Vuc2lnbmVkRW51bVx0NTE6NDhcdFRQU1xuJiM0MztcdDBiMDAwMFx0VkFMXzAwMDBcbiYjNDM7XHQwYjAwMDFcdFZBTF8wMDAxXG4mIzQzO1x0MGIwMDEwXHRWQUxfMDAxMFxuJiM0MztFbmRFbnVtXG4gVW5zaWduZWRFbnVtXHQ0Nzo0NFx0U1JNQVNLXG4gXHQwYjAwMDBcdE5JXG4gXHQwYjAwMDFcdElNUFxuJiM0MztcdDBiMDAxMFx0U1JNQVNLMlxuJiM0MztFbmRFbnVtXG4mIzQzO1Vuc2lnbmVkRW51bVx0NDM6NDBcdFRMQklEXG4mIzQzO1x0MGIwMDAwXHROSVxuJiM0MztcdDBiMDAwMVx0SU1QXG4gRW5kRW51bVxuLVJlczBcdDQzOjQwXG4gVW5zaWduZWRFbnVtXHQzOTozNlx0RTNEU0VcbiBcdDBiMDAwMFx0TklcbiBcdDBiMDAwMVx0SU1QXG4gRW5kRW51bVxuLVJlczBcdDM1OjMyXG4mIzQzO1Vuc2lnbmVkRW51bVx0MzU6MzJcdEVBRVNSXG4mIzQzO1x0MGIwMDAwXHROSVxuJiM0MztcdDBiMDAwMVx0SU1QXG4mIzQzO0VuZEVudW1cbiBVbnNpZ25lZEVudW1cdDMxOjI4XHRSTUVHRElcbiBcdDBiMDAwMFx0TklcbiBcdDBiMDAwMVx0SU1QXG5AQCAtMjQxMCw2ICYjNDM7MjQzMyw3IEBAIFVuc2lnbmVkRW51bVx0MjM6MjBcdE5WX2ZyYWNcbiBcdDBiMDAwMFx0TlZfTlYyXG4gXHQwYjAwMDFcdE5WMl9PTkxZXG4gXHQwYjAwMTBcdE5WMlAxXG4mIzQzO1x0MGIwMDExXHROVjNcbiBFbmRFbnVtXG4gVW5zaWduZWRFbnVtXHQxOToxNlx0RkdXVEUzXG4gXHQwYjAwMDBcdE5JXG5AQCAtNDI0Miw2ICYjNDM7NDI2Niw5IEBAIEZpZWxkXHQxXHRFMlRSRVxuIEZpZWxkXHQwXHRFMEhUUkVcbiBFbmRTeXNyZWdcbiBcbiYjNDM7U3lzcmVnXHROVkhDUl9FTDJcdDNcdDRcdDFcdDVcdDBcbiYjNDM7TWFwcGluZ1x0SENSX0VMMlxuJiM0MztFbmRTeXNyZWdcbiBcbiBTeXNyZWcgSERGR1JUUjJfRUwyXHQzXHQ0XHQzXHQxXHQwXG4gUmVzMFx0NjM6MjVcbkBAIC00NTIxLDcgJiM0Mzs0NTQ4LDE0IEBAIEZpZWxkc1x0WkNSX0VMeFxuIEVuZFN5c3JlZ1xuIFxuIFN5c3JlZ1x0SENSWF9FTDJcdDNcdDRcdDFcdDJcdDJcbi1SZXMwXHQ2MzoyNVxuJiM0MztSZXMwXHQ2MzozNVxuJiM0MztGaWVsZFx0MzRcdE5WblRUTEJPU1xuJiM0MztGaWVsZFx0MzNcdE5WblRUTEJJU1xuJiM0MztGaWVsZFx0MzJcdE5WblRUTEJcbiYjNDM7UmVzMFx0MzE6MjhcbiYjNDM7RmllbGRcdDI3XHROVlRHRVxuJiM0MztGaWVsZFx0MjZcdFNSTUFTS0VuXG4mIzQzO1JlczBcdDI1XG4gRmllbGRcdDI0XHRQQUNNRW5cbiBGaWVsZFx0MjNcdEVuRlBNXG4gRmllbGRcdDIyXHRHQ1NFblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pbml0X252X3N5c3JlZ3MmIzM0OywKICAgICYjMzQ7bGltaXRfbnZfaWRfcmVnJiMzNDssCiAgICAmIzM0O252aGNyX2VsMl92aXNpYmlsaXR5JiMzNDssCiAgICAmIzM0O2dldF9yZWdfZml4ZWRfYml0cyYjMzQ7LAogICAgJiMzNDtmaXh1cF9udl9ndWVzdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOGRhNjJhM2NlZGJmODhmZjNlNjhhYWM5N2JkMWQwYmE5YTdkYjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxODoxNjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggYTU3ODcwZmE5NmRiNWIuLmE0MjY4M2FmNzlmYjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtOTY4LDYgJiM0Mzs5NjgsNyBAQCBzdHJ1Y3QgYXJtNjRfZnRyX3JlZyAqZ2V0X2FybTY0X2Z0cl9yZWcodTMyIHN5c19pZCk7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnI0X292ZXJyaWRlOwogZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHBmcjBfb3ZlcnJpZGU7CiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMV9vdmVycmlkZTsKIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjR6ZnIwX292ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaAppbmRleCAzZjkyMzNiNWExMzA4MS4uZjZjZDg1MTA0Nzk0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oCkBAIC0yODcsMjEgJiM0MzsyODcsNiBAQAogCQkJCSBHRU5NQVNLKDE5LCAxOCkgfAlcCiAJCQkJIEdFTk1BU0soMTUsIDApKQogCi0vKgotICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dAotICogYXQgdGhpcyBwb2ludCBpbiB0aW1lLiBJdCBkb2VzbiYjMzk7dCBtZWFuIHRoYXQgd2UgYWN0dWFsbHkgKmhhbmRsZSoKLSAqIHRoZW0sIGJ1dCB0aGF0IGF0IGxlYXN0IHRob3NlIHRoYXQgYXJlIG5vdCBhZHZlcnRpc2VkIHRvIGEgZ3Vlc3QKLSAqIHdpbGwgYmUgUkVTMCBmb3IgdGhhdCBndWVzdC4KLSAqLwotI2RlZmluZSBfX0hDUlhfRUwyX01BU0sJCShCSVRfVUxMKDYpKQotI2RlZmluZSBfX0hDUlhfRUwyX25NQVNLCShHRU5NQVNLX1VMTCgyNCwgMTQpIHwgXAotCQkJCSBHRU5NQVNLX1VMTCgxMSwgNykgIHwgXAotCQkJCSBHRU5NQVNLX1VMTCg1LCAwKSkKLSNkZWZpbmUgX19IQ1JYX0VMMl9SRVMwCQl+KF9fSENSWF9FTDJfbk1BU0sgfCBfX0hDUlhfRUwyX01BU0spCi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMQkJfihfX0hDUlhfRUwyX25NQVNLIHwgXAotCQkJCSAgX19IQ1JYX0VMMl9NQVNLICB8IFwKLQkJCQkgIF9fSENSWF9FTDJfUkVTMCkKLQogLyogSHlwIFByZWZldGNoIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKEhQRkFSL0hERkFSKSAqLwogI2RlZmluZSBIUEZBUl9NQVNLCSh+VUwoMHhmKSkKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKaW5kZXggNWJmM2Q3ZTFkOTJjNzcuLmQ2ZjQzMmIxNTU4ZjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC0yNjYsNiAmIzQzOzI2NiwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdnNlcnJvcl9zdGF0ZV9pc19uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICAoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpICZhbXA7IEhDUlhfRUwyX1RNRUEpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbnYyKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpICZhbXA7JmFtcDsKJiM0MzsJCWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSAmYW1wOyZhbXA7CiYjNDM7CQljcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpICZhbXA7JmFtcDsKJiM0MzsJCWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfbmVzdGVkX252M19jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoaGFzX3ZoZSgpICZhbXA7JmFtcDsga3ZtX2hhc19udjModmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7IGlzX25lc3RlZF9jdHh0KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCShfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSAmYW1wOyBIQ1JfRUwyX05WKSAmYW1wOyZhbXA7CiYjNDM7CQkoX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpICZhbXA7IEhDUlhfRUwyX05WVEdFKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFRoZSBsYXlvdXQgb2YgU1BTUiBmb3IgYW4gQUFyY2gzMiBzdGF0ZSBpcyBkaWZmZXJlbnQgd2hlbiBvYnNlcnZlZCBmcm9tIGFuCiAgKiBBQXJjaDY0IFNQU1JfRUx4IG9yIGFuIEFBcmNoMzIgU1BTUl8qLiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgQUFyY2gzMgpAQCAtNjE3LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2luY3JfcGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICovCiBzdGF0aWMgaW5saW5lIHU2NCB2Y3B1X3Nhbml0aXNlZF9jcHRyX2VsMihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdTY0IGNwdHIgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7CiYjNDM7CXU2NCBjcHRyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgQ1BUUl9FTDIpOwogCiAJaWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKQogCQljcHRyID0gdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMShjcHRyKTsKQEAgLTY4Niw2ICYjNDM7NzA2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X3NldF9oY3J4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCQlpZiAoa3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NElTQVIxX0VMMSwgTFM2NCwgTFM2NF9WKSkKIAkJCXZjcHUtJmd0O2FyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfRW5BU1I7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogTlYzIGlzIGEgaG9zdC1zcGVjaWZpYyBleHRlbnNpb24sIGFuZCB3ZSBhbHdheXMgdXNlIGl0CiYjNDM7CQkgKiB3aGVuIHByZXNlbnQgYW5kIHRoYXQgdGhlIGd1ZXN0IHVzZXMgTlYuIEl0IG1heSBiZSBiZQomIzQzOwkJICogaGlkZGVuIGZyb20gdGhlIGd1ZXN0IHRob3VnaC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZjcHVfaGFzX252KHZjcHUpICZhbXA7JmFtcDsgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkgewomIzQzOwkJCXZjcHUtJmd0O2FyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfTlZUR0U7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBJZiB0aGUgZ3Vlc3QgaXMgTlYyLWNhcGFibGUsIHRoZW4gd2UgbmVlZCB0byBzZWUKJiM0MzsJCQkgKiBhbGwgdGhlIFRMQklzLCBhcyBjb25maWd1cmVkIGluIEhDUl9FTDIuCiYjNDM7CQkJICogT3RoZXJ3aXNlLCByZWxheCB0aGUgVExCSSB0cmFwcyB0byBvbmx5IFRHRT0wLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgha3ZtX2hhc19udjIodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQkJdmNwdS0mZ3Q7YXJjaC5oY3J4X2VsMiB8PSAoSENSWF9FTDJfTlZuVFRMQiAgfAomIzQzOwkJCQkJCQlIQ1JYX0VMMl9OVm5UVExCSVMpOwomIzQzOwkJfQogCX0KIH0KICNlbmRpZiAvKiBfX0FSTTY0X0tWTV9FTVVMQVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGJhZTJjNGY5MmVmNWMwLi4yNjQ4YzhhNzE3YmEwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNTQzLDYgJiM0Mzs1NDMsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHsKIAlNRENSX0VMMiwJLyogTW9uaXRvciBEZWJ1ZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChFTDIpICovCiAJQ05USENUTF9FTDIsCS8qIENvdW50ZXItdGltZXIgSHlwZXJ2aXNvciBDb250cm9sIHJlZ2lzdGVyICovCiAJWkNSX0VMMiwJLyogU1ZFIENvbnRyb2wgUmVnaXN0ZXIgKEVMMikgKi8KJiM0MzsJSENSX0VMMiwJLyogSHlwZXJ2aXNvciBDb250cm9sIFJlZ2lzdGVyICovCiAKIAkvKiBBbnkgVk5DUi1jYXBhYmxlIHJlZyBnb2VzIGFmdGVyIHRoaXMgcG9pbnQgKi8KIAlNQVJLRVIoX19WTkNSX1NUQVJUX18pLApAQCAtNTcxLDcgJiM0Mzs1NzIsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHsKIAlWTkNSKFRGU1JfRUwxKSwJLyogVGFnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAoRUwxKSAqLwogCVZOQ1IoVlBJRFJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBQcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi8KIAlWTkNSKFZNUElEUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIE11bHRpcHJvY2Vzc29yIElEIFJlZ2lzdGVyICovCi0JVk5DUihIQ1JfRUwyKSwJLyogSHlwZXJ2aXNvciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiYjNDM7CVZOQ1IoTlZIQ1JfRUwyKSwvKiBOViBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KIAlWTkNSKEhTVFJfRUwyKSwJLyogSHlwZXJ2aXNvciBTeXN0ZW0gVHJhcCBSZWdpc3RlciAqLwogCVZOQ1IoVlRUQlJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBUcmFuc2xhdGlvbiBUYWJsZSBCYXNlIFJlZ2lzdGVyICovCiAJVk5DUihWVENSX0VMMiksCS8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oCmluZGV4IDE0MzY2ZDM1Y2U4MmYwLi45ZThhNDlmYThiNjM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bmNyX21hcHBpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oCkBAIC0xMSw3ICYjNDM7MTEsNyBAQAogI2RlZmluZSBWTkNSX1ZUQ1JfRUwyICAgICAgICAgICAweDA0MAogI2RlZmluZSBWTkNSX1ZNUElEUl9FTDIgICAgICAgICAweDA1MAogI2RlZmluZSBWTkNSX0NOVFZPRkZfRUwyICAgICAgICAweDA2MAotI2RlZmluZSBWTkNSX0hDUl9FTDIgICAgICAgICAgICAweDA3OAomIzQzOyNkZWZpbmUgVk5DUl9OVkhDUl9FTDIgICAgICAgICAgMHgwNzgKICNkZWZpbmUgVk5DUl9IU1RSX0VMMiAgICAgICAgICAgMHgwODAKICNkZWZpbmUgVk5DUl9WUElEUl9FTDIgICAgICAgICAgMHgwODgKICNkZWZpbmUgVk5DUl9UUElEUl9FTDIgICAgICAgICAgMHgwOTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwppbmRleCA5YTIyZGYwYzUxMjBmMy4uMTRmYmZhOGU2YjdiNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKQEAgLTc4NSw2ICYjNDM7Nzg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfcmF6W10gPSB7CiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnIwX292ZXJyaWRlOwogc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyMV9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7CiYjNDM7c3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyNF9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMF9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMV9vdmVycmlkZTsKIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0emZyMF9vdmVycmlkZTsKQEAgLTg1OCw3ICYjNDM7ODU5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBfX2Z0cl9yZWdfZW50cnkgewogCUFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSMl9FTDEsIGZ0cl9pZF9hYTY0bW1mcjIsCiAJCQkgICAgICAgJmFtcDtpZF9hYTY0bW1mcjJfb3ZlcnJpZGUpLAogCUFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSM19FTDEsIGZ0cl9pZF9hYTY0bW1mcjMpLAotCUFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQpLAomIzQzOwlBUk02NF9GVFJfUkVHX09WRVJSSURFKFNZU19JRF9BQTY0TU1GUjRfRUwxLCBmdHJfaWRfYWE2NG1tZnI0LAomIzQzOwkJCSAgICAgICAmYW1wO2lkX2FhNjRtbWZyNF9vdmVycmlkZSksCiAKIAkvKiBPcDEgPSAwLCBDUm4gPSAxMCwgQ1JtID0gNCAqLwogCUFSTTY0X0ZUUl9SRUcoU1lTX01QQU1JRFJfRUwxLCBmdHJfbXBhbWlkciksCkBAIC0yNjIwLDYgJiM0MzsyNjIyLDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQkJeyAvKiBTZW50aW5lbCAqLyB9CiAJCX0sCiAJfSwKJiM0MzsJewomIzQzOwkJLmRlc2MgPSAmIzM0O0ZFQVRfTlYycDEmIzM0OywKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX05WMlAxLAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsCiYjNDM7CQkubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLAomIzQzOwkJQVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMlAxKQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuZGVzYyA9ICYjMzQ7RkVBVF9OVjMmIzM0OywKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX05WMywKJiM0MzsJCS50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLAomIzQzOwkJLm1hdGNoZXMgPSBoYXNfY3B1aWRfZmVhdHVyZSwKJiM0MzsJCUFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpCiYjNDM7CX0sCiAJewogCQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU18zMkJJVF9FTDBfRE9fTk9UX1VTRSwKIAkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmggYi9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmgKaW5kZXggZDRjN2Q0NWFlNmJjODMuLmQxNWMyY2IxYjBmMjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oCkBAIC01MSw2ICYjNDM7NTEsNyBAQCBQSV9FWFBPUlRfU1lNKGlkX2FhNjRpc2FyMl9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMV9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMl9vdmVycmlkZSk7CiYjNDM7UElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjRfb3ZlcnJpZGUpOwogUElfRVhQT1JUX1NZTShpZF9hYTY0cGZyMF9vdmVycmlkZSk7CiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRwZnIxX292ZXJyaWRlKTsKIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHNtZnIwX292ZXJyaWRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3BpL2lkcmVnLW92ZXJyaWRlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jCmluZGV4IGJjNTdiMjkwZTVlN2JhLi40ZTQ3NjE2YmNhYzIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jCkBAIC0xMDYsNiAmIzQzOzEwNiwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYyBtbWZyMiBfX3ByZWw2NF9pbml0Y29uc3QgPSB7CiAJfSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYyBtbWZyNCBfX3ByZWw2NF9pbml0Y29uc3QgPSB7CiYjNDM7CS5uYW1lCQk9ICYjMzQ7aWRfYWE2NG1tZnI0JiMzNDssCiYjNDM7CS5vdmVycmlkZQk9ICZhbXA7aWRfYWE2NG1tZnI0X292ZXJyaWRlLAomIzQzOwkuZmllbGRzCQk9IHsKJiM0MzsJCUZJRUxEKCYjMzQ7bnZfZnJhYyYjMzQ7LCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIE5VTEwpLAomIzQzOwkJe30KJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGJvb2wgX19pbml0IHBmcjBfc3ZlX2ZpbHRlcih1NjQgdmFsKQogewogCS8qCkBAIC0yMjAsNiAmIzQzOzIyOSw3IEBAIFBSRUw2NChjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjLCByZWcpIHJlZ3NbXSBfX3ByZWw2NF9pbml0Y29uc3QgPSB7CiAJeyAmYW1wO21tZnIwCX0sCiAJeyAmYW1wO21tZnIxCX0sCiAJeyAmYW1wO21tZnIyCX0sCiYjNDM7CXsgJmFtcDttbWZyNAl9LAogCXsgJmFtcDtwZnIwIAl9LAogCXsgJmFtcDtwZnIxIAl9LAogCXsgJmFtcDtpc2FyMQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jCmluZGV4IDQxNTVmZTg5YjU4YTE3Li5kYjYwZmFjYWQ5ZjNjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYwpAQCAtODc2LDggJiM0Mzs4NzYsMTQgQEAgc3RhdGljIHZvaWQgdGltZXJfc2V0X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHRpbWVyX21hcCAqbWFwKQogCWFzc2lnbl9jbGVhcl9zZXRfYml0KHR2dDAyLCBDTlRIQ1RMX0VMMU5WVkNULCBjbHIsIHNldCk7CiAJYXNzaWduX2NsZWFyX3NldF9iaXQodHB0MDIsIENOVEhDVExfRUwxTlZQQ1QsIGNsciwgc2V0KTsKIAotCS8qIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3Nvci4gKi8KLQlzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3NvciwgdW5sZXNzCiYjNDM7CSAqIHdlIGFyZSBzdXJlIENOVEtDVExfRUwxIGlzIGNvbXBsZXRlbHkgc3RhdGVmdWwgd2l0aCBGRUFUX05WMnAxLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpCiYjNDM7CQlzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7CiYjNDM7CWVsc2UKJiM0MzsJCXN5c3JlZ19jbGVhcl9zZXQoY250a2N0bF9lbDEsIGNsciwgc2V0KTsKIH0KIAogdm9pZCBrdm1fdGltZXJfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jIGIvYXJjaC9hcm02NC9rdm0vY29uZmlnLmMKaW5kZXggMDYyMjE2MmIwODllNTAuLjdlODY0NzkxNDI3MjM0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9jb25maWcuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9jb25maWcuYwpAQCAtMjI1LDYgJiM0MzsyMjUsNyBAQCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2MgewogI2RlZmluZSBGRUFUX0hDWAkJSURfQUE2NE1NRlIxX0VMMSwgSENYLCBJTVAKICNkZWZpbmUgRkVBVF9TMlBJRQkJSURfQUE2NE1NRlIzX0VMMSwgUzJQSUUsIElNUAogI2RlZmluZSBGRUFUX0dDSUUJCUlEX0FBNjRQRlIyX0VMMSwgR0NJRSwgSU1QCiYjNDM7I2RlZmluZSBGRUFUX05WMwkJSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzCiAKIHN0YXRpYyBib29sIG5vdF9mZWF0X2FhNjRlbDMoc3RydWN0IGt2bSAqa3ZtKQogewpAQCAtOTA0LDYgJiM0Mzs5MDUsMTIgQEAgc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVBfRkdUKGhkZmd3dHIyX2Rlc2MsIGhkZmd3dHIyX21hc2tzLAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0gewomIzQzOwlORUVEU19GRUFUKEhDUlhfRUwyX05WVEdFCQl8CiYjNDM7CQkgICBIQ1JYX0VMMl9OVm5UVExCCQl8CiYjNDM7CQkgICBIQ1JYX0VMMl9OVm5UVExCSVMJCXwKJiM0MzsJCSAgIEhDUlhfRUwyX05WblRUTEJPUywKJiM0MzsJCSAgIEZFQVRfTlYzKSwKJiM0MzsJTkVFRFNfRkVBVChIQ1JYX0VMMl9TUk1BU0tFbiwgRkVBVF9TUk1BU0spLAogCU5FRURTX0ZFQVQoSENSWF9FTDJfUEFDTUVuLCBmZWF0X3BhdXRoX2xyKSwKIAlORUVEU19GRUFUKEhDUlhfRUwyX0VuRlBNLCBGRUFUX0ZQTVIpLAogCU5FRURTX0ZFQVQoSENSWF9FTDJfR0NTRW4sIEZFQVRfR0NTKSwKQEAgLTkzMyw3ICYjNDM7OTQwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3J4X2ZlYXRfbWFwW10gPSB7CiB9OwogCiAKLXN0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKGhjcnhfZGVzYywgX19IQ1JYX0VMMiwKJiM0MztzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3J4X2Rlc2MsIEhDUlhfRUwyLAogCQkJICAgICAgaGNyeF9mZWF0X21hcCwgRkVBVF9IQ1gpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0gewpAQCAtMTAxMCw2ICYjNDM7MTAxNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyX2ZlYXRfbWFwW10gPSB7CiBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3JfZGVzYywgSENSX0VMMiwKIAkJCSAgICAgIGhjcl9mZWF0X21hcCwgRkVBVF9BQTY0RUwyKTsKIAomIzQzO3N0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKG52aGNyX2Rlc2MsIE5WSENSX0VMMiwKJiM0MzsJCQkgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfTlYzKTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgc2N0bHIyX2ZlYXRfbWFwW10gPSB7CiAJTkVFRFNfRkVBVChTQ1RMUjJfRUwxX05NRUEJfAogCQkgICBTQ1RMUjJfRUwxX0VBU0UsCkBAIC0xMzg0LDYgJiM0MzsxMzk0LDcgQEAgdm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZCkKIAljaGVja19yZWdfZGVzYygmYW1wO2hkZmd3dHIyX2Rlc2MpOwogCWNoZWNrX3JlZ19kZXNjKCZhbXA7aGNyeF9kZXNjKTsKIAljaGVja19yZWdfZGVzYygmYW1wO2hjcl9kZXNjKTsKJiM0MzsJY2hlY2tfcmVnX2Rlc2MoJmFtcDtudmhjcl9kZXNjKTsKIAljaGVja19yZWdfZGVzYygmYW1wO3NjdGxyMl9kZXNjKTsKIAljaGVja19yZWdfZGVzYygmYW1wO3RjcjJfZWwyX2Rlc2MpOwogCWNoZWNrX3JlZ19kZXNjKCZhbXA7c2N0bHJfZWwxX2Rlc2MpOwpAQCAtMTU3OSwxMSAmIzQzOzE1OTAsMjEgQEAgc3RydWN0IHJlc3ggZ2V0X3JlZ19maXhlZF9iaXRzKHN0cnVjdCBrdm0gKmt2bSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpCiAJCWJyZWFrOwogCWNhc2UgSENSWF9FTDI6CiAJCXJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCAmYW1wO2hjcnhfZGVzYywgMCwgMCk7Ci0JCXJlc3gucmVzMSB8PSBfX0hDUlhfRUwyX1JFUzE7CiAJCWJyZWFrOwogCWNhc2UgSENSX0VMMjoKIAkJcmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sICZhbXA7aGNyX2Rlc2MsIDAsIDApOwogCQlicmVhazsKJiM0MzsJY2FzZSBOVkhDUl9FTDI6CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBhcHBseSBzYW5pdGlzYXRpb24gaWYgd2UgZG8gaGF2ZSBGRUFUX05WMy4KJiM0MzsJCSAqIE90aGVyd2lzZSwgdGhlIHJlZ2lzdGVyIGFsaWFzZXMgd2l0aCBIQ1JfRUwyIGluIFZOQ1IsCiYjNDM7CQkgKiBhbmQgd2UmIzM5O3JlIGJldHRlciBvZmYgcmVseWluZyBvbiBkYXRhIHRyYW5zZmVycyBiZXR3ZWVuCiYjNDM7CQkgKiBOVkhDUl9FTDIgYW5kIEhDUl9FTDIgdG8gc2FuaXRpc2UgdGhpbmdzLgomIzQzOwkJICovCiYjNDM7CQlyZXN4ID0gKGt2bV9oYXNfbnYzKGt2bSkgPwomIzQzOwkJCWNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sICZhbXA7bnZoY3JfZGVzYywgMCwgMCkgOgomIzQzOwkJCSh0eXBlb2YocmVzeCkpe30pOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBTQ1RMUjJfRUwxOgogCWNhc2UgU0NUTFIyX0VMMjoKIAkJcmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sICZhbXA7c2N0bHIyX2Rlc2MsIDAsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMKaW5kZXggM2M4MmYzOTI4NDVkMTQuLmY1ZGM1NzhkOGM5ODU2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMKQEAgLTkwLDYgJiM0Mzs5MCw3IEBAIGVudW0gY2d0X2dyb3VwX2lkIHsKIAlDR1RfSENSWF9FbkZQTSwKIAlDR1RfSENSWF9UQ1IyRW4sCiAJQ0dUX0hDUlhfU0NUTFIyRW4sCiYjNDM7CUNHVF9IQ1JYX25OVlRHRSwKIAogCUNHVF9DTlRIQ1RMX0VMMVRWVCwKIAlDR1RfQ05USENUTF9FTDFUVkNULApAQCAtMTIxLDYgJiM0MzsxMjIsOCBAQCBlbnVtIGNndF9ncm91cF9pZCB7CiAJQ0dUX01EQ1JfVERFX1REUkEsCiAJQ0dUX01EQ1JfVERDQ19UREVfVERBLAogCiYjNDM7CUNHVF9IQ1JfTlZfSENSWF9uTlZUR0UsCiYjNDM7CiAJQ0dUX0lDSF9IQ1JfVENfVERJUiwKIAogCS8qCkBAIC00MTMsNiAmIzQzOzQxNiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRyYXBfYml0cyBjb2Fyc2VfdHJhcF9iaXRzW10gPSB7CiAJCS5tYXNrCQk9IEhDUlhfRUwyX1NDVExSMkVuLAogCQkuYmVoYXZpb3VyCT0gQkVIQVZFX0ZPUldBUkRfUlcsCiAJfSwKJiM0MzsJW0NHVF9IQ1JYX25OVlRHRV0gPSB7CiYjNDM7CQkuaW5kZXgJCT0gSENSWF9FTDIsCiYjNDM7CQkudmFsdWUJCT0gMCwKJiM0MzsJCS5tYXNrCQk9IEhDUlhfRUwyX05WVEdFLAomIzQzOwkJLmJlaGF2aW91cgk9IEJFSEFWRV9GT1JXQVJEX1JXLAomIzQzOwl9LAogCVtDR1RfQ05USENUTF9FTDFUVlRdID0gewogCQkuaW5kZXgJCT0gQ05USENUTF9FTDIsCiAJCS52YWx1ZQkJPSBDTlRIQ1RMX0VMMVRWVCwKQEAgLTQ2OCw2ICYjNDM7NDc3LDcgQEAgc3RhdGljIGNvbnN0IGVudW0gY2d0X2dyb3VwX2lkICpjb2Fyc2VfY29udHJvbF9jb21ib1tdID0gewogCQkJCQlDR1RfSENSX1RWTSwgQ0dUX0hDUl9UUlZNLCBDR1RfSENSWF9TQ1RMUjJFbiksCiAJTUNCKENHVF9IQ1JfVFBVX1RJQ0FCLAkJQ0dUX0hDUl9UUFUsIENHVF9IQ1JfVElDQUIpLAogCU1DQihDR1RfSENSX1RQVV9UT0NVLAkJQ0dUX0hDUl9UUFUsIENHVF9IQ1JfVE9DVSksCiYjNDM7CU1DQihDR1RfSENSX05WX0hDUlhfbk5WVEdFLAlDR1RfSENSX05WLCBDR1RfSENSWF9uTlZUR0UpLAogCU1DQihDR1RfSENSX05WMV9uTlYyX0VOU0NYVCwJQ0dUX0hDUl9OVjFfbk5WMiwgQ0dUX0hDUl9FTlNDWFQpLAogCU1DQihDR1RfTURDUl9UUE1fVFBNQ1IsCQlDR1RfTURDUl9UUE0sIENHVF9NRENSX1RQTUNSKSwKIAlNQ0IoQ0dUX01EQ1JfVFBNX0hQTU4sCQlDR1RfTURDUl9UUE0sIENHVF9NRENSX0hQTU4pLApAQCAtODUzLDYgJiM0Mzs4NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnIGVuY29kaW5nX3RvX2NndFtdIF9faW5pdGNvbnN0ID0gewogCVNSX1RSQVAoU1lTX1NDVExSMl9FTDIsCQlDR1RfSENSX05WKSwKIAlTUl9SQU5HRV9UUkFQKFNZU19IQ1JfRUwyLAogCQkgICAgICBTWVNfSENSWF9FTDIsCUNHVF9IQ1JfTlYpLAomIzQzOwlTUl9UUkFQKFNZU19OVkhDUl9FTDIsCQlDR1RfSENSX05WX0hDUlhfbk5WVEdFKSwKIAlTUl9UUkFQKFNZU19TTVBSSU1BUF9FTDIsCUNHVF9IQ1JfTlYpLAogCVNSX1RSQVAoU1lTX1NNQ1JfRUwyLAkJQ0dUX0hDUl9OViksCiAJU1JfUkFOR0VfVFJBUChTWVNfVFRCUjBfRUwyLApAQCAtMjMyMCw3ICYjNDM7MjMzMSw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZCkKIAlCVUlMRF9CVUdfT04oX19OUl9DR1RfR1JPVVBfSURTX18gJmd0OyBCSVQoVENfQ0dUX0JJVFMpKTsKIAlCVUlMRF9CVUdfT04oX19OUl9GR1RfR1JPVVBfSURTX18gJmd0OyBCSVQoVENfRkdUX0JJVFMpKTsKIAlCVUlMRF9CVUdfT04oX19OUl9GR19GSUxURVJfSURTX18gJmd0OyBCSVQoVENfRkdGX0JJVFMpKTsKLQlCVUlMRF9CVUdfT04oX19IQ1JYX0VMMl9NQVNLICZhbXA7IF9fSENSWF9FTDJfbk1BU0spOwogCiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCk7IGkmIzQzOyYjNDM7KSB7CiAJCWNvbnN0IHN0cnVjdCBlbmNvZGluZ190b190cmFwX2NvbmZpZyAqY2d0ID0gJmFtcDtlbmNvZGluZ190b19jZ3RbaV07CkBAIC0yMzQ2LDEwICYjNDM7MjM1Niw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZCkKIAkJfQogCX0KIAotCWlmIChfX0hDUlhfRUwyX1JFUzAgIT0gSENSWF9FTDJfUkVTMCkKLQkJa3ZtX2luZm8oJiMzNDtTYW5pdGlzZWQgSENSX0VMMl9SRVMwID0gJTAxNmxseCwgZXhwZWN0aW5nICUwMTZsbHhcbiYjMzQ7LAotCQkJIF9fSENSWF9FTDJfUkVTMCwgSENSWF9FTDJfUkVTMCk7Ci0KIAlrdm1faW5mbygmIzM0O252OiAlbGQgY29hcnNlIGdyYWluZWQgdHJhcCBoYW5kbGVyc1xuJiMzNDssCiAJCSBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgKaW5kZXggNGJmNjI0YTQ5NTkxZGYuLjdiMjcyOTZjOTQ2MDcwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oCkBAIC0xMDgsOSAmIzQzOzEwOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV9jcHRyX3RyYXBzX3ZoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3QKIAkgKiB3cml0aW5nIHRvIENQVFJfRUwyIHZpYSBDUEFDUl9FTDEgY2FuJiMzOTt0IHNldCBhbnkgb2YgVENQQUMgb3IgVFRBLAogCSAqIGFzIHRoZXkgYXJlIFJFUzAgaW4gdGhlIGd1ZXN0JiMzOTtzIHZpZXcuIFRvIHdvcmsgYXJvdW5kIGl0LCB0cmFwIHRoZQotCSAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4mIzM5O3Qgc2V0Li4uCiYjNDM7CSAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4mIzM5O3Qgc2V0LiBGRUFUX05WMnAxIGZpeGVzIGl0LgogCSAqLwotCWlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpICZhbXA7JmFtcDsgaXNfaHlwX2N0eHQodmNwdSkpCiYjNDM7CWlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpICZhbXA7JmFtcDsKJiM0MzsJICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkgJmFtcDsmYW1wOyBpc19oeXBfY3R4dCh2Y3B1KSkKIAkJdmFsIHw9IENQVFJfRUwyX1RDUEFDOwogCiAJLyoKQEAgLTMyNSw2ICYjNDM7MzI2LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RlYWN0aXZhdGVfdHJhcHNfbXBhbSh2b2lkKQogCQl3cml0ZV9zeXNyZWdfcyhNUEFNSENSX0hPU1RfRkxBR1MsIFNZU19NUEFNSENSX0VMMik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEp1c3QgbGlrZSBmb3IgSENSX0VMMiwgd2UgY2FuJiMzOTt0IGxldCB0aGUgZ3Vlc3QgbWVzcyB3aXRoIHNvbWUgb2YgdGhlCiYjNDM7ICogYmFzaWNzIHdlIHJlbHkgb24gaW4gSENSWF9FTDIuIEhvd2V2ZXIsIHRoZSBtYWpvciBkaWZmZXJlbmNlIGlzIHRoYXQKJiM0MzsgKiBIQ1JYX0VMMiBvbmx5IGFmZmVjdHMgRUwxLCBhbmQgbmV2ZXIgRUwyIChzdWRkZW4gb3V0YnVyc3Qgb2Ygc2FuaXR5LCBJCiYjNDM7ICogZ3Vlc3MpLiBTbyBpdCBpcyBhbHdheXMgdGhlIGd1ZXN0IGluZmxpY3RpbmcgaXQgb24gaXRzIG93biBndWVzdHguCiYjNDM7ICoKJiM0MzsgKiBUaGluZ3Mgd2UgZG9uJiMzOTt0IHdhbnQgdG8gbGV0IHRoZSBndWVzdCBjb250cm9sIGFyZToKJiM0MzsgKgomIzQzOyAqIC0gVE1FQTogVGhhdCYjMzk7cyBmb3IgdXMgdG8gZGVjaWRlIGhvdyBhbiBTRUEgaXMgcm91dGVkLCBub3QgdGhlIGd1ZXN0LgomIzQzOyAqCiYjNDM7ICogLSBQVFRXSTogU2ltaWxhcmx5LCBpdCBpcyBmb3IgdXMgdG8gZGVjaWRlIHdoZXRoZXIgUmVkdWNlZCBDb2hlcmVuY3kgZm9yCiYjNDM7ICogICB0aGUgUFRXIGlzIGEgdGhpbmcuIEl0IHJlYWxseSBpc24mIzM5O3QuCiYjNDM7ICoKJiM0MzsgKiAtIEVuSURDUDEyODogV2UgZG9uJiMzOTt0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE5WX0hDUlhfR1VFU1RfRVhDTFVERQkoSENSWF9FTDJfVE1FQQkgICAgfCBIQ1JYX0VMMl9QVFRXSSB8IFwKJiM0MzsJCQkJIEhDUlhfRUwyX0VuSURDUDEyOCkKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9jcHVfY29udGV4dCAqaGN0eHQgPSBob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCk7CkBAIC0zNTAsOCAmIzQzOzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXU2NCBoY3J4ID0gdmNwdS0mZ3Q7YXJjaC5oY3J4X2VsMjsKIAkJaWYgKGlzX25lc3RlZF9jdHh0KHZjcHUpKSB7CiAJCQl1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpOwotCQkJaGNyeCB8PSB2YWwgJmFtcDsgX19IQ1JYX0VMMl9NQVNLOwotCQkJaGNyeCAmYW1wOz0gfih+dmFsICZhbXA7IF9fSENSWF9FTDJfbk1BU0spOwomIzQzOwkJCWhjcnggfD0gKHZhbCAmYW1wOyB+TlZfSENSWF9HVUVTVF9FWENMVURFKTsKJiM0MzsJCQloY3J4ICZhbXA7PSB+KH52YWwgJmFtcDsgfk5WX0hDUlhfR1VFU1RfRVhDTFVERSk7CiAJCX0KIAogCQljdHh0X3N5c19yZWcoaGN0eHQsIEhDUlhfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX0hDUlhfRUwyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaCBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaAppbmRleCBhMTdjYmU3NTgyZGU5MC4uYzM4Mjg0OGQzMTk0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmgKQEAgLTE3Miw2ICYjNDM7MTcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0KQogCiAJaWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSkKIAkJY3R4dF9zeXNfcmVnKGN0eHQsIFNDVExSMl9FTDEpID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TQ1RMUjIpOwomIzQzOwomIzQzOwkvKiBSZXRyaWV2ZSBMMiYjMzk7cyBIQ1JfRUwyLCBhbmQgc2F2ZSBpdCBmb3IgZnV0dXJlIHVzZSAqLwomIzQzOwlpZiAoaXNfbmVzdGVkX252M19jdHh0KGN0eHRfdG9fdmNwdShjdHh0KSkpCiYjNDM7CQljdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMl9yZXR1cm5fc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqY3R4dCkKQEAgLTI4NSw2ICYjNDM7Mjg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19yZXN0b3JlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0LAogCiAJaWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSkKIAkJd3JpdGVfc3lzcmVnX2VsMShjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSksIFNZU19TQ1RMUjIpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQdWJsaXNoIHRoZSBMMiB2aWV3IG9mIEhDUl9FTDIgdG8gdGhlIEhXIGlmIEwxIGlzIHVzaW5nIE5WMy4KJiM0MzsJICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSYjMzk7cyBvd24gVk5DUi4KJiM0MzsJICovCiYjNDM7CWlmIChpc19uZXN0ZWRfbnYzX2N0eHQoY3R4dF90b192Y3B1KGN0eHQpKSkKJiM0MzsJCXdyaXRlX3N5c3JlZ19zKGN0eHRfc3lzX3JlZyhjdHh0LCBOVkhDUl9FTDIpLCBTWVNfTlZIQ1JfRUwyKTsKIH0KIAogLyogUmVhZCB0aGUgVkNQVSBzdGF0ZSYjMzk7cyBQU1RBVEUsIGJ1dCB0cmFuc2xhdGUgKHYpRUwyIHRvIEVMMS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCmluZGV4IGJiZTljZWJkM2Q5ZDU3Li5mMTI5ZjIyZjE1NjE4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCkBAIC03MCw2ICYjNDM7NzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKQogCQkJaGNyIHw9IEhDUl9OVjE7CiAKJiM0MzsJCS8qIFB1Ymxpc2ggdGhlIGd1ZXN0JiMzOTtzIHZpZXcgb2YgSENSX0VMMiB0byB0aGUgSFcgKi8KJiM0MzsJCWlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpICZhbXA7JmFtcDsgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkKJiM0MzsJCQl3cml0ZV9zeXNyZWdfcyhfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7CiYjNDM7CQllbHNlCiYjNDM7CQkJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpOwomIzQzOwogCQkvKgogCQkgKiBOb3RoaW5nIGluIEhDUl9FTDIgc2hvdWxkIGltcGFjdCBydW5uaW5nIGluIGh5cGVydmlzb3IKIAkJICogY29udGV4dCwgYXBhcnQgZnJvbSBiaXRzIHdlIGhhdmUgZGVmaW5lZCBhcyBSRVN4IChFMkgsCkBAIC0zMzksNiAmIzQzOzM0NSwxMCBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV9lcmV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiAJdTY0IGVzciA9IGt2bV92Y3B1X2dldF9lc3IodmNwdSk7CiAJdTY0IHNwc3IsIGVsciwgbW9kZTsKIAomIzQzOwkvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovCiYjNDM7CWlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpICZhbXA7JmFtcDsgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKgogCSAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lCiAJICogaWYgdGhpcyBpcyBhIFZIRSBndWVzdCBoeXBlcnZpc29yIHJldHVybmluZyB0byBpdHMgb3duCkBAIC0zNDksOCAmIzQzOzM1OSw4IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSkKIAkgKiBVbmxlc3MgdGhlIHRyYXAgaGFzIHRvIGJlIGZvcndhcmRlZCBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsCiAJICogb2YgY291cnNlLi4uCiAJICovCi0JaWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSAmYW1wOyBIQ1JfTlYpIHx8Ci0JICAgIChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSAmYW1wOyBIRkdJVFJfRUwyX0VSRVQpKQomIzQzOwlpZiAoaXNfbmVzdGVkX2N0eHQodmNwdSkgfHwKJiM0MzsJICAgIF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhGR0lUUl9FTDIpICZhbXA7IEhGR0lUUl9FTDJfRVJFVCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJc3BzciA9IHJlYWRfc3lzcmVnX2VsMShTWVNfU1BTUik7CkBAIC00NDEsNiAmIzQzOzQ1MSw5IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2NwYWNyX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKQogCXU2NCBlc3IgPSBrdm1fdmNwdV9nZXRfZXNyKHZjcHUpOwogCWludCBydDsKIAomIzQzOwlpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghaXNfaHlwX2N0eHQodmNwdSkgfHwgZXNyX3N5czY0X3RvX3N5c3JlZyhlc3IpICE9IFNZU19DUEFDUl9FTDEpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtNTM0LDE5ICYjNDM7NTQ3LDE3IEBAIHN0YXRpYyBjb25zdCBleGl0X2hhbmRsZXJfZm4gaHlwX2V4aXRfaGFuZGxlcnNbXSA9IHsKIAlbMHgzRl0JCQkJPSBrdm1faHlwX2hhbmRsZV9pbXBkZWYsCiB9OwogCi1zdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKQomIzQzO3N0YXRpYyB2b2lkIGZpeHVwX252X2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN5bmNocm9uaXplX3ZjcHVfcHN0YXRlKHZjcHUpOwotCiAJLyoKIAkgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3CiAJICogc28gdGhhdCB0aGUgdXN1YWwgaGVscGVycyB3b3JrIGNvcnJlY3RseS4gVGhpcyBlbmZvcmNlcyBvdXIKIAkgKiBpbnZhcmlhbnQgdGhhdCB0aGUgZ3Vlc3QmIzM5O3MgSFlQIGNvbnRleHQgc3RhdHVzIGlzIHByZXNlcnZlZAogCSAqIGFjcm9zcyBhIHJ1bi4KIAkgKi8KLQlpZiAodmNwdV9oYXNfbnYodmNwdSkgJmFtcDsmYW1wOwotCSAgICB1bmxpa2VseShob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpKSkgewomIzQzOwlpZiAodW5saWtlbHkoaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSkpIHsKIAkJdTY0IG1vZGUgPSAqdmNwdV9jcHNyKHZjcHUpICZhbXA7IChQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpOwomIzQzOwkJdTY0IGhjcjsKIAogCQlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSBQU1JfTU9ERV9FTDF0OgpAQCAtNTU5LDExICYjNDM7NTcwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiAKIAkJKnZjcHVfY3Bzcih2Y3B1KSAmYW1wOz0gfihQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpOwogCQkqdmNwdV9jcHNyKHZjcHUpIHw9IG1vZGU7CiYjNDM7CiYjNDM7CQkvKiBQdWJsaXNoIHRoZSBsYXRlc3QgSENSX0VMMiB0byB0aGUgZW11bGF0aW9uICovCiYjNDM7CQloY3IgPSAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgICAgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkgPwomIzQzOwkJCXJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMikgOgomIzQzOwkJCV9fdmNwdV9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMik7CiYjNDM7CiYjNDM7CQlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTsKIAl9CiAKIAkvKiBBcHBseSBleHRyZW1lIHBhcmFub2lhISAqLwotCUJVR19PTih2Y3B1X2hhc19udih2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgICAgICEhaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSAhPSBpc19oeXBfY3R4dCh2Y3B1KSk7CiYjNDM7CUJVR19PTighIWhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkgIT0gaXNfaHlwX2N0eHQodmNwdSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiYjNDM7ewomIzQzOwlzeW5jaHJvbml6ZV92Y3B1X3BzdGF0ZSh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKHZjcHVfaGFzX252KHZjcHUpKQomIzQzOwkJZml4dXBfbnZfZ3Vlc3RfZXhpdCh2Y3B1KTsKIAogCXJldHVybiBfX2ZpeHVwX2d1ZXN0X2V4aXQodmNwdSwgZXhpdF9jb2RlLCBoeXBfZXhpdF9oYW5kbGVycyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuYwppbmRleCBiZTY4NWI2M2U4Y2YyNi4uMGM0ZWYxY2UzMmFlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuYwpAQCAtNDIsMTAgJiM0Mzs0MiwxMiBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl1NjQgdmFsOwogCiAJCS8qCi0JCSAqIFdlIGRvbiYjMzk7dCBzYXZlIENQVFJfRUwyLCBhcyBhY2Nlc3NlcyB0byBDUEFDUl9FTDEKLQkJICogYXJlIGFsd2F5cyB0cmFwcGVkLCBlbnN1cmluZyB0aGF0IHRoZSBpbi1tZW1vcnkKLQkJICogY29weSBpcyBhbHdheXMgdXAtdG8tZGF0ZS4gQSBzbWFsbCBibGVzc2luZy4uLgomIzQzOwkJICogV2l0aG91dCBGRUFUX05WMnAxLCB3ZSBkb24mIzM5O3Qgc2F2ZSBDUFRSX0VMMiwgYXMgYWNjZXNzZXMKJiM0MzsJCSAqIHRvIENQQUNSX0VMMSBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlCiYjNDM7CQkgKiBpbi1tZW1vcnkgY29weSBpcyBhbHdheXMgdXAtdG8tZGF0ZS4gQSBzbWFsbCBibGVzc2luZy4uLgogCQkgKi8KJiM0MzsJCWlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpCiYjNDM7CQkJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIENQVFJfRUwyLCByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKSk7CiAJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIsCSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSKSk7CiAJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMF9FTDIsCSByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIwKSk7CiAJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMV9FTDIsCSByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIxKSk7CkBAIC02NywxMSAmIzQzOzY5LDE4IEBAIHN0YXRpYyB2b2lkIF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCSAqIFRoZSBFTDEgdmlldyBvZiBDTlRLQ1RMX0VMMSBoYXMgYSBidW5jaCBvZiBSRVMwIGJpdHMgd2hlcmUKIAkJICogdGhlIGludGVyZXN0aW5nIENOVEhDVExfRUwyIGJpdHMgbGl2ZS4gU28gcHJlc2VydmUgdGhlc2UKIAkJICogYml0cyB3aGVuIHJlYWRpbmcgYmFjayB0aGUgZ3Vlc3QtdmlzaWJsZSB2YWx1ZS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBXaGlsZSBOVjJwMSBmaXhlcyBzb21lIG9mIHRoYXQsIGl0IG1ha2VzIENOVEhDVExfRUwyLkVDVgomIzQzOwkJICogZXZlbiBtb3JlIGJyb2tlbiB0aGFuIGl0IGFscmVhZHkgd2FzIHdpdGggTlYyLgogCQkgKi8KIAkJdmFsID0gcmVhZF9zeXNyZWdfZWwxKFNZU19DTlRLQ1RMKTsKLQkJdmFsICZhbXA7PSBDTlRLQ1RMX1ZBTElEX0JJVFM7Ci0JCV9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgJmFtcDs9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTsKLQkJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTsKJiM0MzsJCWlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKSB7CiYjNDM7CQkJdmFsICZhbXA7PSBDTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCAmYW1wOz0sIH5DTlRLQ1RMX1ZBTElEX0JJVFMpOwomIzQzOwkJCV9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgfD0sIHZhbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTsKJiM0MzsJCX0KIAl9CiAKIAlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU1BfRUwyLAkgcmVhZF9zeXNyZWcoc3BfZWwxKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCmluZGV4IGRmYjk2ZWRiZGM0M2M2Li42NGM4ZmI4MmZhZGY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTE3MjgsNyAmIzQzOzE3MjgsNyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbCkKIAkJICogWW91IGdldCBFSVRIRVIKIAkJICoKIAkJICogLSBGRUFUX1ZIRSB3aXRob3V0IEZFQVRfRTJIMAotCQkgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMgomIzQzOwkJICogLSBGRUFUX05WIGxpbWl0ZWQgdG8gRkVBVF9OVjIocDEpL05WMwogCQkgKiAtIEhDUl9FTDIuTlYxIGJlaW5nIFJFUzAKIAkJICoKIAkJICogT1IKQEAgLTE3NDAsNyAmIzQzOzE3NDAsMTMgQEAgdTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpCiAJCWlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMl9FMkgwLCBrdm0tJmd0O2FyY2gudmNwdV9mZWF0dXJlcykpIHsKIAkJCXZhbCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQl2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTsKJiM0MzsJCQlpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSkKJiM0MzsJCQkJdmFsID0gSURfUkVHX0xJTUlUX0ZJRUxEX0VOVU0odmFsLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpOwomIzQzOwkJCWVsc2UgaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSkKJiM0MzsJCQkJdmFsID0gSURfUkVHX0xJTUlUX0ZJRUxEX0VOVU0odmFsLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJQMSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQl2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTsKJiM0MzsJCQl2YWwgJmFtcDs9IH5JRF9BQTY0TU1GUjRfRUwxX0UySDA7CiAJCQl2YWwgfD0gU1lTX0ZJRUxEX1BSRVBfRU5VTShJRF9BQTY0TU1GUjRfRUwxLCBFMkgwLCBOSV9OVjEpOwogCQl9CiAJCWJyZWFrOwpAQCAtMTgyNiw2ICYjNDM7MTgzMiwxMCBAQCBpbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIEhDUl9FTDIpOwogCXNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JfRUwyLCByZXN4KTsKIAomIzQzOwkvKiBOVkhDUl9FTDIgKi8KJiM0MzsJcmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIE5WSENSX0VMMik7CiYjNDM7CXNldF9zeXNyZWdfbWFza3Moa3ZtLCBOVkhDUl9FTDIsIHJlc3gpOwomIzQzOwogCS8qIEhDUlhfRUwyICovCiAJcmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIEhDUlhfRUwyKTsKIAlzZXRfc3lzcmVnX21hc2tzKGt2bSwgSENSWF9FTDIsIHJlc3gpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjBhZWIyZTczNmZkZTM3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTE4Myw4ICYjNDM7MTgzLDYgQEAgc3RhdGljIHZvaWQgbG9jYXRlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcsCiAJc3dpdGNoIChyZWcpIHsKIAkJTUFQUEVEX0VMMl9TWVNSRUcoU0NUTFJfRUwyLCAgIFNDVExSX0VMMSwKIAkJCQkgIHRyYW5zbGF0ZV9zY3Rscl9lbDJfdG9fc2N0bHJfZWwxCSAgICAgKTsKLQkJTUFQUEVEX0VMMl9TWVNSRUcoQ1BUUl9FTDIsICAgIENQQUNSX0VMMSwKLQkJCQkgIHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDEJICAgICApOwogCQlNQVBQRURfRUwyX1NZU1JFRyhUVEJSMF9FTDIsICAgVFRCUjBfRUwxLAogCQkJCSAgdHJhbnNsYXRlX3R0YnIwX2VsMl90b190dGJyMF9lbDEJICAgICApOwogCQlNQVBQRURfRUwyX1NZU1JFRyhUVEJSMV9FTDIsICAgVFRCUjFfRUwxLCAgIE5VTEwJICAgICApOwpAQCAtMjEwLDYgJiM0MzsyMDgsMzMgQEAgc3RhdGljIHZvaWQgbG9jYXRlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcsCiAJCWxvYy0mZ3Q7bG9jID0gKChpc19oeXBfY3R4dCh2Y3B1KSAmYW1wOyZhbXA7IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID8KIAkJCSAgICBTUl9MT0NfU1BFQ0lBTCA6IFNSX0xPQ19NRU1PUlkpOwogCQlicmVhazsKJiM0MzsJY2FzZSBDUFRSX0VMMjoKJiM0MzsJCS8qCiYjNDM7CQkgKiBDUFRSX0VMMiBpcyBqdXN0IGFzIHNwZWNpYWwsIGFuZCBuZWVkcyBhIGNlcnRhaW4gYW1vdW50CiYjNDM7CQkgKiBvZiBoYW5kaG9sZGluZy4gSXQgYWx3YXlzIGxpdmVzIGluIG1lbW9yeSwgZHVlIHRvIGJlaW5nCiYjNDM7CQkgKiBoZWF2aWx5IHRyYXBwZWQgdGhhbmtzIHRvIENQQUNSX0VMMS5UQ1BBQyBiZWluZyBSRVMwLgomIzQzOwkJICogRkVBVF9OVjJwMSBmaXhlcyB0aGlzLgomIzQzOwkJICovCiYjNDM7CQlsb2NhdGVfbWFwcGVkX2VsMl9yZWdpc3Rlcih2Y3B1LCBDUFRSX0VMMiwgQ1BBQ1JfRUwxLAomIzQzOwkJCQkJICAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMSwKJiM0MzsJCQkJCSAgIGxvYyk7CiYjNDM7CQlpZiAoaXNfaHlwX2N0eHQodmNwdSkgJmFtcDsmYW1wOyB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKQomIzQzOwkJCWxvYy0mZ3Q7bG9jID0gU1JfTE9DX1NQRUNJQUw7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBOVkhDUl9FTDI6CiYjNDM7CQkvKgomIzQzOwkJICogWWVzLCBOVkhDUl9FTDIgbWFwcyB0byBpdHNlbGYgd2hlbiBsb2FkZWQgaW4gbmVzdGVkCiYjNDM7CQkgKiBjb250ZXh0LiBJZiB5b3UgZmVlbCBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaXMgZG91YmxlCiYjNDM7CQkgKiBiYWNraW5nIG9uIGl0c2VsZiB1cHNpZGUgZG93biwgeW91JiMzOTtyZSBub3QgYWxvbmUuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRSgha3ZtX2hhc19udjModmNwdS0mZ3Q7a3ZtKSk7CiYjNDM7CQlpZiAoaXNfaHlwX2N0eHQodmNwdSkpIHsKJiM0MzsJCQlsb2MtJmd0O2xvYyA9IFNSX0xPQ19NRU1PUlk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxvYy0mZ3Q7bG9jID0gU1JfTE9DX0xPQURFRCB8IFNSX0xPQ19NQVBQRUQ7CiYjNDM7CQkJbG9jLSZndDttYXBfcmVnID0gTlZIQ1JfRUwyOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbG9jLSZndDtsb2MgPSBsb2NhdGVfZGlyZWN0X3JlZ2lzdGVyKHZjcHUsIHJlZyk7CiAJfQpAQCAtMjQ5LDYgJiM0MzsyNzQsNyBAQCBzdGF0aWMgdTY0IHJlYWRfc3JfZnJvbV9jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcpCiAJY2FzZSBEQUNSMzJfRUwyOgl2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19EQUNSMzJfRUwyKTsJYnJlYWs7CiAJY2FzZSBJRlNSMzJfRUwyOgl2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19JRlNSMzJfRUwyKTsJYnJlYWs7CiAJY2FzZSBEQkdWQ1IzMl9FTDI6CXZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0RCR1ZDUjMyX0VMMik7CWJyZWFrOwomIzQzOwljYXNlIE5WSENSX0VMMjoJCXZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMik7CWJyZWFrOwogCWRlZmF1bHQ6CQlXQVJOX09OX09OQ0UoMSk7CiAJfQogCkBAIC0yODcsNiAmIzQzOzMxMyw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlX3NyX3RvX2NwdShlbnVtIHZjcHVfc3lzcmVnIHJlZywgdTY0IHZhbCkKIAljYXNlIERBQ1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0RBQ1IzMl9FTDIpOwlicmVhazsKIAljYXNlIElGU1IzMl9FTDI6CXdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0lGU1IzMl9FTDIpOwlicmVhazsKIAljYXNlIERCR1ZDUjMyX0VMMjoJd3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfREJHVkNSMzJfRUwyKTsJYnJlYWs7CiYjNDM7CWNhc2UgTlZIQ1JfRUwyOgkJd3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfTlZIQ1JfRUwyKTsJYnJlYWs7CiAJZGVmYXVsdDoJCVdBUk5fT05fT05DRSgxKTsKIAl9CiB9CkBAIC0zMTEsOSAmIzQzOzMzOCwxNiBAQCB1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZykKIAkJc3dpdGNoIChyZWcpIHsKIAkJY2FzZSBDTlRIQ1RMX0VMMjoKIAkJCXZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7Ci0JCQl2YWwgJmFtcDs9IENOVEtDVExfVkFMSURfQklUUzsKLQkJCXZhbCB8PSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByZWcpICZhbXA7IH5DTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJaWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHsKJiM0MzsJCQkJdmFsICZhbXA7PSBDTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJCXZhbCB8PSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByZWcpICZhbXA7IH5DTlRLQ1RMX1ZBTElEX0JJVFM7CiYjNDM7CQkJfQogCQkJcmV0dXJuIHZhbDsKJiM0MzsJCWNhc2UgQ1BUUl9FTDI6CiYjNDM7CQkJaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSkKJiM0MzsJCQkJcmV0dXJuIHJlYWRfc3lzcmVnX2VsMShTWVNfQ1BBQ1IpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZyk7CiAJCWRlZmF1bHQ6CiAJCQlXQVJOX09OX09OQ0UoMSk7CiAJCX0KQEAgLTM1OSw2ICYjNDM7MzkzLDkgQEAgdm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBlbnVtIHZjcHVfc3lzcmVnIHJlZykKIAkJCSAqLwogCQkJd3JpdGVfc3lzcmVnX2VsMSh2YWwsIFNZU19DTlRLQ1RMKTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBDUFRSX0VMMjoKJiM0MzsJCQl3cml0ZV9zeXNyZWdfZWwxKHZhbCwgU1lTX0NQQUNSKTsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVdBUk5fT05fT05DRSgxKTsKIAkJfQpAQCAtMjg0MCw2ICYjNDM7Mjg3NywxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXJldHVybiBSRUdfSElEREVOOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBudmhjcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCkKJiM0Mzt7CiYjNDM7CWlmIChlbDJfdmlzaWJpbGl0eSh2Y3B1LCByZCkgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICBrdm1faGFzX2ZlYXQodmNwdS0mZ3Q7a3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBSRUdfSElEREVOOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2N0bHIyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKQogewpAQCAtMzc1Myw2ICYjNDM7MzgwMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHsKIAkJCSBzdmVfZWwyX3Zpc2liaWxpdHkpLAogCiAJRUwyX1JFR19WTkNSKEhDUlhfRUwyLCByZXNldF92YWwsIDApLAomIzQzOwlFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsCiYjNDM7CQkJIG52aGNyX2VsMl92aXNpYmlsaXR5KSwKIAogCUVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksCiAJRUwyX1JFRyhUVEJSMV9FTDIsIGFjY2Vzc19ydywgcmVzZXRfdmFsLCAwKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwppbmRleCA5Yjg1YTg0ZjZmZDQ5NC4uN2UwNDE0NTA5ZTg5YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMKQEAgLTUxLDYgJiM0Mzs1MSw4IEBAIEhBU19MUzY0X1YKIEhBU19MU1VJCiBIQVNfTU9QUwogSEFTX05FU1RFRF9WSVJUCiYjNDM7SEFTX05WMlAxCiYjNDM7SEFTX05WMwogSEFTX0JCTUwyX05PQUJPUlQKIEhBU19QQU4KIEhBU19QTVVWMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9nZW4tc3lzcmVnLmF3ayBiL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sKaW5kZXggODY4NjBhYjY3MmRjNzguLmQ3ZjdjZWI3NjhmZTVjIDEwMDc1NQotLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sKQEAgLTIyOCw3ICYjNDM7MjI4LDcgQEAgJDEgPT0gJiMzNDtFbmRTeXNyZWcmIzM0OyAmYW1wOyZhbXA7IGJsb2NrX2N1cnJlbnQoKSA9PSAmIzM0O1N5c3JlZyYjMzQ7IHsKIH0KIAogIyBDdXJyZW50bHkgdGhpcyBpcyBlZmZlY3RpdmV5IGEgY29tbWVudCwgaW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGVtaXQKLSMgZGVmaW5lcyBmb3IgdGhlIGZpZWxkcy4KJiM0MzsjIGRlZmluZXMgZm9yIHRoZSBmaWVsZHMuICYjMzQ7TWFwcGluZyYjMzQ7IGRvZXMgZW1pdCB0aGUgUkVTeC9VTktOIGRlZmluaXRpb25zLgogKCQxID09ICYjMzQ7RmllbGRzJiMzNDsgfHwgJDEgPT0gJiMzNDtNYXBwaW5nJiMzNDspICZhbXA7JmFtcDsgYmxvY2tfY3VycmVudCgpID09ICYjMzQ7U3lzcmVnJiMzNDsgewogCWV4cGVjdF9maWVsZHMoMikKIApAQCAtMjM5LDkgJiM0MzsyMzksMTUgQEAgJDEgPT0gJiMzNDtFbmRTeXNyZWcmIzM0OyAmYW1wOyZhbXA7IGJsb2NrX2N1cnJlbnQoKSA9PSAmIzM0O1N5c3JlZyYjMzQ7IHsKIAlwcmludCAmIzM0OyYjMzQ7CiAKIAluZXh0X2JpdCA9IC0xCi0JcmVzMCA9IG51bGwKLQlyZXMxID0gbnVsbAotCXVua24gPSBudWxsCiYjNDM7CWlmICgkMSA9PSAmIzM0O01hcHBpbmcmIzM0OykgewomIzQzOwkJcmVzMCA9ICQyICYjMzQ7X1JFUzAmIzM0OwomIzQzOwkJcmVzMSA9ICQyICYjMzQ7X1JFUzEmIzM0OwomIzQzOwkJdW5rbiA9ICQyICYjMzQ7X1VOS04mIzM0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmVzMCA9IG51bGwKJiM0MzsJCXJlczEgPSBudWxsCiYjNDM7CQl1bmtuID0gbnVsbAomIzQzOwl9CiAKIAluZXh0CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnCmluZGV4IGJjMTc4OGIxNjYyYjc2Li5hZmU5MzM3ODUxYTJlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNyZWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9zeXNyZWcKQEAgLTIzODYsMTcgJiM0MzsyMzg2LDQwIEBAIEVuZEVudW0KIEVuZFN5c3JlZwogCiBTeXNyZWcJSURfQUE2NE1NRlI0X0VMMQkzCTAJMAk3CTQKLVJlczAJNjM6NDgKJiM0MztVbnNpZ25lZEVudW0JNjM6NjAJTVRFRkdUCiYjNDM7CTBiMDAwMAlOSQomIzQzOwkwYjAwMDEJSU1QCiYjNDM7RW5kRW51bQomIzQzO1Vuc2lnbmVkRW51bQk1OTo1NglTQ1JYCiYjNDM7CTBiMDAwMAlOSQomIzQzOwkwYjAwMDEJSU1QCiYjNDM7RW5kRW51bQomIzQzO1Vuc2lnbmVkRW51bQk1NTo1MglURVYKJiM0MzsJMGIwMDAwCU5JCiYjNDM7CTBiMDAwMQlJTVAKJiM0MztFbmRFbnVtCiYjNDM7VW5zaWduZWRFbnVtCTUxOjQ4CVRQUwomIzQzOwkwYjAwMDAJVkFMXzAwMDAKJiM0MzsJMGIwMDAxCVZBTF8wMDAxCiYjNDM7CTBiMDAxMAlWQUxfMDAxMAomIzQzO0VuZEVudW0KIFVuc2lnbmVkRW51bQk0Nzo0NAlTUk1BU0sKIAkwYjAwMDAJTkkKIAkwYjAwMDEJSU1QCiYjNDM7CTBiMDAxMAlTUk1BU0syCiYjNDM7RW5kRW51bQomIzQzO1Vuc2lnbmVkRW51bQk0Mzo0MAlUTEJJRAomIzQzOwkwYjAwMDAJTkkKJiM0MzsJMGIwMDAxCUlNUAogRW5kRW51bQotUmVzMAk0Mzo0MAogVW5zaWduZWRFbnVtCTM5OjM2CUUzRFNFCiAJMGIwMDAwCU5JCiAJMGIwMDAxCUlNUAogRW5kRW51bQotUmVzMAkzNTozMgomIzQzO1Vuc2lnbmVkRW51bQkzNTozMglFQUVTUgomIzQzOwkwYjAwMDAJTkkKJiM0MzsJMGIwMDAxCUlNUAomIzQzO0VuZEVudW0KIFVuc2lnbmVkRW51bQkzMToyOAlSTUVHREkKIAkwYjAwMDAJTkkKIAkwYjAwMDEJSU1QCkBAIC0yNDEwLDYgJiM0MzsyNDMzLDcgQEAgVW5zaWduZWRFbnVtCTIzOjIwCU5WX2ZyYWMKIAkwYjAwMDAJTlZfTlYyCiAJMGIwMDAxCU5WMl9PTkxZCiAJMGIwMDEwCU5WMlAxCiYjNDM7CTBiMDAxMQlOVjMKIEVuZEVudW0KIFVuc2lnbmVkRW51bQkxOToxNglGR1dURTMKIAkwYjAwMDAJTkkKQEAgLTQyNDIsNiAmIzQzOzQyNjYsOSBAQCBGaWVsZAkxCUUyVFJFCiBGaWVsZAkwCUUwSFRSRQogRW5kU3lzcmVnCiAKJiM0MztTeXNyZWcJTlZIQ1JfRUwyCTMJNAkxCTUJMAomIzQzO01hcHBpbmcJSENSX0VMMgomIzQzO0VuZFN5c3JlZwogCiBTeXNyZWcgSERGR1JUUjJfRUwyCTMJNAkzCTEJMAogUmVzMAk2MzoyNQpAQCAtNDUyMSw3ICYjNDM7NDU0OCwxNCBAQCBGaWVsZHMJWkNSX0VMeAogRW5kU3lzcmVnCiAKIFN5c3JlZwlIQ1JYX0VMMgkzCTQJMQkyCTIKLVJlczAJNjM6MjUKJiM0MztSZXMwCTYzOjM1CiYjNDM7RmllbGQJMzQJTlZuVFRMQk9TCiYjNDM7RmllbGQJMzMJTlZuVFRMQklTCiYjNDM7RmllbGQJMzIJTlZuVFRMQgomIzQzO1JlczAJMzE6MjgKJiM0MztGaWVsZAkyNwlOVlRHRQomIzQzO0ZpZWxkCTI2CVNSTUFTS0VuCiYjNDM7UmVzMAkyNQogRmllbGQJMjQJUEFDTUVuCiBGaWVsZAkyMwlFbkZQTQogRmllbGQJMjIJR0NTRW4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMjcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBOZWVkIGZvciBGdXp6aW5nOiBBUk02NCBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgcGF0Y2hlcyAqYWJzb2x1dGVseSogaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2Ugc2hvdWxkIGJlIGZ1enppbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFSTTY0IEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBgRkVBVF9OVjNgIGFuZCBgRkVBVF9OVjJwMWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpdHNlbGYgaXMgY29tcGxleCwgYW5kIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMuCgpUaGUgY2hhbmdlcyBzcGFuIGEgZmFpcmx5IHdpZGUgYXJyYXkgb2YgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9hcm02NC9rdm1gIGRpcmVjdG9yeTogaGVhZGVyIGZpbGVzIGRlZmluaW5nIG5ldyBmZWF0dXJlcyBhbmQgc3lzdGVtIHJlZ2lzdGVycywgY29yZSBjb25maWd1cmF0aW9uLCBhbmQgZW11bGF0aW9uIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGFkZGl0aW9ucyBvZiBga3ZtX2hhc19udjJgLCBga3ZtX2hhc19udjNgLCBgaXNfbmVzdGVkX252M19jdHh0YCwgYE5WSENSX0VMMmAsIGFuZCB0aGUgYXNzb2NpYXRlZCB0cmFwIGhhbmRsaW5nIGFuZCByZWdpc3RlciBtYW5pcHVsYXRpb24uIFRoZSBtb2RpZmljYXRpb25zIHRvIGBoeXAvdmhlL3N3aXRjaC5jYCBhbmQgYG5lc3RlZC5jYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBhcmUgb2Z0ZW4gaG90IHNwb3RzIGZvciBidWdzIGluIHZpcnR1YWxpemF0aW9uLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlc2UgY2hhbmdlcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgaW52b2x2ZSBlbXVsYXRpb24gYW5kIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgYXJlIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoZSBjb2RlJiMzOTtzIHJlYWNoYWJpbGl0eS4gWWVzLCBhYnNvbHV0ZWx5LiBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGlzIGEgZmVhdHVyZSB0aGF0ICpjYW4qIGJlIHRlc3RlZC4gSXQmIzM5O3MgYSBjb25maWd1cmVkIGZ1bmN0aW9uYWxpdHksIHNvIHdlJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGRldGVybWluZSBob3cgdG8gZW5hYmxlL2NvbmZpZ3VyZSB0aGUgZmVhdHVyZS4gTGV0JiMzOTtzIGRvIGEgc2VhcmNoIGZvciBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbmZpZ3MgdG8gZGV0ZXJtaW5lIGhvdyB3ZSBjYW4gZW5hYmxlIHRoaXMgZmVhdHVyZSBhbmQsIHRoZXJlZm9yZSwgZnV6eiBpdCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUk02NF9IQVNfTkVTVEVEX1ZJUlQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19udjIoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oLTI3MC17XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmg6MjcxOlx0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtMjcyLVx0XHRrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSkpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaD0yNzU9c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbnYzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC0yNzYte1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjI3NzpcdHJldHVybiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFx1MDAyNlx1MDAyNlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oLTI3OC1cdFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjZcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTE2OD1zdGF0aWMgaW5saW5lIHU2NCAqX19fY3R4dF9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQsIGludCByKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xMTcwLSNpZiAhZGVmaW5lZCAoX19LVk1fTlZIRV9IWVBFUlZJU09SX18pXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTE3MTpcdGlmICh1bmxpa2VseShjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTE3Mi1cdFx0ICAgICByIFx1MDAzZT0gX19WTkNSX1NUQVJUX18gXHUwMDI2XHUwMDI2IGN0eHQtXHUwMDNldm5jcl9hcnJheSkpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmg9MTA9c3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX252KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaC0xMi1cdHJldHVybiAoIV9faXNfZGVmaW5lZChfX0tWTV9OVkhFX0hZUEVSVklTT1JfXykgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaDoxMzpcdFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFx1MDAyNlx1MDAyNlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmgtMTQtXHRcdHZjcHVfaGFzX2ZlYXR1cmUodmNwdSwgS1ZNX0FSTV9WQ1BVX0hBU19FTDIpKTtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTg4Nz1zdGF0aWMgYm9vbCBoYXNfbnYxKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTAzLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5MDQ6XHRyZXR1cm4gKF9fc3lzdGVtX21hdGNoZXNfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkwNS1cdFx0IShoYXNfY3B1aWRfZmVhdHVyZShlbnRyeSwgc2NvcGUpIHx8XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTI1NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI2MDktXHRcdC5kZXNjID0gXCYjMzQ7TmVzdGVkIFZpcnR1YWxpemF0aW9uIFN1cHBvcnRcJiMzNDssXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjYxMDpcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTkVTVEVEX1ZJUlQsXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYxMS1cdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MzY0PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNDQyLVx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDI6XG5hcmNoL2FybTY0L2t2bS9hcm0uYzo0NDM6XHRcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy00NDQtXHRcdGJyZWFrO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jPTE1NTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzdGVtX3N1cHBvcnRlZF92Y3B1X2ZlYXR1cmVzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTU3Ni1cbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE1Nzc6XHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSlcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE1NzgtXHRcdGNsZWFyX2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwgXHUwMDI2ZmVhdHVyZXMpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jPTI5OTk9c3RhdGljIF9faW5pdCBpbnQga3ZtX2FybV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMzA2MS1cdFx0XHRcdCAgICAgXCYjMzQ7aFwmIzM0OyA6IFwmIzM0O25cJiMzNDspLFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MzA2MjpcdFx0IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSA/IFwmIzM0OyYjNDM7TlYyXCYjMzQ7OiBcJiMzNDtcJiMzNDspO1xuYXJjaC9hcm02NC9rdm0vYXJtLmMtMzA2My1cbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0yOTg9dm9pZCBrdm1fczJfcHRkdW1wX2NyZWF0ZV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0zMDUtXHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgXHUwMDI2a3ZtX3BndGFibGVfbGV2ZWxzX2ZvcHMpO1xuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MzA2Olx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSlcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTMwNy1cdFx0a3ZtLVx1MDAzZWFyY2guZGVidWdmc19udl9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7bmVzdGVkXCYjMzQ7LCBrdm0tXHUwMDNlZGVidWdmc19kZW50cnkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Nzg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIGZvciBBUk02NCBLVk0gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZGlnIHVwIHNvbWUgZXhpc3RpbmcgS1ZNIGNvbmZpZ3VyYXRpb25zIHRhaWxvcmVkIGZvciBBUk02NCBhcmNoaXRlY3R1cmVzLiBUaGUgc3BlY2lmaWNzIHdpbGwgZGVwZW5kIG9uIHdoYXQgSSYjMzk7bSBhaW1pbmcgZm9yIOKAkyBwZXJmb3JtYW5jZSBiZW5jaG1hcmtpbmcsIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBleHBlcmltZW50YXRpb24sIHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucywgb3IgcG9zc2libHkgZXZlbiBkZWJ1Z2dpbmcgYSBLVk0tcmVsYXRlZCBpc3N1ZSBvbiBBUk0uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgcXVlcnlpbmcgZm9yIGNvbW1vbiBiYXNlIHNldHVwcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHdlYWx0aCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWNyb3NzIHZhcmlvdXMgZGlzdHJpYnV0aW9ucy4gSXQgbWlnaHQgYmUgaGVscGZ1bCB0byB0YXJnZXQgcGFydGljdWxhciBPUyB2YXJpYW50cyBvciBoeXBlcnZpc29yIHZlcnNpb25zIGFzIGEgd2F5IHRvIG5hcnJvdyB0aGUgc2NvcGUsIGFzIHdlbGwgYXMgY29uc2lkZXJpbmcga2VybmVsIHZlcnNpb25zIHRvIGF2b2lkIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBJIGtub3cgdGhhdCBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uIGlzIGEgY3JpdGljYWwgZWxlbWVudCB3aXRoIEFSTSwgc28gSSB3aWxsIHByaW9yaXRpemUgY29uZmlndXJhdGlvbnMgdGhhdCBleHBsaWNpdGx5IGFkZHJlc3MgdGhlIGRldmljZSB0cmVlIGFuZCBhbnkgc3BlY2lmaWMgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IG1lbW9yeSBpcyBtYXBwZWQgYW5kIG1hbmFnZWQsIGFuZCBlc3BlY2lhbGx5IGxvb2sgZm9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgaGFuZGxlIGludGVycnVwdCBjb250cm9sbGVycyBhbmQgdGhlIHZpcnR1YWxpemVkIHN5c3RlbSYjMzk7cyBwZXJpcGhlcmFscyBlZmZlY3RpdmVseS4gQW55IGluc2lnaHRzIGludG8gb3B0aW1pemF0aW9ucyBmb3IgdGhpbmdzIGxpa2UgdmlydGlvIGRyaXZlcnMgb3Igc3BlY2lmaWMgaGFyZHdhcmUgZXh0ZW5zaW9ucyAobGlrZSBTVkUpIHdvdWxkIGJlIGEgYm9udXMsIGJ1dCBJIHdpbGwgYmUgaGFwcHkgdG8gbGVhcm4gYW5kIGV4cGxvcmUgYW55dGhpbmcgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gb24gQVJNNjQ6IENvbmZpZ3VyYXRpb24gSHVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gbnVhbmNlcyBvciBrbm9icyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIEFSTTY0IGFyY2hpdGVjdHVyZXMuIFdlIGFsbCBrbm93IHRoZSBiYXNpY3Mgb2YgdmlydHVhbGl6YXRpb24sIGJ1dCBBUk02NCBoYXMgaXRzIG93biBzZXQgb2YgcGVjdWxpYXJpdGllcywgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjYW4gYmUgYSB3aG9sZSBkaWZmZXJlbnQgYmVhc3QuIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIGp1c3QgdGhlIGdlbmVyaWMgQ1BVIGZlYXR1cmVzIGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogYXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIEkmIzM5O2xsIG5lZWQgZW5hYmxlZD8gQW55IGZpcm13YXJlIHJlcXVpcmVtZW50cyB0aGF0IG1pZ2h0IGJlIHVuaXF1ZSB0byBuZXN0ZWQgc2NlbmFyaW9zPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGNhdmVhdHMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGh5cGVydmlzb3IgY2hvc2VuIChsaWtlIEtWTSBvciBYZW4pPyBNYXliZSBjZXJ0YWluIG9wdGltaXphdGlvbnMgb3IgbWl0aWdhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBhdCB0aGUgaG9zdCBvciBndWVzdCBsZXZlbD8gSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBhbGwgdGhlIHBvdGVudGlhbCBnb3RjaGFzIGJlZm9yZSBJIGV2ZW4gc3RhcnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRvIGZpbmQgdGhlIHNwZWNpZmljIGRvY3VtZW50YXRpb24gb3IgYmVzdCBwcmFjdGljZXMsIG9yIHdoZXRoZXIgSSBuZWVkIHRvIGdldCByZWFkeSB0byBkZWVwIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYSBjdXN0b20gY29uZmlndXJhdGlvbiB0byBnZXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdvcmtpbmcgb3B0aW1hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQXJtNjQgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHRpbmdzIGFyZSBkZWZpbmVkIGZvciB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBUaGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGNlbnRyYWwgcGxhY2UgZm9yIGNvbmZpZ3VyaW5nIGZlYXR1cmVzLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIEl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCBvcHRpb25zIHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24sIGVzcGVjaWFsbHkgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBsaWtlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgd2lsbCBiZSBkZXNjcmliZWQgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMgZmlsZSBvciBiZSBpbmNsdWRlZCBmcm9tIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gbG9jYXRlIHRoZSBuZWNlc3Nhcnkgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVTVEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDoKCioqRGlnZ2luZyBpbnRvIGEgS1ZNIElzc3VlKioKCkhtbSwgY291bGQgdGhpcyBiZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gS1ZNIGNvbmZpZ3VyYXRpb24/IEl0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgQ09ORklHX0tWTWAg4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBwaWVjZS4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVgLiBUaGF0IE1ha2VmaWxlIHNob3VsZCB0ZWxsIG1lIGV4YWN0bHkgaG93IHRoaW5ncyBhcmUgYmVpbmcgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgaG9wZWZ1bGx5LCBpdCYjMzk7bGwgaWxsdW1pbmF0ZSB0aGlzIHNwZWNpZmljIGlzc3VlIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEl0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gTGV0JiMzOTtzIHNlZSB3aGF0IGNsdWVzIHRoaXMgTWFrZWZpbGUgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yMS1cdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyNjpcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cdCB2Z2ljL3ZnaWMtdjUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtWTSBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBBUk02NCBzaWRlLCBhbmQgaXQgbG9va3MgbGlrZSBgZW11bGF0ZS1uZXN0ZWQub2AgYW5kIGBuZXN0ZWQub2AgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpZiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwgYW5kIGRpcmVjdGx5IG1vZGlmaWVzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcywgc28gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgbW9zdCBpbnRlcmVzdGluZyBmdW5jdGlvbnMuCgpGcm9tIGEgcXVpY2sgc2tpbSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZDogYGt2bV90aW1lcl92Y3B1X2xvYWRgLCB0aGF0IHNlZW1zIGxpa2UgYSBob3QgcGF0aCB0byBsb29rIGludG8uIFRoZW4gdGhlcmUmIzM5O3MgYGNoZWNrX2ZlYXR1cmVfbWFwYCwgYGdldF9yZWdfZml4ZWRfYml0c2AsIGFuZCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgLCB3aGljaCBJJiMzOTtsbCBjYXRlZ29yaXplIGFzIGJlaW5nIG1vcmUgb24gdGhlIGluaXRpYWxpemF0aW9uIHNpZGUgb2YgdGhpbmdzLiBUaGVyZSYjMzk7cyBhIGZsdXJyeSBvZiBhY3Rpdml0eSBpbiB0aGUgYGh5cGAgZGlyZWN0b3J5LCB3aXRoIGBfX2FjdGl2YXRlX2NwdHJfdHJhcHNfdmhlYCwgYF9fYWN0aXZhdGVfdHJhcHNfY29tbW9uYCwgYF9fc3lzcmVnX3NhdmVfZWwxX3N0YXRlYCwgYF9fc3lzcmVnX3Jlc3RvcmVfZWwxX3N0YXRlYCwgYF9fY29tcHV0ZV9oY3JgLCBga3ZtX2h5cF9oYW5kbGVfZXJldGAsIGBrdm1faHlwX2hhbmRsZV9jcGFjcl9lbDFgLCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGFuZCBgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlYCBsaWtlbHkgYmVpbmcgcGVyZm9ybWFuY2UgY3JpdGljYWwgcGF0aHMsIGFsbCByZWxhdGluZyB0byB0aGUgaHlwZXJ2aXNvciYjMzk7cyBpbnRlcmFjdGlvbi4KCkZpbmFsbHksIGluIHRoZSBtYWluIEtWTSBkaXJlY3RvcnksIEkgc2VlIGBsaW1pdF9udl9pZF9yZWdgLCBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGFuZCBhIHNlcmllcyBvZiBzeXNyZWcgZnVuY3Rpb25zLCBsaWtlIGBsb2NhdGVfcmVnaXN0ZXJgLCBgcmVhZF9zcl9mcm9tX2NwdWAsIGB3cml0ZV9zcl90b19jcHVgLCBgdmNwdV9yZWFkX3N5c19yZWdgLCBgdmNwdV93cml0ZV9zeXNfcmVnYCwgYW5kIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAuIFRoYXQmIzM5O3MgYSBnb29kIG92ZXJ2aWV3LgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBsaW1pdF9udl9pZF9yZWdgLCBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGFuZCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIOKAkyB0aG9zZSBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSB0aGUgY29yZSBvZiB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLCBvciBhdCBsZWFzdCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpbWl0X252X2lkX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1NDc9c3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjA1LSAqL1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTYwNjp1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2MDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY1NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBga3ZtX2luaXRfbnZfc3lzcmVnc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBrdm1faW5pdF9udl9zeXNyZWdzYC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgS1ZNIGluaXRpYWxpemVzIHRoZSBub24tdm9sYXRpbGUgc3lzdGVtIHJlZ2lzdGVycywgbGlrZWx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgY2VydGFpbiBhc3BlY3RzIG9mIHZpcnR1YWxpemF0aW9uIG9yIGd1ZXN0IHN0YXRlIHBlcnNpc3RlbmNlLiBJdCYjMzk7cyBhIGNydWNpYWwgZnVuY3Rpb24gYmVjYXVzZSBpZiB0aGVzZSByZWdpc3RlcnMgYXJlbiYjMzk7dCBwcm9wZXJseSBjb25maWd1cmVkIGR1cmluZyBndWVzdCBzdGFydHVwLCB3ZSYjMzk7cmUgZ29pbmcgdG8gc2VlIGEgd2hvbGUgaG9zdCBvZiB1bnByZWRpY3RhYmxlIGJlaGF2aW9ycywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbnN0YWJpbGl0eSwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBvciBldmVuIGNvbXBsZXRlIGd1ZXN0IGZhaWx1cmVzLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgaXQmIzM5O3MgdG91Y2hpbmcg4oCTIHRoaW5ncyBsaWtlIE1TUl9JQTMyX1ZNX0NSLCBNU1JfSUEzMl9WTV9IU0FWRV9QQSwgYW5kIG90aGVycyBhc3NvY2lhdGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gQXJlIHRoZXkgYmVpbmcgc2V0IHRvIGEgc2FmZSwga25vd24gc3RhdGU/IElzIHRoZXJlIGEgY2hlY2sgZm9yIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBtb2RpZnkgdGhlbT8gVGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWxzIGhlcmUsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIGVhY2ggcmVnaXN0ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBvbWlzc2lvbnMgb3IgdW5leHBlY3RlZCB2YWx1ZXMuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCBvbiBkaWZmZXJlbnQgQ1BVIGFyY2hpdGVjdHVyZXMuIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgaGFyZHdhcmUgdmFyaWF0aW9ucyBjYW4gaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHdlbGwtY29tbWVudGVkLCByb2J1c3QgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGlzIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcmVsaWFibGUgYW5kIHNlY3VyZSB2aXJ0dWFsIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2luaXRfbnZfc3lzcmVncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF9zeXNyZWdfbWFza3Moc3RydWN0IGt2bSAqa3ZtLCBpbnQgc3IsIHN0cnVjdCByZXN4IHJlc3gpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTc5OC1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE3OTk6aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBSZWdpc3RlciBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYG52aGNyX2VsMl92aXNpYmlsaXR5YC4mIzM0OyBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIEkga25vdyB0aGlzIHJlZ2lzdGVyIGludGltYXRlbHk7IGl0JiMzOTtzIHRoZSBnYXRld2F5LCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuIEl0JiMzOTtzIG5vdCBhIHN1Z2dlc3Rpb24sIGl0JiMzOTtzIGEgKmNoZWNrKi4gSSBhbHJlYWR5IGhhdmUgYSBtZW50YWwgbW9kZWwgb2Ygd2hhdCBpdCAqc2hvdWxkKiBjb250YWluLCBnaXZlbiB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZSwgYnV0IEkgbmVlZCBhIGNvbmNyZXRlIGRhdGEgcG9pbnQuIEkmIzM5O20gbm90IGp1c3QgaWRseSBjdXJpb3VzOyBJJiMzOTttIHN5c3RlbWF0aWNhbGx5IHRyYWNpbmcgYSBwb3RlbnRpYWwgaXNzdWUsIHZlcmlmeWluZyBteSBhc3N1bXB0aW9ucywgb3IgcHJlcGFyaW5nIHRvIGFkZHJlc3MgYSBzcGVjaWZpYyBwcm9ibGVtLiBLbm93aW5nIHRoZSBleGFjdCB2YWx1ZSBvZiBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MgZ2l2ZXMgbWUgY3JpdGljYWwgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZoY3JfZWwyX3Zpc2liaWxpdHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9Mjg3MD1zdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjg3OS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6Mjg4MDpzdGF0aWMgdW5zaWduZWQgaW50IG52aGNyX2VsMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjg4MS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zMjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTM4MDMtXHRFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjM4MDQ6XHRcdFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzgwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFN5c3RlbSBSZWdpc3RlciBIYW5kbGluZyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHN5c3RlbSByZWdpc3RlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZXNlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnM6IGB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzLCB0aGUgbGluY2hwaW5zIG9mIG1hbmFnaW5nIHRoZSB2aXJ0dWFsIENQVSYjMzk7cyB2aWV3IG9mIHRoZSBhcmNoaXRlY3R1cmFsIHN0YXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGRvLCBJIHN1c3BlY3QsIHRoZXNlIGxvdy1sZXZlbCBmdW5jdGlvbnMgcHJvYmFibHkgc2l0IHJpZ2h0IGluIHRoZSBtaWRkbGUgb2YgYWxsIHRoZSByZWdpc3Rlci1hY2Nlc3Mgb3BlcmF0aW9ucy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLCB3aGF0IHRoZWlyIGxvZ2ljIGlzIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCBob3cgd2UgYXJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgdmlydHVhbCBtYWNoaW5lJiMzOTtzIHN5c3RlbSByZWdpc3RlcnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrLCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbS4gSSBiZXQgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzIGhlcmUgYW5kIHRoYXQgdGhpcyBpcyB3aGVyZSB3ZSBoYXZlIHByb2JsZW1zIHdpdGggaGFuZGxpbmcgdGhlIGNvcnJlY3Qgc3RhdGUgb2YgdGhlIHJlZ2lzdGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNwdV9yZWFkX3N5c19yZWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9Mjg0PXN0YXRpYyB2b2lkIHdyaXRlX3NyX3RvX2NwdShlbnVtIHZjcHVfc3lzcmVnIHJlZywgdTY0IHZhbClcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTMyMC1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MzIxOnU2NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0zMjIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NTI0PXN0YXRpYyBib29sIGFjY2Vzc19ydyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy01MzAtXHRlbHNlXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjUzMTpcdFx0cC1cdTAwM2VyZWd2YWwgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZyk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUzMi1cbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTYwNC1cdGlmICh+bWFzaykge1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo2MDU6XHRcdHZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjA2LVx0XHR2YWwgXHUwMDI2PSB+bWFzaztcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTYxOD1zdGF0aWMgYm9vbCBhY2Nlc3NfYWN0bHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjI3LVx0Z2V0X2FjY2Vzc19tYXNrKHIsIFx1MDAyNm1hc2ssIFx1MDAyNnNoaWZ0KTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NjI4Olx0cC1cdTAwM2VyZWd2YWwgPSAodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcpIFx1MDAyNiBtYXNrKSBcdTAwM2VcdTAwM2Ugc2hpZnQ7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTYyOS1cbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI2MTI9c3RhdGljIGJvb2wgYWNjZXNzX2Nzc2VscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MTktXHRlbHNlXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjI2MjA6XHRcdHAtXHUwMDNlcmVndmFsID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgcmVnKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYyMS1cdHJldHVybiB0cnVlO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjYyND1zdGF0aWMgYm9vbCBhY2Nlc3NfY2NzaWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYzMS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MjYzMjpcdGNzc2VsciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIENTU0VMUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yNjMzLVx0Y3NzZWxyIFx1MDAyNj0gQ1NTRUxSX0VMMV9MZXZlbCB8IENTU0VMUl9FTDFfSW5EO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjgwOD1zdGF0aWMgYm9vbCBhY2Nlc3NfZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI4MTQtXHRlbHNlXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjI4MTU6XHRcdHAtXHUwMDNlcmVndmFsID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgRUxSX0VMMSk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI4MTYtXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MDc5PXN0YXRpYyBib29sIGhhbmRsZV92bWFsbHMxMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg3LVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MDg4Olx0dnR0YnIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBWVFRCUl9FTDIpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg5LVx0bGltaXQgPSBCSVRfVUxMKGt2bV9nZXRfcGFfYml0cyh2Y3B1LVx1MDAzZWt2bSkpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDEwMz1zdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDYtXHR1MzIgc3lzX2VuY29kaW5nID0gc3lzX2luc24ocC1cdTAwM2VPcDAsIHAtXHUwMDNlT3AxLCBwLVx1MDAzZUNSbiwgcC1cdTAwM2VDUm0sIHAtXHUwMDNlT3AyKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDEwNzpcdHU2NCB2dHRiciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFZUVEJSX0VMMik7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDgtXHR1NjQgYmFzZSwgcmFuZ2U7XG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MTU4PXN0YXRpYyBib29sIGhhbmRsZV9pcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTYxLVx0dTMyIHN5c19lbmNvZGluZyA9IHN5c19pbnNuKHAtXHUwMDNlT3AwLCBwLVx1MDAzZU9wMSwgcC1cdTAwM2VDUm4sIHAtXHUwMDNlQ1JtLCBwLVx1MDAzZU9wMik7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxNjI6XHR1NjQgdnR0YnIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBWVFRCUl9FTDIpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUyMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkFuYWx5emluZyBgdmNwdV93cml0ZV9zeXNfcmVnYCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gbG9vayBhdCBgdmNwdV93cml0ZV9zeXNfcmVnYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBjb250ZXh0LiBXaHkgYXJlIHdlIGV2ZW4gZXhhbWluaW5nIHRoaXMgZnVuY3Rpb24/IElzIGl0IHJlbGF0ZWQgdG8gYSByZWNlbnQgYnVnIHJlcG9ydD8gUGVyZm9ybWFuY2UgdHVuaW5nPyBTZWN1cml0eSBhbmFseXNpcz8gS25vd2luZyB0aGUgb2JqZWN0aXZlIHdpbGwgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggaXQuCgpJJiMzOTtsbCBzdGFydCBieSBtYWtpbmcgc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvZiB3aGF0ICYjMzQ7c3lzX3JlZyYjMzQ7IHJlZmVycyB0by4gSXQmIzM5O3MgbGlrZWx5IGEgc3lzdGVtLWxldmVsIHJlZ2lzdGVyIHdpdGhpbiB0aGUgdmlydHVhbCBDUFUmIzM5O3MgY29udGV4dC4gVW5kZXJzdGFuZGluZyB3aGljaCBhcmNoaXRlY3R1cmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAoeDg2LCBBUk0sIGV0Yy4pIGlzIGNydWNpYWwgaGVyZSwgYXMgdGhlIHNwZWNpZmljIHN5c3RlbSByZWdpc3RlcnMgYW5kIHRoZWlyIGZ1bmN0aW9ucyBhcmUgaGlnaGx5IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgdmNwdV93cml0ZV9zeXNfcmVnYC4gU3BlY2lmaWNhbGx5IEkmIzM5O2xsIG5lZWQgdG8ga25vdzoKKiAgICoqV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyoqIElzIHRoZXJlIGEgYHZjcHVgIHN0cnVjdD8gQSByZWdpc3RlciBzdGF0ZSBzdHJ1Y3R1cmU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc2hhZG93IHJlZ2lzdGVycywgb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcz8gSG93IGRvZXMgdGhlIHN0cnVjdHVyZSBjaGFuZ2UgZHVyaW5nIHRoZSB3cml0ZXM/CiogICAqKldoYXQgYXJlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSByZWdpc3RlcnMgYmVpbmcgd3JpdHRlbiB0bz8qKiBBbmQgd2hhdCBhcmUgdGhlaXIgbWVhbmluZ3M/IFdoaWNoIHJlZ2lzdGVycyBhcmUgY29uc2lkZXJlZCBjcml0aWNhbCwgYW5kIHdoaWNoIGNhbiBiZSBtb3JlIHNhZmVseSBtb2RpZmllZC4KKiAgICoqV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcz8qKiBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHJlZ2lzdGVyIHZhbHVlcywgb3IgYWNjZXNzIHBlcm1pc3Npb25zPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBjb25jZXJucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHZDUFVzIGNvbmN1cnJlbnRseT8KCkZyb20gdGhlcmUsIEkmIzM5O2xsIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSB2Q1BVLiBXaGF0IGtpbmQgb2YgdmFsaWRhdGlvbiBpcyBiZWluZyBkb25lIGJlZm9yZSBgdmNwdV93cml0ZV9zeXNfcmVnYD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmU/IEFyZSBhbnkgYXNzdW1wdGlvbnMgbWFkZSByZWdhcmRpbmcgdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0mIzM5O3MgYmVoYXZpb3I/CgpGaW5hbGx5LCBpZiBJIGFtIGRvaW5nIHRoaXMgZm9yIGEgc3BlY2lmaWMgcHVycG9zZSwgbGlrZSBhIGJ1ZywgSSB3aWxsIGxpa2VseSB0aGVuIGJlIGxvb2tpbmcgZm9yIHNwZWNpZmljIGJlaGF2aW9yLCBzdWNoIGFzIHRyYWNpbmcgZG93biB0aGUgZmxvdyBvZiB0aGUgY29kZSwgdG8gc2VlIGhvdyB0aGUgd3JpdGUgaW1wYWN0cyBsYXRlciBhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X3dyaXRlX3N5c19yZWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MzIxPXU2NCB2Y3B1X3JlYWRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzc0LVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzozNzU6dm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzc2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTUyND1zdGF0aWMgYm9vbCBhY2Nlc3Nfcncoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNTI4LVx0aWYgKHAtXHUwMDNlaXNfd3JpdGUpXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjUyOTpcdFx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIHAtXHUwMDNlcmVndmFsLCByLVx1MDAzZXJlZyk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUzMC1cdGVsc2Vcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTYxMS1cdHZhbCB8PSAocC1cdTAwM2VyZWd2YWwgXHUwMDI2IChtYXNrIFx1MDAzZVx1MDAzZSBzaGlmdCkpIFx1MDAzY1x1MDAzYyBzaGlmdDtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NjEyOlx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIHZhbCwgci1cdTAwM2VyZWcpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy02MTMtXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0xMDAwPXN0YXRpYyB1NjQgcmVzZXRfYW1haXJfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMDItXHR1NjQgYW1haXIgPSByZWFkX3N5c3JlZyhhbWFpcl9lbDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDAzOlx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIGFtYWlyLCBBTUFJUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDA0LVx0cmV0dXJuIGFtYWlyO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAwNz1zdGF0aWMgdTY0IHJlc2V0X2FjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMDktXHR1NjQgYWN0bHIgPSByZWFkX3N5c3JlZyhhY3Rscl9lbDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDEwOlx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIGFjdGxyLCBBQ1RMUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDExLVx0cmV0dXJuIGFjdGxyO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAxND1zdGF0aWMgdTY0IHJlc2V0X21waWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMjgtXHRtcGlkciB8PSAoMVVMTCBcdTAwM2NcdTAwM2MgMzEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDI5Olx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIG1waWRyLCBNUElEUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDMwLVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjYxMj1zdGF0aWMgYm9vbCBhY2Nlc3NfY3NzZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYxNy1cdGlmIChwLVx1MDAzZWlzX3dyaXRlKVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyNjE4Olx0XHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgcC1cdTAwM2VyZWd2YWwsIHJlZyk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MTktXHRlbHNlXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0yODA4PXN0YXRpYyBib29sIGFjY2Vzc19lbHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxMi1cdGlmIChwLVx1MDAzZWlzX3dyaXRlKVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyODEzOlx0XHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgcC1cdTAwM2VyZWd2YWwsIEVMUl9FTDEpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yODE0LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIyOQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IHN5c3RlbSByZWdpc3RlciwgYE5WSENSX0VMMmAsIGFuZCB0d2Vha3MgdGhlIGV4aXN0aW5nIHN5c3RlbSByZWdpc3RlciByZWFkL3dyaXRlIGZ1bmN0aW9ucyAoYHZjcHVfcmVhZF9zeXNfcmVnYCBhbmQgYHZjcHVfd3JpdGVfc3lzX3JlZ2ApIHRvIGhhbmRsZSBgQ1BUUl9FTDJgIHdpdGggdGhlIG5ldyBsb2dpYywgY29udGluZ2VudCBvbiBgQVJNNjRfSEFTX05WMlAxYCBiZWluZyBkZWZpbmVkLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2NvbXB1dGVfaGNyYCB0byB3cml0ZSB0byBlaXRoZXIgYE5WSENSX0VMMmAgb3IgYFNZU19OVkhDUl9FTDJgLCBhbmQgaW1wb3J0YW50bHksIGNoYW5nZXMgYGZpeHVwX2d1ZXN0X2V4aXRgIHRvIGNhbGwgYGZpeHVwX252X2d1ZXN0X2V4aXRgLCB3aGljaCByZWFkcyBgTlZIQ1JfRUwyYCBhbmQgYXNzaWducyBpdHMgdmFsdWUgdG8gYEhDUl9FTDJgLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yazsgZGVmaW5pdGVseSB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGBsaW1pdF9udl9pZF9yZWdgLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgLCBhbmQgYF9fY29tcHV0ZV9oY3JgLgoKQWhhISBOb3cgSSYjMzk7bSByZW1lbWJlcmluZyB0aGF0IGBfX2NvbXB1dGVfaGNyYCwgYGZpeHVwX252X2d1ZXN0X2V4aXRgLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgcmVzaWRlIHdpdGhpbiB0aGUgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY2AgZmlsZXMuIFRoaXMgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBpbiBFTDIg4oCTIHRoZSBoeXBlcnZpc29yJiMzOTtzIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpcyBjYW4gc3l6a2FsbGVyIGJlIHVzZWQgdG8gdGFyZ2V0IHRoZW0/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnkgcnVubmluZyBLVk0gZ3Vlc3RzLgoKQWxyaWdodCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGFsbCB0aGUgZHVja3MgaW4gYSByb3cuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gd29yaywgYmV5b25kIHRoZSBvYnZpb3VzLiBJIHJhbiBhIHF1aWNrIHNlYXJjaCBmb3IgYE5FU1RFRGAgaW4gYm90aCBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AgYW5kIHRoZSB0b3AtbGV2ZWwgYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIGJ1dCBjYW1lIHVwIGVtcHR5LiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgYGFyY2gvYXJtNjQva3ZtL01ha2VmaWxlYC4gQmluZ28hIEl0IGxvb2tzIGxpa2UgYGVtdWxhdGUtbmVzdGVkLm9gIGFuZCBgbmVzdGVkLm9gIGFyZSBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGFzIGxvbmcgYXMgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFNvIGl0IHNlZW1zIHRoYXQgYEtWTWAgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IGNvbmZpZ3VyYXRpb24uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSBgQVJNNjRfSEFTX05FU1RFRF9WSVJUYCBpbiBgYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJNNjRfSEFTX05FU1RFRF9WSVJUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xODg3PXN0YXRpYyBib29sIGhhc19udjEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MDMtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTkwNDpcdHJldHVybiAoX19zeXN0ZW1fbWF0Y2hlc19jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcdTAwMjZcdTAwMjZcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTA1LVx0XHQhKGhhc19jcHVpZF9mZWF0dXJlKGVudHJ5LCBzY29wZSkgfHxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjU0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYwOS1cdFx0LmRlc2MgPSBcJiMzNDtOZXN0ZWQgVmlydHVhbGl6YXRpb24gU3VwcG9ydFwmIzM0OyxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNjEwOlx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19ORVNURURfVklSVCxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNjExLVx0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIEFSTTY0IGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlIGlzbiYjMzk7dCBhIGRlZGljYXRlZCBgQ09ORklHX0FSTTY0X05FU1RFRF9WSVJUYCBvcHRpb24sIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gSW5zdGVhZCwgaXQgc2VlbXMgd2UgbmVlZCB0byBsb29rIGF0IHRoZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGRldGVybWluZSBzdXBwb3J0LgoKVGhlIG5leHQgdGhvdWdodCBpcywgd2hhdCBhYm91dCBgQ09ORklHX0FSTTY0X1ZIRWA/IEFoIHllcywgVmlydHVhbGl6YXRpb24gSG9zdCBFeHRlbnNpb25zLiBUaGF0IHJpbmdzIGEgYmVsbC4gTmVzdGVkIHZpcnR1YWxpemF0aW9uICpkb2VzKiBkZXBlbmQgb24gVkhFLCB0aGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGNhc2Ugb24gQVJNNjQuIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBpc24mIzM5O3QgVkhFIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIEtWTT8gT3IgbWF5YmUgcGFydCBvZiBLVk0mIzM5O3MgYmFzZSBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbiBiZWNhdXNlIGl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIGlmIGl04oCZcyBleHBsaWNpdGx5IHJlcXVpcmVkIG9yIGluaGVyZW50bHkgcHJlc2VudC4gTGV0IG1lIG1ha2Ugc3VyZSBJIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUk02NF9WSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUgaW4gdGhlIExpbnV4IGtlcm5lbC4gV2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGUgc2V0dGluZ3M/IE5hdHVyYWxseSwgaXQmIzM5O3MgZ29pbmcgdG8gYmUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBkZXRhaWxzIG9uIGhvdyB0aGUgS1ZNIGZ1bmN0aW9uYWxpdHkgaXMgY29uZmlndXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGVsdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgb3B0aW9ucyBmb3IgZW5hYmxpbmcgS1ZNLCBkZWZpbmluZyBzcGVjaWZpYyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHNvbWUgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoZSBrZXkgbGllcyB3aXRoaW4gdGhlc2UgZm9jdXMgc3ltYm9scy4gTGV0JiMzOTtzIGJyZWFrIHRoZW0gZG93bi4gSSBoYXZlOgoKKiAgIGBrdm1faW5pdF9udl9zeXNyZWdzYAoqICAgYGxpbWl0X252X2lkX3JlZ2AKKiAgIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAKKiAgIGBmaXh1cF9udl9ndWVzdF9leGl0YAoqICAgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAKKiAgIGBfX2NvbXB1dGVfaGNyYAoKQWxyaWdodCwgaW1tZWRpYXRlbHkgSSByZWNvZ25pemUgdGhhdCBgX19jb21wdXRlX2hjcmAgYW5kIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgIHJlc2lkZSBpbiB0aGUgaHlwZXJ2aXNvciBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmNgLiBUaGlzIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIEkgaGF2ZSB0byBiZSBzdXJlIGFib3V0IGBmaXh1cF9udl9ndWVzdF9leGl0YC4gSSBiZWxpZXZlIGl0JiMzOTtzIHN0YXRpYy4uLiB5ZXMsIGNvbmZpcm1lZCwgaXQmIzM5O3MgYWxzbyBzdGF0aWMgd2l0aGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYC4gR29vZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcnJlY3QgbmFtZS4gSSByZW1lbWJlciBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoLiBPa2F5LCBhbmQgYF9fY29tcHV0ZV9oY3JgIGlzIHN0YXRpYyB0b28sIGFuZCBpdCBjb21wdXRlcyB0aGUgSENSLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgc2F2ZXMgdGhlIFZFTDIgc3RhdGUuIGBrdm1faW5pdF9udl9zeXNyZWdzYCBpcyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIGBsaW1pdF9udl9pZF9yZWdgIGxpbWl0cyB0aGUgTlYgSUQgcmVnaXN0ZXIuIEZpbmFsbHksIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAgY2hlY2tzIHRoZSB2aXNpYmlsaXR5LgoKVGhlc2Ugc3ltYm9scyBzZWVtIHRvIGJlIHdlbGwtY2hvc2VuLiBUaGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgY29kZSBJIGFtIGludGVyZXN0ZWQgaW4uIFRoZXkmIzM5O3JlIG5vdCBqdXN0IGdlbmVyaWMsIHBvdGVudGlhbGx5IGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXIgdGhhbiB0aGUgb25lcyB0aGF0IGFyZSBjYWxsZWQgb24gdGhlIGd1ZXN0IGV4aXQuIEJ1dCwgZXZlbiB0aG9zZSBmdW5jdGlvbnMgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBsb2dpYyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFdhaXQsIGBfX2NvbXB1dGVfaGNyYCBpcyBjYWxsZWQgb24gZXZlcnkgZ3Vlc3QgZW50cnkuIEl0IGNvdWxkIGJlIGEgaG90IHBhdGgsIHRob3VnaC4gTGV0JiMzOTtzIHNlZS4uLiBhbmQgYGZpeHVwX252X2d1ZXN0X2V4aXRgIGlzIGNhbGxlZCBmcm9tIGBmaXh1cF9ndWVzdF9leGl0YCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBjYWxsZWQgb24gKmV2ZXJ5KiBndWVzdCBleGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhvc2UuCgpQZXJoYXBzIEkgc2hvdWxkIHJlZm9jdXMgb24gdGhlIGluaXQgYW5kIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gaG90IHBhdGhzLiBMZXQmIzM5O3Mgc3RpY2sgd2l0aDoKCiogICBga3ZtX2luaXRfbnZfc3lzcmVnc2AKKiAgIGBsaW1pdF9udl9pZF9yZWdgCiogICBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgCiogICBBbmQsIGFzIGFuIGV4dHJhLCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgIGZyb20gYGFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYz0yMjk3PXN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2FsbF9mZ3RfbWFza3MoaW50IHJldClcbi0tXG5hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jLTIzMjUtXG5hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jOjIzMjY6aW50IF9faW5pdCBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyh2b2lkKVxuYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYy0yMzI3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3MzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTlYgQWNjZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHJlbGF0ZWQgdG8gTlYgYWNjZXNzLiBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgIGxvb2tzIGxpa2UgYSBub24tc3RhcnRlci4gSXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGR1cmluZyBib290LCBtZWFuaW5nIG5vIHVzZXItY29udHJvbGxlZCBpbnB1dC4gTm90IGlkZWFsLgoKSG93ZXZlciwgYGxpbWl0X252X2lkX3JlZ2AgaXMgY2FsbGVkIHdoZW4gdXNlcnNwYWNlIHJlYWRzIElEIHJlZ2lzdGVycy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBwcm9taXNpbmcuIFRoZW4gSSBzZWUgYGt2bV9pbml0X252X3N5c3JlZ3NgLCBjYWxsZWQgd2hlbiBhIHZDUFUgaW5pdGlhbGl6ZXMsIGFuZCB0aGF0IHNlZW1zIGxpa2UgYSBzb2xpZCB0YXJnZXQgdG9vLiBOZXh0IHVwLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIGlzIGNhbGxlZCB3aGVuIHVzZXJzcGFjZSBhY2Nlc3NlcyB0aGUgc3lzdGVtIHJlZ2lzdGVyLCB3aGljaCBpcyBncmVhdC4KCmB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgIGFyZSBpbnRlcmVzdGluZywgYXMgdGhleSYjMzk7dmUgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgYENQVFJfRUwyYCBhbmQgYENOVEhDVExfRUwyYC4gVGhlc2UgYXJlIGNhbGxlZCBhbnl0aW1lIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QgYWNjZXNzZXMgc3lzdGVtIHJlZ2lzdGVycy4gVGhleSYjMzk7cmUgcG90ZW50aWFsbHkgZ29vZCwgYnV0IHRoZXkmIzM5O3JlIHByZXR0eSBnZW5lcmFsLCB3aGljaCBtaWdodCBtYWtlIGZ1enppbmcgbGVzcyBlZmZlY3RpdmUuIFBlcmhhcHMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhlc2UuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGt2bV9oYXNfbnYyYCBhbmQgYGt2bV9oYXNfbnYzYC4gVGhleSYjMzk7cmUgaW5saW5lIGZ1bmN0aW9ucywgc28gcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB0YXJnZXRzLgoKT2theSwgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgb3V0IGB0aW1lcl9zZXRfdHJhcHNgIGluIGBhcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgY291bGQgbGVhZCBzb21ld2hlcmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpbWVyX3NldF90cmFwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM9NzQ3PXN0YXRpYyB2b2lkIGt2bV90aW1lcl92Y3B1X2xvYWRfbmVzdGVkX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTc4MC1cbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYzo3ODE6c3RhdGljIHZvaWQgdGltZXJfc2V0X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHRpbWVyX21hcCAqbWFwKVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTc4Mi17XG4tLVxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jPTg4OT12b2lkIGt2bV90aW1lcl92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYy05MjAtXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM6OTIxOlx0dGltZXJfc2V0X3RyYXBzKHZjcHUsIFx1MDAyNm1hcCk7XG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMtOTIyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIFRpbWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGB0aW1lcl9zZXRfdHJhcHNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGdldHRpbmcgY2FsbGVkIHdoZW5ldmVyIGEgdkNQVSBnZXRzIGxvYWRlZCBvbnRvIGEgcGh5c2ljYWwgQ1BVIOKAkyBga3ZtX3RpbWVyX3ZjcHVfbG9hZGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGhvdCBwYXRoIHNpdHVhdGlvbiwgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhLCBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwgd2l0aCBpdC4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBpcyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgcGF0aCwgcGFydGljdWxhcmx5IGlmIHdlJiMzOTtyZSBzZWVpbmcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KClNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IGBhcm02NGAsIGFuZCB0aGUgdGltZXIgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgYXJjaC9hcm02NC9rdm0vY29uZmlnLmNgIGFuZCB0YWtlIGEgbG9vayBhdCBgY2hlY2tfZmVhdHVyZV9tYXBgLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBob3cgdGhlIHRpbWVycyBhcmUgY29uZmlndXJlZCBvciB3aGF0IGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZlYXR1cmUgc2V0LCBhbmQgcG90ZW50aWFsbHkgdGhlIGNvbmZpZ3VyYXRpb24sIHdpbGwgb2ZmZXIgY2x1ZXMgdG8gdGhlIGhvdCBwYXRoIGxvZ2ljIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdkNQVSBsb2FkaW5nIGFuZCB0aW1lciBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfZmVhdHVyZV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYz0xMzc2PXN0YXRpYyB2b2lkIF9faW5pdCBjaGVja19yZWdfZGVzYyhjb25zdCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2MgKnIpXG4tLVxuYXJjaC9hcm02NC9rdm0vY29uZmlnLmMtMTM4MS1cbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jOjEzODI6dm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jLTEzODMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbml0aWFsaXphdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgY2hlY2tfZmVhdHVyZV9tYXBgIGlzIGJlaW5nIGRlZmluZWQgd2l0aGluIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBhYm91dCBpbml0aWFsaXppbmcgc29tZXRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0LiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSBgZ2V0X3JlZ19maXhlZF9iaXRzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC9hcm02NC9rdm0vY29uZmlnLmNgLiBUaGF0IGZpbGUgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgZmlsZSBwYXRoLiBJdCB3aWxsIGhvcGVmdWxseSBwcm92aWRlIHNvbWUgY29udGV4dCBmb3IgYGNoZWNrX2ZlYXR1cmVfbWFwYCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBBUk02NCBLVk0gY29uZmlndXJhdGlvbi4gSSBleHBlY3QgdGhhdCBkaWdnaW5nIGludG8gdGhhdCBmdW5jdGlvbiB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGZlYXR1cmUgbWFwJiMzOTtzIHB1cnBvc2UgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgb3IgdmFsaWRhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcmVnX2ZpeGVkX2JpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9jb25maWcuYz0xNTA5PXZvaWQgY29tcHV0ZV9mZ3Uoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGZndF9ncm91cF9pZCBmZ3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vY29uZmlnLmMtMTU1Mi1cbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jOjE1NTM6c3RydWN0IHJlc3ggZ2V0X3JlZ19maXhlZF9iaXRzKHN0cnVjdCBrdm0gKmt2bSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NzcKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogNDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSB0YXJnZXQgaXMgdkNQVSBpbml0aWFsaXphdGlvbiwgYW5kIGBnZXRfcmVnX2ZpeGVkX2JpdHNgIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdGhhdCBhcmUgd29ydGggZm9jdXNpbmcgb24gZm9yIGZ1enppbmcuCgpNeSBsaXN0IG9mIGNhbmRpZGF0ZSBmb2N1cyBzeW1ib2xzIGluY2x1ZGVzOiBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGBsaW1pdF9udl9pZF9yZWdgLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLCBhbmQgYGdldF9yZWdfZml4ZWRfYml0c2AuIFRoZXNlIGFyZSBhbGwgZGlyZWN0bHkgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiBvciBrZXkgcmVnaXN0ZXIgbG9naWMgd2l0aGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaW1wbGVtZW50YXRpb24uIExvb2tpbmcgZnVydGhlciwgSSYjMzk7bGwgYWRkIGBmaXh1cF9udl9ndWVzdF9leGl0YCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgb24gdGhlIGV4aXQgcGF0aC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgYE5WSENSX0VMMmAgbG9naWMsIHdoaWNoIGlzIG5ldy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIHBhdGNoIGFmZmVjdHMgYGFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLCBhbmQgdGhlc2UgZmlsZXMgYXJlIGNvbXBpbGVkIG9ubHkgd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ7IHRoZSBgS1ZNYCBjb25maWcgaXMgc3VmZmljaWVudCB0byBidWlsZCB0aGVzZSBjb2RlIHBhdGhzLiBObyBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgYXBwYXJlbnQuCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHZpZXcgZm9yIGZ1enppbmc6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgYSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb24gd2l0aCBjbGVhciBlbnRyeSBwb2ludHMuCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBrdm1faW5pdF9udl9zeXNyZWdzYAogICAgKiAgIGBsaW1pdF9udl9pZF9yZWdgCiAgICAqICAgYG52aGNyX2VsMl92aXNpYmlsaXR5YAogICAgKiAgIGBnZXRfcmVnX2ZpeGVkX2JpdHNgCiAgICAqICAgYGZpeHVwX252X2d1ZXN0X2V4aXRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEtWTWAKCk15IHJlYXNvbmluZyBpcyBzaW1wbGUuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyBhbmQgdjJwMSBzdXBwb3J0IGluIEtWTS4gSXQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBLVk0gaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluY2x1ZGluZyB0aGUgc3lzcmVncyAoTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZsb3cuIFRoaXMgbWVhbnMgdGhhdCBieSBydW5uaW5nIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIEtWTSBndWVzdCwgd2UgY2FuIGFjdGl2YXRlIHRoZSBhZmZlY3RlZCBjb2RlIHRvIGJlIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pbml0X252X3N5c3JlZ3MmIzM0OywKICAgICYjMzQ7bGltaXRfbnZfaWRfcmVnJiMzNDssCiAgICAmIzM0O252aGNyX2VsMl92aXNpYmlsaXR5JiMzNDssCiAgICAmIzM0O2dldF9yZWdfZml4ZWRfYml0cyYjMzQ7LAogICAgJiMzNDtmaXh1cF9udl9ndWVzdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW5pdF9udl9zeXNyZWdzJiMzNDssCiAgICAmIzM0O2xpbWl0X252X2lkX3JlZyYjMzQ7LAogICAgJiMzNDtudmhjcl9lbDJfdmlzaWJpbGl0eSYjMzQ7LAogICAgJiMzNDtnZXRfcmVnX2ZpeGVkX2JpdHMmIzM0OywKICAgICYjMzQ7Zml4dXBfbnZfZ3Vlc3RfZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyAoRkVBVF9OVjMpIGFuZCBGRUFUX05WMnAxIGluIEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgc3lzcmVnIGhhbmRsaW5nIChlLmcuLCBOVkhDUl9FTDIsIENQVFJfRUwyLCBDTlRIQ1RMX0VMMiksIHRyYXAgY29uZmlndXJhdGlvbiwgYW5kIGd1ZXN0IGV4aXQgZml4dXBzLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBieSBydW5uaW5nIEtWTSBndWVzdHMgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE3LjczMTQ5MTczMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjUxMDEyNzI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW5pdF9udl9zeXNyZWdzXCIsXG4gICAgXCJsaW1pdF9udl9pZF9yZWdcIixcbiAgICBcIm52aGNyX2VsMl92aXNpYmlsaXR5XCIsXG4gICAgXCJnZXRfcmVnX2ZpeGVkX2JpdHNcIixcbiAgICBcImZpeHVwX252X2d1ZXN0X2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyAoRkVBVF9OVjMpIGFuZCBGRUFUX05WMnAxIGluIEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgc3lzcmVnIGhhbmRsaW5nIChlLmcuLCBOVkhDUl9FTDIsIENQVFJfRUwyLCBDTlRIQ1RMX0VMMiksIHRyYXAgY29uZmlndXJhdGlvbiwgYW5kIGd1ZXN0IGV4aXQgZml4dXBzLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgY2FuIGJlIHRlc3RlZCBieSBydW5uaW5nIEtWTSBndWVzdHMgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MTcuNzMxNDk5NDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE2NTE2MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDhkYTYyYTNjZWRiZjg4ZmYzZTY4YWFjOTdiZDFkMGJhOWE3ZGIwM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE2OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG5pbmRleCBhNTc4NzBmYTk2ZGI1Yi4uYTQyNjgzYWY3OWZiNWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbkBAIC05NjgsNiArOTY4LDcgQEAgc3RydWN0IGFybTY0X2Z0cl9yZWcgKmdldF9hcm02NF9mdHJfcmVnKHUzMiBzeXNfaWQpO1xcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7XFxuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyMV9vdmVycmlkZTtcXG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnIyX292ZXJyaWRlO1xcbitleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjRfb3ZlcnJpZGU7XFxuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRwZnIwX292ZXJyaWRlO1xcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0cGZyMV9vdmVycmlkZTtcXG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHpmcjBfb3ZlcnJpZGU7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcXG5pbmRleCAzZjkyMzNiNWExMzA4MS4uZjZjZDg1MTA0Nzk0NzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaFxcbkBAIC0yODcsMjEgKzI4Nyw2IEBAXFxuIFxcdFxcdFxcdFxcdCBHRU5NQVNLKDE5LCAxOCkgfFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0IEdFTk1BU0soMTUsIDApKVxcbiBcXG4tLypcXG4tICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dFxcbi0gKiBhdCB0aGlzIHBvaW50IGluIHRpbWUuIEl0IGRvZXNuJ3QgbWVhbiB0aGF0IHdlIGFjdHVhbGx5ICpoYW5kbGUqXFxuLSAqIHRoZW0sIGJ1dCB0aGF0IGF0IGxlYXN0IHRob3NlIHRoYXQgYXJlIG5vdCBhZHZlcnRpc2VkIHRvIGEgZ3Vlc3RcXG4tICogd2lsbCBiZSBSRVMwIGZvciB0aGF0IGd1ZXN0Llxcbi0gKi9cXG4tI2RlZmluZSBfX0hDUlhfRUwyX01BU0tcXHRcXHQoQklUX1VMTCg2KSlcXG4tI2RlZmluZSBfX0hDUlhfRUwyX25NQVNLXFx0KEdFTk1BU0tfVUxMKDI0LCAxNCkgfCBcXFxcXFxuLVxcdFxcdFxcdFxcdCBHRU5NQVNLX1VMTCgxMSwgNykgIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHQgR0VOTUFTS19VTEwoNSwgMCkpXFxuLSNkZWZpbmUgX19IQ1JYX0VMMl9SRVMwXFx0XFx0fihfX0hDUlhfRUwyX25NQVNLIHwgX19IQ1JYX0VMMl9NQVNLKVxcbi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMVxcdFxcdH4oX19IQ1JYX0VMMl9uTUFTSyB8IFxcXFxcXG4tXFx0XFx0XFx0XFx0ICBfX0hDUlhfRUwyX01BU0sgIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHQgIF9fSENSWF9FTDJfUkVTMClcXG4tXFxuIC8qIEh5cCBQcmVmZXRjaCBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyIChIUEZBUi9IREZBUikgKi9cXG4gI2RlZmluZSBIUEZBUl9NQVNLXFx0KH5VTCgweGYpKVxcbiAvKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcXG5pbmRleCA1YmYzZDdlMWQ5MmM3Ny4uZDZmNDMyYjE1NThmNWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuQEAgLTI2Niw2ICsyNjYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHZzZXJyb3Jfc3RhdGVfaXNfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgICAgIChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JYX0VMMikgXFx1MDAyNiBIQ1JYX0VMMl9UTUVBKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbnYyKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19udjMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0a3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19uZXN0ZWRfbnYzX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHJldHVybiAoaGFzX3ZoZSgpIFxcdTAwMjZcXHUwMDI2IGt2bV9oYXNfbnYzKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjYgaXNfbmVzdGVkX2N0eHQodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpIFxcdTAwMjYgSENSX0VMMl9OVikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKSBcXHUwMDI2IEhDUlhfRUwyX05WVEdFKSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBsYXlvdXQgb2YgU1BTUiBmb3IgYW4gQUFyY2gzMiBzdGF0ZSBpcyBkaWZmZXJlbnQgd2hlbiBvYnNlcnZlZCBmcm9tIGFuXFxuICAqIEFBcmNoNjQgU1BTUl9FTHggb3IgYW4gQUFyY2gzMiBTUFNSXyouIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBBQXJjaDMyXFxuQEAgLTYxNyw3ICs2MzcsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2luY3JfcGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSB1NjQgdmNwdV9zYW5pdGlzZWRfY3B0cl9lbDIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHU2NCBjcHRyID0gX192Y3B1X3N5c19yZWcodmNwdSwgQ1BUUl9FTDIpO1xcbitcXHR1NjQgY3B0ciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIENQVFJfRUwyKTtcXG4gXFxuIFxcdGlmICghdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSlcXG4gXFx0XFx0Y3B0ciA9IHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDEoY3B0cik7XFxuQEAgLTY4Niw2ICs3MDYsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X2hjcngoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0XFx0aWYgKGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRJU0FSMV9FTDEsIExTNjQsIExTNjRfVikpXFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfRW5BU1I7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBOVjMgaXMgYSBob3N0LXNwZWNpZmljIGV4dGVuc2lvbiwgYW5kIHdlIGFsd2F5cyB1c2UgaXRcXG4rXFx0XFx0ICogd2hlbiBwcmVzZW50IGFuZCB0aGF0IHRoZSBndWVzdCB1c2VzIE5WLiBJdCBtYXkgYmUgYmVcXG4rXFx0XFx0ICogaGlkZGVuIGZyb20gdGhlIGd1ZXN0IHRob3VnaC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB2Y3B1X2hhc19udih2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKSB7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfTlZUR0U7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBJZiB0aGUgZ3Vlc3QgaXMgTlYyLWNhcGFibGUsIHRoZW4gd2UgbmVlZCB0byBzZWVcXG4rXFx0XFx0XFx0ICogYWxsIHRoZSBUTEJJcywgYXMgY29uZmlndXJlZCBpbiBIQ1JfRUwyLlxcbitcXHRcXHRcXHQgKiBPdGhlcndpc2UsIHJlbGF4IHRoZSBUTEJJIHRyYXBzIHRvIG9ubHkgVEdFPTAuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoIWt2bV9oYXNfbnYyKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDIgfD0gKEhDUlhfRUwyX05WblRUTEIgIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0SENSWF9FTDJfTlZuVFRMQklTKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGJhZTJjNGY5MmVmNWMwLi4yNjQ4YzhhNzE3YmEwNSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNTQzLDYgKzU0Myw3IEBAIGVudW0gdmNwdV9zeXNyZWcge1xcbiBcXHRNRENSX0VMMixcXHQvKiBNb25pdG9yIERlYnVnIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKEVMMikgKi9cXG4gXFx0Q05USENUTF9FTDIsXFx0LyogQ291bnRlci10aW1lciBIeXBlcnZpc29yIENvbnRyb2wgcmVnaXN0ZXIgKi9cXG4gXFx0WkNSX0VMMixcXHQvKiBTVkUgQ29udHJvbCBSZWdpc3RlciAoRUwyKSAqL1xcbitcXHRIQ1JfRUwyLFxcdC8qIEh5cGVydmlzb3IgQ29udHJvbCBSZWdpc3RlciAqL1xcbiBcXG4gXFx0LyogQW55IFZOQ1ItY2FwYWJsZSByZWcgZ29lcyBhZnRlciB0aGlzIHBvaW50ICovXFxuIFxcdE1BUktFUihfX1ZOQ1JfU1RBUlRfXyksXFxuQEAgLTU3MSw3ICs1NzIsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcXG4gXFx0Vk5DUihURlNSX0VMMSksXFx0LyogVGFnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAoRUwxKSAqL1xcbiBcXHRWTkNSKFZQSURSX0VMMiksLyogVmlydHVhbGl6YXRpb24gUHJvY2Vzc29yIElEIFJlZ2lzdGVyICovXFxuIFxcdFZOQ1IoVk1QSURSX0VMMiksLyogVmlydHVhbGl6YXRpb24gTXVsdGlwcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi9cXG4tXFx0Vk5DUihIQ1JfRUwyKSxcXHQvKiBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cXG4rXFx0Vk5DUihOVkhDUl9FTDIpLC8qIE5WIEh5cGVydmlzb3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqL1xcbiBcXHRWTkNSKEhTVFJfRUwyKSxcXHQvKiBIeXBlcnZpc29yIFN5c3RlbSBUcmFwIFJlZ2lzdGVyICovXFxuIFxcdFZOQ1IoVlRUQlJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBUcmFuc2xhdGlvbiBUYWJsZSBCYXNlIFJlZ2lzdGVyICovXFxuIFxcdFZOQ1IoVlRDUl9FTDIpLFxcdC8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bmNyX21hcHBpbmcuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmhcXG5pbmRleCAxNDM2NmQzNWNlODJmMC4uOWU4YTQ5ZmE4YjYzOGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bmNyX21hcHBpbmcuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmhcXG5AQCAtMTEsNyArMTEsNyBAQFxcbiAjZGVmaW5lIFZOQ1JfVlRDUl9FTDIgICAgICAgICAgIDB4MDQwXFxuICNkZWZpbmUgVk5DUl9WTVBJRFJfRUwyICAgICAgICAgMHgwNTBcXG4gI2RlZmluZSBWTkNSX0NOVFZPRkZfRUwyICAgICAgICAweDA2MFxcbi0jZGVmaW5lIFZOQ1JfSENSX0VMMiAgICAgICAgICAgIDB4MDc4XFxuKyNkZWZpbmUgVk5DUl9OVkhDUl9FTDIgICAgICAgICAgMHgwNzhcXG4gI2RlZmluZSBWTkNSX0hTVFJfRUwyICAgICAgICAgICAweDA4MFxcbiAjZGVmaW5lIFZOQ1JfVlBJRFJfRUwyICAgICAgICAgIDB4MDg4XFxuICNkZWZpbmUgVk5DUl9UUElEUl9FTDIgICAgICAgICAgMHgwOTBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjE0ZmJmYThlNmI3YjUwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbkBAIC03ODUsNiArNzg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfcmF6W10gPSB7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjJfb3ZlcnJpZGU7XFxuK3N0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjRfb3ZlcnJpZGU7XFxuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMF9vdmVycmlkZTtcXG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRwZnIxX292ZXJyaWRlO1xcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NHpmcjBfb3ZlcnJpZGU7XFxuQEAgLTg1OCw3ICs4NTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IF9fZnRyX3JlZ19lbnRyeSB7XFxuIFxcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSMl9FTDEsIGZ0cl9pZF9hYTY0bW1mcjIsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2aWRfYWE2NG1tZnIyX292ZXJyaWRlKSxcXG4gXFx0QVJNNjRfRlRSX1JFRyhTWVNfSURfQUE2NE1NRlIzX0VMMSwgZnRyX2lkX2FhNjRtbWZyMyksXFxuLVxcdEFSTTY0X0ZUUl9SRUcoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQpLFxcbitcXHRBUk02NF9GVFJfUkVHX09WRVJSSURFKFNZU19JRF9BQTY0TU1GUjRfRUwxLCBmdHJfaWRfYWE2NG1tZnI0LFxcbitcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlkX2FhNjRtbWZyNF9vdmVycmlkZSksXFxuIFxcbiBcXHQvKiBPcDEgPSAwLCBDUm4gPSAxMCwgQ1JtID0gNCAqL1xcbiBcXHRBUk02NF9GVFJfUkVHKFNZU19NUEFNSURSX0VMMSwgZnRyX21wYW1pZHIpLFxcbkBAIC0yNjIwLDYgKzI2MjIsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XFxuIFxcdFxcdFxcdHsgLyogU2VudGluZWwgKi8gfVxcbiBcXHRcXHR9LFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5kZXNjID0gXFxcIkZFQVRfTlYycDFcXFwiLFxcbitcXHRcXHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19OVjJQMSxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXFxuK1xcdFxcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJQMSlcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGVzYyA9IFxcXCJGRUFUX05WM1xcXCIsXFxuK1xcdFxcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX05WMyxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXFxuK1xcdFxcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfMzJCSVRfRUwwX0RPX05PVF9VU0UsXFxuIFxcdFxcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmggYi9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmhcXG5pbmRleCBkNGM3ZDQ1YWU2YmM4My4uZDE1YzJjYjFiMGYyOGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgUElfRVhQT1JUX1NZTShpZF9hYTY0aXNhcjJfb3ZlcnJpZGUpO1xcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7XFxuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NG1tZnIxX292ZXJyaWRlKTtcXG4gUElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjJfb3ZlcnJpZGUpO1xcbitQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyNF9vdmVycmlkZSk7XFxuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NHBmcjBfb3ZlcnJpZGUpO1xcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRwZnIxX292ZXJyaWRlKTtcXG4gUElfRVhQT1JUX1NZTShpZF9hYTY0c21mcjBfb3ZlcnJpZGUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xcbmluZGV4IGJjNTdiMjkwZTVlN2JhLi40ZTQ3NjE2YmNhYzIzYSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcGkvaWRyZWctb3ZlcnJpZGUuY1xcbkBAIC0xMDYsNiArMTA2LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjIG1tZnIyIF9fcHJlbDY0X2luaXRjb25zdCA9IHtcXG4gXFx0fSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyX3NldF9kZXNjIG1tZnI0IF9fcHJlbDY0X2luaXRjb25zdCA9IHtcXG4rXFx0Lm5hbWVcXHRcXHQ9IFxcXCJpZF9hYTY0bW1mcjRcXFwiLFxcbitcXHQub3ZlcnJpZGVcXHQ9IFxcdTAwMjZpZF9hYTY0bW1mcjRfb3ZlcnJpZGUsXFxuK1xcdC5maWVsZHNcXHRcXHQ9IHtcXG4rXFx0XFx0RklFTEQoXFxcIm52X2ZyYWNcXFwiLCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIE5VTEwpLFxcbitcXHRcXHR7fVxcbitcXHR9LFxcbit9O1xcbitcXG4gc3RhdGljIGJvb2wgX19pbml0IHBmcjBfc3ZlX2ZpbHRlcih1NjQgdmFsKVxcbiB7XFxuIFxcdC8qXFxuQEAgLTIyMCw2ICsyMjksNyBAQCBQUkVMNjQoY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYywgcmVnKSByZWdzW10gX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xcbiBcXHR7IFxcdTAwMjZtbWZyMFxcdH0sXFxuIFxcdHsgXFx1MDAyNm1tZnIxXFx0fSxcXG4gXFx0eyBcXHUwMDI2bW1mcjJcXHR9LFxcbitcXHR7IFxcdTAwMjZtbWZyNFxcdH0sXFxuIFxcdHsgXFx1MDAyNnBmcjAgXFx0fSxcXG4gXFx0eyBcXHUwMDI2cGZyMSBcXHR9LFxcbiBcXHR7IFxcdTAwMjZpc2FyMVxcdH0sXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IDQxNTVmZTg5YjU4YTE3Li5kYjYwZmFjYWQ5ZjNjMCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcXG5AQCAtODc2LDggKzg3NiwxNCBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zZXRfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApXFxuIFxcdGFzc2lnbl9jbGVhcl9zZXRfYml0KHR2dDAyLCBDTlRIQ1RMX0VMMU5WVkNULCBjbHIsIHNldCk7XFxuIFxcdGFzc2lnbl9jbGVhcl9zZXRfYml0KHRwdDAyLCBDTlRIQ1RMX0VMMU5WUENULCBjbHIsIHNldCk7XFxuIFxcbi1cXHQvKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBWSEUsIHNvIHVzZSB0aGUgQ05USENUTF9FTDIgYWNjZXNzb3IuICovXFxuLVxcdHN5c3JlZ19jbGVhcl9zZXQoY250aGN0bF9lbDIsIGNsciwgc2V0KTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBvbmx5IGhhcHBlbnMgb24gVkhFLCBzbyB1c2UgdGhlIENOVEhDVExfRUwyIGFjY2Vzc29yLCB1bmxlc3NcXG4rXFx0ICogd2UgYXJlIHN1cmUgQ05US0NUTF9FTDEgaXMgY29tcGxldGVseSBzdGF0ZWZ1bCB3aXRoIEZFQVRfTlYycDEuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcXG4rXFx0XFx0c3lzcmVnX2NsZWFyX3NldChjbnRoY3RsX2VsMiwgY2xyLCBzZXQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN5c3JlZ19jbGVhcl9zZXQoY250a2N0bF9lbDEsIGNsciwgc2V0KTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fdGltZXJfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vY29uZmlnLmMgYi9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xcbmluZGV4IDA2MjIxNjJiMDg5ZTUwLi43ZTg2NDc5MTQyNzIzNCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXFxuQEAgLTIyNSw2ICsyMjUsNyBAQCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2Mge1xcbiAjZGVmaW5lIEZFQVRfSENYXFx0XFx0SURfQUE2NE1NRlIxX0VMMSwgSENYLCBJTVBcXG4gI2RlZmluZSBGRUFUX1MyUElFXFx0XFx0SURfQUE2NE1NRlIzX0VMMSwgUzJQSUUsIElNUFxcbiAjZGVmaW5lIEZFQVRfR0NJRVxcdFxcdElEX0FBNjRQRlIyX0VMMSwgR0NJRSwgSU1QXFxuKyNkZWZpbmUgRkVBVF9OVjNcXHRcXHRJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjNcXG4gXFxuIHN0YXRpYyBib29sIG5vdF9mZWF0X2FhNjRlbDMoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuQEAgLTkwNCw2ICs5MDUsMTIgQEAgc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVBfRkdUKGhkZmd3dHIyX2Rlc2MsIGhkZmd3dHIyX21hc2tzLFxcbiBcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xcbitcXHRORUVEU19GRUFUKEhDUlhfRUwyX05WVEdFXFx0XFx0fFxcbitcXHRcXHQgICBIQ1JYX0VMMl9OVm5UVExCXFx0XFx0fFxcbitcXHRcXHQgICBIQ1JYX0VMMl9OVm5UVExCSVNcXHRcXHR8XFxuK1xcdFxcdCAgIEhDUlhfRUwyX05WblRUTEJPUyxcXG4rXFx0XFx0ICAgRkVBVF9OVjMpLFxcbitcXHRORUVEU19GRUFUKEhDUlhfRUwyX1NSTUFTS0VuLCBGRUFUX1NSTUFTSyksXFxuIFxcdE5FRURTX0ZFQVQoSENSWF9FTDJfUEFDTUVuLCBmZWF0X3BhdXRoX2xyKSxcXG4gXFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9FbkZQTSwgRkVBVF9GUE1SKSxcXG4gXFx0TkVFRFNfRkVBVChIQ1JYX0VMMl9HQ1NFbiwgRkVBVF9HQ1MpLFxcbkBAIC05MzMsNyArOTQwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3J4X2ZlYXRfbWFwW10gPSB7XFxuIH07XFxuIFxcbiBcXG4tc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAoaGNyeF9kZXNjLCBfX0hDUlhfRUwyLFxcbitzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3J4X2Rlc2MsIEhDUlhfRUwyLFxcbiBcXHRcXHRcXHQgICAgICBoY3J4X2ZlYXRfbWFwLCBGRUFUX0hDWCk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xcbkBAIC0xMDEwLDYgKzEwMTcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19iaXRzX3RvX2ZlYXRfbWFwIGhjcl9mZWF0X21hcFtdID0ge1xcbiBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3JfZGVzYywgSENSX0VMMixcXG4gXFx0XFx0XFx0ICAgICAgaGNyX2ZlYXRfbWFwLCBGRUFUX0FBNjRFTDIpO1xcbiBcXG4rc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAobnZoY3JfZGVzYywgTlZIQ1JfRUwyLFxcbitcXHRcXHRcXHQgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfTlYzKTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgc2N0bHIyX2ZlYXRfbWFwW10gPSB7XFxuIFxcdE5FRURTX0ZFQVQoU0NUTFIyX0VMMV9OTUVBXFx0fFxcbiBcXHRcXHQgICBTQ1RMUjJfRUwxX0VBU0UsXFxuQEAgLTEzODQsNiArMTM5NCw3IEBAIHZvaWQgX19pbml0IGNoZWNrX2ZlYXR1cmVfbWFwKHZvaWQpXFxuIFxcdGNoZWNrX3JlZ19kZXNjKFxcdTAwMjZoZGZnd3RyMl9kZXNjKTtcXG4gXFx0Y2hlY2tfcmVnX2Rlc2MoXFx1MDAyNmhjcnhfZGVzYyk7XFxuIFxcdGNoZWNrX3JlZ19kZXNjKFxcdTAwMjZoY3JfZGVzYyk7XFxuK1xcdGNoZWNrX3JlZ19kZXNjKFxcdTAwMjZudmhjcl9kZXNjKTtcXG4gXFx0Y2hlY2tfcmVnX2Rlc2MoXFx1MDAyNnNjdGxyMl9kZXNjKTtcXG4gXFx0Y2hlY2tfcmVnX2Rlc2MoXFx1MDAyNnRjcjJfZWwyX2Rlc2MpO1xcbiBcXHRjaGVja19yZWdfZGVzYyhcXHUwMDI2c2N0bHJfZWwxX2Rlc2MpO1xcbkBAIC0xNTc5LDExICsxNTkwLDIxIEBAIHN0cnVjdCByZXN4IGdldF9yZWdfZml4ZWRfYml0cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBIQ1JYX0VMMjpcXG4gXFx0XFx0cmVzeCA9IGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sIFxcdTAwMjZoY3J4X2Rlc2MsIDAsIDApO1xcbi1cXHRcXHRyZXN4LnJlczEgfD0gX19IQ1JYX0VMMl9SRVMxO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBIQ1JfRUwyOlxcbiBcXHRcXHRyZXN4ID0gY29tcHV0ZV9yZWdfcmVzeF9iaXRzKGt2bSwgXFx1MDAyNmhjcl9kZXNjLCAwLCAwKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTlZIQ1JfRUwyOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbmx5IGFwcGx5IHNhbml0aXNhdGlvbiBpZiB3ZSBkbyBoYXZlIEZFQVRfTlYzLlxcbitcXHRcXHQgKiBPdGhlcndpc2UsIHRoZSByZWdpc3RlciBhbGlhc2VzIHdpdGggSENSX0VMMiBpbiBWTkNSLFxcbitcXHRcXHQgKiBhbmQgd2UncmUgYmV0dGVyIG9mZiByZWx5aW5nIG9uIGRhdGEgdHJhbnNmZXJzIGJldHdlZW5cXG4rXFx0XFx0ICogTlZIQ1JfRUwyIGFuZCBIQ1JfRUwyIHRvIHNhbml0aXNlIHRoaW5ncy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlc3ggPSAoa3ZtX2hhc19udjMoa3ZtKSA/XFxuK1xcdFxcdFxcdGNvbXB1dGVfcmVnX3Jlc3hfYml0cyhrdm0sIFxcdTAwMjZudmhjcl9kZXNjLCAwLCAwKSA6XFxuK1xcdFxcdFxcdCh0eXBlb2YocmVzeCkpe30pO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBTQ1RMUjJfRUwxOlxcbiBcXHRjYXNlIFNDVExSMl9FTDI6XFxuIFxcdFxcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcXHUwMDI2c2N0bHIyX2Rlc2MsIDAsIDApO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuY1xcbmluZGV4IDNjODJmMzkyODQ1ZDE0Li5mNWRjNTc4ZDhjOTg1NiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuY1xcbkBAIC05MCw2ICs5MCw3IEBAIGVudW0gY2d0X2dyb3VwX2lkIHtcXG4gXFx0Q0dUX0hDUlhfRW5GUE0sXFxuIFxcdENHVF9IQ1JYX1RDUjJFbixcXG4gXFx0Q0dUX0hDUlhfU0NUTFIyRW4sXFxuK1xcdENHVF9IQ1JYX25OVlRHRSxcXG4gXFxuIFxcdENHVF9DTlRIQ1RMX0VMMVRWVCxcXG4gXFx0Q0dUX0NOVEhDVExfRUwxVFZDVCxcXG5AQCAtMTIxLDYgKzEyMiw4IEBAIGVudW0gY2d0X2dyb3VwX2lkIHtcXG4gXFx0Q0dUX01EQ1JfVERFX1REUkEsXFxuIFxcdENHVF9NRENSX1REQ0NfVERFX1REQSxcXG4gXFxuK1xcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UsXFxuK1xcbiBcXHRDR1RfSUNIX0hDUl9UQ19URElSLFxcbiBcXG4gXFx0LypcXG5AQCAtNDEzLDYgKzQxNiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRyYXBfYml0cyBjb2Fyc2VfdHJhcF9iaXRzW10gPSB7XFxuIFxcdFxcdC5tYXNrXFx0XFx0PSBIQ1JYX0VMMl9TQ1RMUjJFbixcXG4gXFx0XFx0LmJlaGF2aW91clxcdD0gQkVIQVZFX0ZPUldBUkRfUlcsXFxuIFxcdH0sXFxuK1xcdFtDR1RfSENSWF9uTlZUR0VdID0ge1xcbitcXHRcXHQuaW5kZXhcXHRcXHQ9IEhDUlhfRUwyLFxcbitcXHRcXHQudmFsdWVcXHRcXHQ9IDAsXFxuK1xcdFxcdC5tYXNrXFx0XFx0PSBIQ1JYX0VMMl9OVlRHRSxcXG4rXFx0XFx0LmJlaGF2aW91clxcdD0gQkVIQVZFX0ZPUldBUkRfUlcsXFxuK1xcdH0sXFxuIFxcdFtDR1RfQ05USENUTF9FTDFUVlRdID0ge1xcbiBcXHRcXHQuaW5kZXhcXHRcXHQ9IENOVEhDVExfRUwyLFxcbiBcXHRcXHQudmFsdWVcXHRcXHQ9IENOVEhDVExfRUwxVFZULFxcbkBAIC00NjgsNiArNDc3LDcgQEAgc3RhdGljIGNvbnN0IGVudW0gY2d0X2dyb3VwX2lkICpjb2Fyc2VfY29udHJvbF9jb21ib1tdID0ge1xcbiBcXHRcXHRcXHRcXHRcXHRDR1RfSENSX1RWTSwgQ0dUX0hDUl9UUlZNLCBDR1RfSENSWF9TQ1RMUjJFbiksXFxuIFxcdE1DQihDR1RfSENSX1RQVV9USUNBQixcXHRcXHRDR1RfSENSX1RQVSwgQ0dUX0hDUl9USUNBQiksXFxuIFxcdE1DQihDR1RfSENSX1RQVV9UT0NVLFxcdFxcdENHVF9IQ1JfVFBVLCBDR1RfSENSX1RPQ1UpLFxcbitcXHRNQ0IoQ0dUX0hDUl9OVl9IQ1JYX25OVlRHRSxcXHRDR1RfSENSX05WLCBDR1RfSENSWF9uTlZUR0UpLFxcbiBcXHRNQ0IoQ0dUX0hDUl9OVjFfbk5WMl9FTlNDWFQsXFx0Q0dUX0hDUl9OVjFfbk5WMiwgQ0dUX0hDUl9FTlNDWFQpLFxcbiBcXHRNQ0IoQ0dUX01EQ1JfVFBNX1RQTUNSLFxcdFxcdENHVF9NRENSX1RQTSwgQ0dUX01EQ1JfVFBNQ1IpLFxcbiBcXHRNQ0IoQ0dUX01EQ1JfVFBNX0hQTU4sXFx0XFx0Q0dUX01EQ1JfVFBNLCBDR1RfTURDUl9IUE1OKSxcXG5AQCAtODUzLDYgKzg2Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5jb2RpbmdfdG9fdHJhcF9jb25maWcgZW5jb2RpbmdfdG9fY2d0W10gX19pbml0Y29uc3QgPSB7XFxuIFxcdFNSX1RSQVAoU1lTX1NDVExSMl9FTDIsXFx0XFx0Q0dUX0hDUl9OViksXFxuIFxcdFNSX1JBTkdFX1RSQVAoU1lTX0hDUl9FTDIsXFxuIFxcdFxcdCAgICAgIFNZU19IQ1JYX0VMMixcXHRDR1RfSENSX05WKSxcXG4rXFx0U1JfVFJBUChTWVNfTlZIQ1JfRUwyLFxcdFxcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UpLFxcbiBcXHRTUl9UUkFQKFNZU19TTVBSSU1BUF9FTDIsXFx0Q0dUX0hDUl9OViksXFxuIFxcdFNSX1RSQVAoU1lTX1NNQ1JfRUwyLFxcdFxcdENHVF9IQ1JfTlYpLFxcbiBcXHRTUl9SQU5HRV9UUkFQKFNZU19UVEJSMF9FTDIsXFxuQEAgLTIzMjAsNyArMjMzMSw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZClcXG4gXFx0QlVJTERfQlVHX09OKF9fTlJfQ0dUX0dST1VQX0lEU19fIFxcdTAwM2UgQklUKFRDX0NHVF9CSVRTKSk7XFxuIFxcdEJVSUxEX0JVR19PTihfX05SX0ZHVF9HUk9VUF9JRFNfXyBcXHUwMDNlIEJJVChUQ19GR1RfQklUUykpO1xcbiBcXHRCVUlMRF9CVUdfT04oX19OUl9GR19GSUxURVJfSURTX18gXFx1MDAzZSBCSVQoVENfRkdGX0JJVFMpKTtcXG4tXFx0QlVJTERfQlVHX09OKF9fSENSWF9FTDJfTUFTSyBcXHUwMDI2IF9fSENSWF9FTDJfbk1BU0spO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCk7IGkrKykge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgZW5jb2RpbmdfdG9fdHJhcF9jb25maWcgKmNndCA9IFxcdTAwMjZlbmNvZGluZ190b19jZ3RbaV07XFxuQEAgLTIzNDYsMTAgKzIzNTYsNiBAQCBpbnQgX19pbml0IHBvcHVsYXRlX252X3RyYXBfY29uZmlnKHZvaWQpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKF9fSENSWF9FTDJfUkVTMCAhPSBIQ1JYX0VMMl9SRVMwKVxcbi1cXHRcXHRrdm1faW5mbyhcXFwiU2FuaXRpc2VkIEhDUl9FTDJfUkVTMCA9ICUwMTZsbHgsIGV4cGVjdGluZyAlMDE2bGx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgX19IQ1JYX0VMMl9SRVMwLCBIQ1JYX0VMMl9SRVMwKTtcXG4tXFxuIFxcdGt2bV9pbmZvKFxcXCJudjogJWxkIGNvYXJzZSBncmFpbmVkIHRyYXAgaGFuZGxlcnNcXFxcblxcXCIsXFxuIFxcdFxcdCBBUlJBWV9TSVpFKGVuY29kaW5nX3RvX2NndCkpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oXFxuaW5kZXggNGJmNjI0YTQ5NTkxZGYuLjdiMjcyOTZjOTQ2MDcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxcbkBAIC0xMDgsOSArMTA4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX2NwdHJfdHJhcHNfdmhlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3RcXG4gXFx0ICogd3JpdGluZyB0byBDUFRSX0VMMiB2aWEgQ1BBQ1JfRUwxIGNhbid0IHNldCBhbnkgb2YgVENQQUMgb3IgVFRBLFxcbiBcXHQgKiBhcyB0aGV5IGFyZSBSRVMwIGluIHRoZSBndWVzdCdzIHZpZXcuIFRvIHdvcmsgYXJvdW5kIGl0LCB0cmFwIHRoZVxcbi1cXHQgKiBzdWNrZXIgdXNpbmcgdGhlIHZlcnkgc2FtZSBiaXQgaXQgY2FuJ3Qgc2V0Li4uXFxuK1xcdCAqIHN1Y2tlciB1c2luZyB0aGUgdmVyeSBzYW1lIGJpdCBpdCBjYW4ndCBzZXQuIEZFQVRfTlYycDEgZml4ZXMgaXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiBpc19oeXBfY3R4dCh2Y3B1KSlcXG4rXFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkgXFx1MDAyNlxcdTAwMjYgaXNfaHlwX2N0eHQodmNwdSkpXFxuIFxcdFxcdHZhbCB8PSBDUFRSX0VMMl9UQ1BBQztcXG4gXFxuIFxcdC8qXFxuQEAgLTMyNSw2ICszMjYsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGVhY3RpdmF0ZV90cmFwc19tcGFtKHZvaWQpXFxuIFxcdFxcdHdyaXRlX3N5c3JlZ19zKE1QQU1IQ1JfSE9TVF9GTEFHUywgU1lTX01QQU1IQ1JfRUwyKTtcXG4gfVxcbiBcXG4rLypcXG4rICogSnVzdCBsaWtlIGZvciBIQ1JfRUwyLCB3ZSBjYW4ndCBsZXQgdGhlIGd1ZXN0IG1lc3Mgd2l0aCBzb21lIG9mIHRoZVxcbisgKiBiYXNpY3Mgd2UgcmVseSBvbiBpbiBIQ1JYX0VMMi4gSG93ZXZlciwgdGhlIG1ham9yIGRpZmZlcmVuY2UgaXMgdGhhdFxcbisgKiBIQ1JYX0VMMiBvbmx5IGFmZmVjdHMgRUwxLCBhbmQgbmV2ZXIgRUwyIChzdWRkZW4gb3V0YnVyc3Qgb2Ygc2FuaXR5LCBJXFxuKyAqIGd1ZXNzKS4gU28gaXQgaXMgYWx3YXlzIHRoZSBndWVzdCBpbmZsaWN0aW5nIGl0IG9uIGl0cyBvd24gZ3Vlc3R4LlxcbisgKlxcbisgKiBUaGluZ3Mgd2UgZG9uJ3Qgd2FudCB0byBsZXQgdGhlIGd1ZXN0IGNvbnRyb2wgYXJlOlxcbisgKlxcbisgKiAtIFRNRUE6IFRoYXQncyBmb3IgdXMgdG8gZGVjaWRlIGhvdyBhbiBTRUEgaXMgcm91dGVkLCBub3QgdGhlIGd1ZXN0LlxcbisgKlxcbisgKiAtIFBUVFdJOiBTaW1pbGFybHksIGl0IGlzIGZvciB1cyB0byBkZWNpZGUgd2hldGhlciBSZWR1Y2VkIENvaGVyZW5jeSBmb3JcXG4rICogICB0aGUgUFRXIGlzIGEgdGhpbmcuIEl0IHJlYWxseSBpc24ndC5cXG4rICpcXG4rICogLSBFbklEQ1AxMjg6IFdlIGRvbid0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC5cXG4rICovXFxuKyNkZWZpbmUgTlZfSENSWF9HVUVTVF9FWENMVURFXFx0KEhDUlhfRUwyX1RNRUFcXHQgICAgfCBIQ1JYX0VMMl9QVFRXSSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0IEhDUlhfRUwyX0VuSURDUDEyOClcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9jcHVfY29udGV4dCAqaGN0eHQgPSBob3N0X2RhdGFfcHRyKGhvc3RfY3R4dCk7XFxuQEAgLTM1MCw4ICszNjksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV90cmFwc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR1NjQgaGNyeCA9IHZjcHUtXFx1MDAzZWFyY2guaGNyeF9lbDI7XFxuIFxcdFxcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSkge1xcbiBcXHRcXHRcXHR1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgSENSWF9FTDIpO1xcbi1cXHRcXHRcXHRoY3J4IHw9IHZhbCBcXHUwMDI2IF9fSENSWF9FTDJfTUFTSztcXG4tXFx0XFx0XFx0aGNyeCBcXHUwMDI2PSB+KH52YWwgXFx1MDAyNiBfX0hDUlhfRUwyX25NQVNLKTtcXG4rXFx0XFx0XFx0aGNyeCB8PSAodmFsIFxcdTAwMjYgfk5WX0hDUlhfR1VFU1RfRVhDTFVERSk7XFxuK1xcdFxcdFxcdGhjcnggXFx1MDAyNj0gfih+dmFsIFxcdTAwMjYgfk5WX0hDUlhfR1VFU1RfRVhDTFVERSk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGN0eHRfc3lzX3JlZyhoY3R4dCwgSENSWF9FTDIpID0gcmVhZF9zeXNyZWdfcyhTWVNfSENSWF9FTDIpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmggYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmhcXG5pbmRleCBhMTdjYmU3NTgyZGU5MC4uYzM4Mjg0OGQzMTk0NzkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXFxuQEAgLTE3Miw2ICsxNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3NhdmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXFxuIFxcbiBcXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxcbiBcXHRcXHRjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSkgPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSMik7XFxuK1xcbitcXHQvKiBSZXRyaWV2ZSBMMidzIEhDUl9FTDIsIGFuZCBzYXZlIGl0IGZvciBmdXR1cmUgdXNlICovXFxuK1xcdGlmIChpc19uZXN0ZWRfbnYzX2N0eHQoY3R4dF90b192Y3B1KGN0eHQpKSlcXG4rXFx0XFx0Y3R4dF9zeXNfcmVnKGN0eHQsIE5WSENSX0VMMikgPSByZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zeXNyZWdfc2F2ZV9lbDJfcmV0dXJuX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQpXFxuQEAgLTI4NSw2ICsyODksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3lzcmVnX3Jlc3RvcmVfZWwxX3N0YXRlKHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgKmN0eHQsXFxuIFxcbiBcXHRpZiAoY3R4dF9oYXNfc2N0bHIyKGN0eHQpKVxcbiBcXHRcXHR3cml0ZV9zeXNyZWdfZWwxKGN0eHRfc3lzX3JlZyhjdHh0LCBTQ1RMUjJfRUwxKSwgU1lTX1NDVExSMik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQdWJsaXNoIHRoZSBMMiB2aWV3IG9mIEhDUl9FTDIgdG8gdGhlIEhXIGlmIEwxIGlzIHVzaW5nIE5WMy5cXG4rXFx0ICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSdzIG93biBWTkNSLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX25lc3RlZF9udjNfY3R4dChjdHh0X3RvX3ZjcHUoY3R4dCkpKVxcbitcXHRcXHR3cml0ZV9zeXNyZWdfcyhjdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7XFxuIH1cXG4gXFxuIC8qIFJlYWQgdGhlIFZDUFUgc3RhdGUncyBQU1RBVEUsIGJ1dCB0cmFuc2xhdGUgKHYpRUwyIHRvIEVMMS4gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Ny4uZjEyOWYyMmYxNTYxOGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5AQCAtNzAsNiArNzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxcbiBcXHRcXHRcXHRoY3IgfD0gSENSX05WMTtcXG4gXFxuK1xcdFxcdC8qIFB1Ymxpc2ggdGhlIGd1ZXN0J3MgdmlldyBvZiBIQ1JfRUwyIHRvIHRoZSBIVyAqL1xcbitcXHRcXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxcbitcXHRcXHRcXHR3cml0ZV9zeXNyZWdfcyhfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSwgU1lTX05WSENSX0VMMik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogTm90aGluZyBpbiBIQ1JfRUwyIHNob3VsZCBpbXBhY3QgcnVubmluZyBpbiBoeXBlcnZpc29yXFxuIFxcdFxcdCAqIGNvbnRleHQsIGFwYXJ0IGZyb20gYml0cyB3ZSBoYXZlIGRlZmluZWQgYXMgUkVTeCAoRTJILFxcbkBAIC0zMzksNiArMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX2VyZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4gXFx0dTY0IGVzciA9IGt2bV92Y3B1X2dldF9lc3IodmNwdSk7XFxuIFxcdHU2NCBzcHNyLCBlbHIsIG1vZGU7XFxuIFxcbitcXHQvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovXFxuK1xcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjMpIFxcdTAwMjZcXHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lXFxuIFxcdCAqIGlmIHRoaXMgaXMgYSBWSEUgZ3Vlc3QgaHlwZXJ2aXNvciByZXR1cm5pbmcgdG8gaXRzIG93blxcbkBAIC0zNDksOCArMzU5LDggQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfZXJldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxcbiBcXHQgKiBVbmxlc3MgdGhlIHRyYXAgaGFzIHRvIGJlIGZvcndhcmRlZCBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsXFxuIFxcdCAqIG9mIGNvdXJzZS4uLlxcbiBcXHQgKi9cXG4tXFx0aWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JfRUwyKSBcXHUwMDI2IEhDUl9OVikgfHxcXG4tXFx0ICAgIChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSBcXHUwMDI2IEhGR0lUUl9FTDJfRVJFVCkpXFxuK1xcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSB8fFxcbitcXHQgICAgX192Y3B1X3N5c19yZWcodmNwdSwgSEZHSVRSX0VMMikgXFx1MDAyNiBIRkdJVFJfRUwyX0VSRVQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHNwc3IgPSByZWFkX3N5c3JlZ19lbDEoU1lTX1NQU1IpO1xcbkBAIC00NDEsNiArNDUxLDkgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfY3BhY3JfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXFxuIFxcdHU2NCBlc3IgPSBrdm1fdmNwdV9nZXRfZXNyKHZjcHUpO1xcbiBcXHRpbnQgcnQ7XFxuIFxcbitcXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIWlzX2h5cF9jdHh0KHZjcHUpIHx8IGVzcl9zeXM2NF90b19zeXNyZWcoZXNyKSAhPSBTWVNfQ1BBQ1JfRUwxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC01MzQsMTkgKzU0NywxNyBAQCBzdGF0aWMgY29uc3QgZXhpdF9oYW5kbGVyX2ZuIGh5cF9leGl0X2hhbmRsZXJzW10gPSB7XFxuIFxcdFsweDNGXVxcdFxcdFxcdFxcdD0ga3ZtX2h5cF9oYW5kbGVfaW1wZGVmLFxcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4rc3RhdGljIHZvaWQgZml4dXBfbnZfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3luY2hyb25pemVfdmNwdV9wc3RhdGUodmNwdSk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3XFxuIFxcdCAqIHNvIHRoYXQgdGhlIHVzdWFsIGhlbHBlcnMgd29yayBjb3JyZWN0bHkuIFRoaXMgZW5mb3JjZXMgb3VyXFxuIFxcdCAqIGludmFyaWFudCB0aGF0IHRoZSBndWVzdCdzIEhZUCBjb250ZXh0IHN0YXR1cyBpcyBwcmVzZXJ2ZWRcXG4gXFx0ICogYWNyb3NzIGEgcnVuLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB1bmxpa2VseShob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpKSkge1xcbitcXHRpZiAodW5saWtlbHkoaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSkpIHtcXG4gXFx0XFx0dTY0IG1vZGUgPSAqdmNwdV9jcHNyKHZjcHUpIFxcdTAwMjYgKFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XFxuK1xcdFxcdHU2NCBoY3I7XFxuIFxcbiBcXHRcXHRzd2l0Y2ggKG1vZGUpIHtcXG4gXFx0XFx0Y2FzZSBQU1JfTU9ERV9FTDF0OlxcbkBAIC01NTksMTEgKzU3MCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxcbiBcXG4gXFx0XFx0KnZjcHVfY3Bzcih2Y3B1KSBcXHUwMDI2PSB+KFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XFxuIFxcdFxcdCp2Y3B1X2Nwc3IodmNwdSkgfD0gbW9kZTtcXG4rXFxuK1xcdFxcdC8qIFB1Ymxpc2ggdGhlIGxhdGVzdCBIQ1JfRUwyIHRvIHRoZSBlbXVsYXRpb24gKi9cXG4rXFx0XFx0aGNyID0gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cXG4rXFx0XFx0XFx0cmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKSA6XFxuK1xcdFxcdFxcdF9fdmNwdV9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMik7XFxuK1xcbitcXHRcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogQXBwbHkgZXh0cmVtZSBwYXJhbm9pYSEgKi9cXG4tXFx0QlVHX09OKHZjcHVfaGFzX252KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICAhIWhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkgIT0gaXNfaHlwX2N0eHQodmNwdSkpO1xcbitcXHRCVUdfT04oISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxcbit7XFxuK1xcdHN5bmNocm9uaXplX3ZjcHVfcHN0YXRlKHZjcHUpO1xcbitcXG4rXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbitcXHRcXHRmaXh1cF9udl9ndWVzdF9leGl0KHZjcHUpO1xcbiBcXG4gXFx0cmV0dXJuIF9fZml4dXBfZ3Vlc3RfZXhpdCh2Y3B1LCBleGl0X2NvZGUsIGh5cF9leGl0X2hhbmRsZXJzKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xcbmluZGV4IGJlNjg1YjYzZThjZjI2Li4wYzRlZjFjZTMyYWU3MSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xcbkBAIC00MiwxMCArNDIsMTIgQEAgc3RhdGljIHZvaWQgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dTY0IHZhbDtcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGRvbid0IHNhdmUgQ1BUUl9FTDIsIGFzIGFjY2Vzc2VzIHRvIENQQUNSX0VMMVxcbi1cXHRcXHQgKiBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlIGluLW1lbW9yeVxcbi1cXHRcXHQgKiBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXFxuK1xcdFxcdCAqIFdpdGhvdXQgRkVBVF9OVjJwMSwgd2UgZG9uJ3Qgc2F2ZSBDUFRSX0VMMiwgYXMgYWNjZXNzZXNcXG4rXFx0XFx0ICogdG8gQ1BBQ1JfRUwxIGFyZSBhbHdheXMgdHJhcHBlZCwgZW5zdXJpbmcgdGhhdCB0aGVcXG4rXFx0XFx0ICogaW4tbWVtb3J5IGNvcHkgaXMgYWx3YXlzIHVwLXRvLWRhdGUuIEEgc21hbGwgYmxlc3NpbmcuLi5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXFxuK1xcdFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMiwgcmVhZF9zeXNyZWdfZWwxKFNZU19DUEFDUikpO1xcbiBcXHRcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyLFxcdCByZWFkX3N5c3JlZ19lbDEoU1lTX1NDVExSKSk7XFxuIFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMF9FTDIsXFx0IHJlYWRfc3lzcmVnX2VsMShTWVNfVFRCUjApKTtcXG4gXFx0XFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFRUQlIxX0VMMixcXHQgcmVhZF9zeXNyZWdfZWwxKFNZU19UVEJSMSkpO1xcbkBAIC02NywxMSArNjksMTggQEAgc3RhdGljIHZvaWQgX19zeXNyZWdfc2F2ZV92ZWwyX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0ICogVGhlIEVMMSB2aWV3IG9mIENOVEtDVExfRUwxIGhhcyBhIGJ1bmNoIG9mIFJFUzAgYml0cyB3aGVyZVxcbiBcXHRcXHQgKiB0aGUgaW50ZXJlc3RpbmcgQ05USENUTF9FTDIgYml0cyBsaXZlLiBTbyBwcmVzZXJ2ZSB0aGVzZVxcbiBcXHRcXHQgKiBiaXRzIHdoZW4gcmVhZGluZyBiYWNrIHRoZSBndWVzdC12aXNpYmxlIHZhbHVlLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBXaGlsZSBOVjJwMSBmaXhlcyBzb21lIG9mIHRoYXQsIGl0IG1ha2VzIENOVEhDVExfRUwyLkVDVlxcbitcXHRcXHQgKiBldmVuIG1vcmUgYnJva2VuIHRoYW4gaXQgYWxyZWFkeSB3YXMgd2l0aCBOVjIuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR2YWwgPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpO1xcbi1cXHRcXHR2YWwgXFx1MDAyNj0gQ05US0NUTF9WQUxJRF9CSVRTO1xcbi1cXHRcXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgQ05USENUTF9FTDIsIFxcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcXG4tXFx0XFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcXG4rXFx0XFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcXG4rXFx0XFx0XFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcXHUwMDI2PSwgfkNOVEtDVExfVkFMSURfQklUUyk7XFxuK1xcdFxcdFxcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgfD0sIHZhbCk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU1BfRUwyLFxcdCByZWFkX3N5c3JlZyhzcF9lbDEpKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbmluZGV4IGRmYjk2ZWRiZGM0M2M2Li42NGM4ZmI4MmZhZGY2ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTE3MjgsNyArMTcyOCw3IEBAIHU2NCBsaW1pdF9udl9pZF9yZWcoc3RydWN0IGt2bSAqa3ZtLCB1MzIgcmVnLCB1NjQgdmFsKVxcbiBcXHRcXHQgKiBZb3UgZ2V0IEVJVEhFUlxcbiBcXHRcXHQgKlxcbiBcXHRcXHQgKiAtIEZFQVRfVkhFIHdpdGhvdXQgRkVBVF9FMkgwXFxuLVxcdFxcdCAqIC0gRkVBVF9OViBsaW1pdGVkIHRvIEZFQVRfTlYyXFxuK1xcdFxcdCAqIC0gRkVBVF9OViBsaW1pdGVkIHRvIEZFQVRfTlYyKHAxKS9OVjNcXG4gXFx0XFx0ICogLSBIQ1JfRUwyLk5WMSBiZWluZyBSRVMwXFxuIFxcdFxcdCAqXFxuIFxcdFxcdCAqIE9SXFxuQEAgLTE3NDAsNyArMTc0MCwxMyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcXG4gXFx0XFx0aWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyX0UySDAsIGt2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xcbiBcXHRcXHRcXHR2YWwgPSAwO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcXG4rXFx0XFx0XFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykpXFxuK1xcdFxcdFxcdFxcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKTtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxcbitcXHRcXHRcXHRcXHR2YWwgPSBJRF9SRUdfTElNSVRfRklFTERfRU5VTSh2YWwsIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMlAxKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IH5JRF9BQTY0TU1GUjRfRUwxX0UySDA7XFxuIFxcdFxcdFxcdHZhbCB8PSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIEUySDAsIE5JX05WMSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTE4MjYsNiArMTgzMiwxMCBAQCBpbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JfRUwyKTtcXG4gXFx0c2V0X3N5c3JlZ19tYXNrcyhrdm0sIEhDUl9FTDIsIHJlc3gpO1xcbiBcXG4rXFx0LyogTlZIQ1JfRUwyICovXFxuK1xcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBOVkhDUl9FTDIpO1xcbitcXHRzZXRfc3lzcmVnX21hc2tzKGt2bSwgTlZIQ1JfRUwyLCByZXN4KTtcXG4rXFxuIFxcdC8qIEhDUlhfRUwyICovXFxuIFxcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JYX0VMMik7XFxuIFxcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JYX0VMMiwgcmVzeCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjBhZWIyZTczNmZkZTM3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTE4Myw4ICsxODMsNiBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcXG4gXFx0c3dpdGNoIChyZWcpIHtcXG4gXFx0XFx0TUFQUEVEX0VMMl9TWVNSRUcoU0NUTFJfRUwyLCAgIFNDVExSX0VMMSxcXG4gXFx0XFx0XFx0XFx0ICB0cmFuc2xhdGVfc2N0bHJfZWwyX3RvX3NjdGxyX2VsMVxcdCAgICAgKTtcXG4tXFx0XFx0TUFQUEVEX0VMMl9TWVNSRUcoQ1BUUl9FTDIsICAgIENQQUNSX0VMMSxcXG4tXFx0XFx0XFx0XFx0ICB0cmFuc2xhdGVfY3B0cl9lbDJfdG9fY3BhY3JfZWwxXFx0ICAgICApO1xcbiBcXHRcXHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMF9FTDIsICAgVFRCUjBfRUwxLFxcbiBcXHRcXHRcXHRcXHQgIHRyYW5zbGF0ZV90dGJyMF9lbDJfdG9fdHRicjBfZWwxXFx0ICAgICApO1xcbiBcXHRcXHRNQVBQRURfRUwyX1NZU1JFRyhUVEJSMV9FTDIsICAgVFRCUjFfRUwxLCAgIE5VTExcXHQgICAgICk7XFxuQEAgLTIxMCw2ICsyMDgsMzMgQEAgc3RhdGljIHZvaWQgbG9jYXRlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcsXFxuIFxcdFxcdGxvYy1cXHUwMDNlbG9jID0gKChpc19oeXBfY3R4dCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKSA/XFxuIFxcdFxcdFxcdCAgICBTUl9MT0NfU1BFQ0lBTCA6IFNSX0xPQ19NRU1PUlkpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBDUFRSX0VMMjpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ1BUUl9FTDIgaXMganVzdCBhcyBzcGVjaWFsLCBhbmQgbmVlZHMgYSBjZXJ0YWluIGFtb3VudFxcbitcXHRcXHQgKiBvZiBoYW5kaG9sZGluZy4gSXQgYWx3YXlzIGxpdmVzIGluIG1lbW9yeSwgZHVlIHRvIGJlaW5nXFxuK1xcdFxcdCAqIGhlYXZpbHkgdHJhcHBlZCB0aGFua3MgdG8gQ1BBQ1JfRUwxLlRDUEFDIGJlaW5nIFJFUzAuXFxuK1xcdFxcdCAqIEZFQVRfTlYycDEgZml4ZXMgdGhpcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxvY2F0ZV9tYXBwZWRfZWwyX3JlZ2lzdGVyKHZjcHUsIENQVFJfRUwyLCBDUEFDUl9FTDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGxvYyk7XFxuK1xcdFxcdGlmIChpc19oeXBfY3R4dCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxcbitcXHRcXHRcXHRsb2MtXFx1MDAzZWxvYyA9IFNSX0xPQ19TUEVDSUFMO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBOVkhDUl9FTDI6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFllcywgTlZIQ1JfRUwyIG1hcHMgdG8gaXRzZWxmIHdoZW4gbG9hZGVkIGluIG5lc3RlZFxcbitcXHRcXHQgKiBjb250ZXh0LiBJZiB5b3UgZmVlbCBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaXMgZG91YmxlXFxuK1xcdFxcdCAqIGJhY2tpbmcgb24gaXRzZWxmIHVwc2lkZSBkb3duLCB5b3UncmUgbm90IGFsb25lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V0FSTl9PTl9PTkNFKCFrdm1faGFzX252Myh2Y3B1LVxcdTAwM2Vrdm0pKTtcXG4rXFx0XFx0aWYgKGlzX2h5cF9jdHh0KHZjcHUpKSB7XFxuK1xcdFxcdFxcdGxvYy1cXHUwMDNlbG9jID0gU1JfTE9DX01FTU9SWTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bG9jLVxcdTAwM2Vsb2MgPSBTUl9MT0NfTE9BREVEIHwgU1JfTE9DX01BUFBFRDtcXG4rXFx0XFx0XFx0bG9jLVxcdTAwM2VtYXBfcmVnID0gTlZIQ1JfRUwyO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRsb2MtXFx1MDAzZWxvYyA9IGxvY2F0ZV9kaXJlY3RfcmVnaXN0ZXIodmNwdSwgcmVnKTtcXG4gXFx0fVxcbkBAIC0yNDksNiArMjc0LDcgQEAgc3RhdGljIHU2NCByZWFkX3NyX2Zyb21fY3B1KGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbiBcXHRjYXNlIERBQ1IzMl9FTDI6XFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfREFDUjMyX0VMMik7XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUZTUjMyX0VMMjpcXHR2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19JRlNSMzJfRUwyKTtcXHRicmVhaztcXG4gXFx0Y2FzZSBEQkdWQ1IzMl9FTDI6XFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfREJHVkNSMzJfRUwyKTtcXHRicmVhaztcXG4rXFx0Y2FzZSBOVkhDUl9FTDI6XFx0XFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKTtcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuIFxcdH1cXG4gXFxuQEAgLTI4Nyw2ICszMTMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZV9zcl90b19jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcsIHU2NCB2YWwpXFxuIFxcdGNhc2UgREFDUjMyX0VMMjpcXHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19EQUNSMzJfRUwyKTtcXHRicmVhaztcXG4gXFx0Y2FzZSBJRlNSMzJfRUwyOlxcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX0lGU1IzMl9FTDIpO1xcdGJyZWFrO1xcbiBcXHRjYXNlIERCR1ZDUjMyX0VMMjpcXHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19EQkdWQ1IzMl9FTDIpO1xcdGJyZWFrO1xcbitcXHRjYXNlIE5WSENSX0VMMjpcXHRcXHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19OVkhDUl9FTDIpO1xcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTMxMSw5ICszMzgsMTYgQEAgdTY0IHZjcHVfcmVhZF9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXFxuIFxcdFxcdHN3aXRjaCAocmVnKSB7XFxuIFxcdFxcdGNhc2UgQ05USENUTF9FTDI6XFxuIFxcdFxcdFxcdHZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7XFxuLVxcdFxcdFxcdHZhbCBcXHUwMDI2PSBDTlRLQ1RMX1ZBTElEX0JJVFM7XFxuLVxcdFxcdFxcdHZhbCB8PSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByZWcpIFxcdTAwMjYgfkNOVEtDVExfVkFMSURfQklUUztcXG4rXFx0XFx0XFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcXG4rXFx0XFx0XFx0XFx0dmFsIFxcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcXG4rXFx0XFx0XFx0XFx0dmFsIHw9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgXFx1MDAyNiB+Q05US0NUTF9WQUxJRF9CSVRTO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJldHVybiB2YWw7XFxuK1xcdFxcdGNhc2UgQ1BUUl9FTDI6XFxuK1xcdFxcdFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKTtcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHR9XFxuQEAgLTM1OSw2ICszOTMsOSBAQCB2b2lkIHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0d3JpdGVfc3lzcmVnX2VsMSh2YWwsIFNZU19DTlRLQ1RMKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQ1BUUl9FTDI6XFxuK1xcdFxcdFxcdHdyaXRlX3N5c3JlZ19lbDEodmFsLCBTWVNfQ1BBQ1IpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHR9XFxuQEAgLTI4NDAsNiArMjg3NywxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRyZXR1cm4gUkVHX0hJRERFTjtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBudmhjcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxcbit7XFxuK1xcdGlmIChlbDJfdmlzaWJpbGl0eSh2Y3B1LCByZCkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAga3ZtX2hhc19mZWF0KHZjcHUtXFx1MDAzZWt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gUkVHX0hJRERFTjtcXG4rfVxcbitcXG4gc3RhdGljIHVuc2lnbmVkIGludCBzY3RscjJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxcbiB7XFxuQEAgLTM3NTMsNiArMzgwMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcXG4gXFx0XFx0XFx0IHN2ZV9lbDJfdmlzaWJpbGl0eSksXFxuIFxcbiBcXHRFTDJfUkVHX1ZOQ1IoSENSWF9FTDIsIHJlc2V0X3ZhbCwgMCksXFxuK1xcdEVMMl9SRUdfRklMVEVSRUQoTlZIQ1JfRUwyLCB1bmRlZl9hY2Nlc3MsIHJlc2V0X3ZhbCwgMCxcXG4rXFx0XFx0XFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcXG4gXFxuIFxcdEVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXFxuIFxcdEVMMl9SRUcoVFRCUjFfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbmluZGV4IDliODVhODRmNmZkNDk0Li43ZTA0MTQ1MDllODlhOCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG5AQCAtNTEsNiArNTEsOCBAQCBIQVNfTFM2NF9WXFxuIEhBU19MU1VJXFxuIEhBU19NT1BTXFxuIEhBU19ORVNURURfVklSVFxcbitIQVNfTlYyUDFcXG4rSEFTX05WM1xcbiBIQVNfQkJNTDJfTk9BQk9SVFxcbiBIQVNfUEFOXFxuIEhBU19QTVVWM1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrIGIvYXJjaC9hcm02NC90b29scy9nZW4tc3lzcmVnLmF3a1xcbmluZGV4IDg2ODYwYWI2NzJkYzc4Li5kN2Y3Y2ViNzY4ZmU1YyAxMDA3NTVcXG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXFxuKysrIGIvYXJjaC9hcm02NC90b29scy9nZW4tc3lzcmVnLmF3a1xcbkBAIC0yMjgsNyArMjI4LDcgQEAgJDEgPT0gXFxcIkVuZFN5c3JlZ1xcXCIgXFx1MDAyNlxcdTAwMjYgYmxvY2tfY3VycmVudCgpID09IFxcXCJTeXNyZWdcXFwiIHtcXG4gfVxcbiBcXG4gIyBDdXJyZW50bHkgdGhpcyBpcyBlZmZlY3RpdmV5IGEgY29tbWVudCwgaW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGVtaXRcXG4tIyBkZWZpbmVzIGZvciB0aGUgZmllbGRzLlxcbisjIGRlZmluZXMgZm9yIHRoZSBmaWVsZHMuIFxcXCJNYXBwaW5nXFxcIiBkb2VzIGVtaXQgdGhlIFJFU3gvVU5LTiBkZWZpbml0aW9ucy5cXG4gKCQxID09IFxcXCJGaWVsZHNcXFwiIHx8ICQxID09IFxcXCJNYXBwaW5nXFxcIikgXFx1MDAyNlxcdTAwMjYgYmxvY2tfY3VycmVudCgpID09IFxcXCJTeXNyZWdcXFwiIHtcXG4gXFx0ZXhwZWN0X2ZpZWxkcygyKVxcbiBcXG5AQCAtMjM5LDkgKzIzOSwxNSBAQCAkMSA9PSBcXFwiRW5kU3lzcmVnXFxcIiBcXHUwMDI2XFx1MDAyNiBibG9ja19jdXJyZW50KCkgPT0gXFxcIlN5c3JlZ1xcXCIge1xcbiBcXHRwcmludCBcXFwiXFxcIlxcbiBcXG4gXFx0bmV4dF9iaXQgPSAtMVxcbi1cXHRyZXMwID0gbnVsbFxcbi1cXHRyZXMxID0gbnVsbFxcbi1cXHR1bmtuID0gbnVsbFxcbitcXHRpZiAoJDEgPT0gXFxcIk1hcHBpbmdcXFwiKSB7XFxuK1xcdFxcdHJlczAgPSAkMiBcXFwiX1JFUzBcXFwiXFxuK1xcdFxcdHJlczEgPSAkMiBcXFwiX1JFUzFcXFwiXFxuK1xcdFxcdHVua24gPSAkMiBcXFwiX1VOS05cXFwiXFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlczAgPSBudWxsXFxuK1xcdFxcdHJlczEgPSBudWxsXFxuK1xcdFxcdHVua24gPSBudWxsXFxuK1xcdH1cXG4gXFxuIFxcdG5leHRcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXFxuaW5kZXggYmMxNzg4YjE2NjJiNzYuLmFmZTkzMzc4NTFhMmUzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXFxuKysrIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcXG5AQCAtMjM4NiwxNyArMjM4Niw0MCBAQCBFbmRFbnVtXFxuIEVuZFN5c3JlZ1xcbiBcXG4gU3lzcmVnXFx0SURfQUE2NE1NRlI0X0VMMVxcdDNcXHQwXFx0MFxcdDdcXHQ0XFxuLVJlczBcXHQ2Mzo0OFxcbitVbnNpZ25lZEVudW1cXHQ2Mzo2MFxcdE1URUZHVFxcbitcXHQwYjAwMDBcXHROSVxcbitcXHQwYjAwMDFcXHRJTVBcXG4rRW5kRW51bVxcbitVbnNpZ25lZEVudW1cXHQ1OTo1NlxcdFNDUlhcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuK0VuZEVudW1cXG4rVW5zaWduZWRFbnVtXFx0NTU6NTJcXHRURVZcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuK0VuZEVudW1cXG4rVW5zaWduZWRFbnVtXFx0NTE6NDhcXHRUUFNcXG4rXFx0MGIwMDAwXFx0VkFMXzAwMDBcXG4rXFx0MGIwMDAxXFx0VkFMXzAwMDFcXG4rXFx0MGIwMDEwXFx0VkFMXzAwMTBcXG4rRW5kRW51bVxcbiBVbnNpZ25lZEVudW1cXHQ0Nzo0NFxcdFNSTUFTS1xcbiBcXHQwYjAwMDBcXHROSVxcbiBcXHQwYjAwMDFcXHRJTVBcXG4rXFx0MGIwMDEwXFx0U1JNQVNLMlxcbitFbmRFbnVtXFxuK1Vuc2lnbmVkRW51bVxcdDQzOjQwXFx0VExCSURcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuIEVuZEVudW1cXG4tUmVzMFxcdDQzOjQwXFxuIFVuc2lnbmVkRW51bVxcdDM5OjM2XFx0RTNEU0VcXG4gXFx0MGIwMDAwXFx0TklcXG4gXFx0MGIwMDAxXFx0SU1QXFxuIEVuZEVudW1cXG4tUmVzMFxcdDM1OjMyXFxuK1Vuc2lnbmVkRW51bVxcdDM1OjMyXFx0RUFFU1JcXG4rXFx0MGIwMDAwXFx0TklcXG4rXFx0MGIwMDAxXFx0SU1QXFxuK0VuZEVudW1cXG4gVW5zaWduZWRFbnVtXFx0MzE6MjhcXHRSTUVHRElcXG4gXFx0MGIwMDAwXFx0TklcXG4gXFx0MGIwMDAxXFx0SU1QXFxuQEAgLTI0MTAsNiArMjQzMyw3IEBAIFVuc2lnbmVkRW51bVxcdDIzOjIwXFx0TlZfZnJhY1xcbiBcXHQwYjAwMDBcXHROVl9OVjJcXG4gXFx0MGIwMDAxXFx0TlYyX09OTFlcXG4gXFx0MGIwMDEwXFx0TlYyUDFcXG4rXFx0MGIwMDExXFx0TlYzXFxuIEVuZEVudW1cXG4gVW5zaWduZWRFbnVtXFx0MTk6MTZcXHRGR1dURTNcXG4gXFx0MGIwMDAwXFx0TklcXG5AQCAtNDI0Miw2ICs0MjY2LDkgQEAgRmllbGRcXHQxXFx0RTJUUkVcXG4gRmllbGRcXHQwXFx0RTBIVFJFXFxuIEVuZFN5c3JlZ1xcbiBcXG4rU3lzcmVnXFx0TlZIQ1JfRUwyXFx0M1xcdDRcXHQxXFx0NVxcdDBcXG4rTWFwcGluZ1xcdEhDUl9FTDJcXG4rRW5kU3lzcmVnXFxuIFxcbiBTeXNyZWcgSERGR1JUUjJfRUwyXFx0M1xcdDRcXHQzXFx0MVxcdDBcXG4gUmVzMFxcdDYzOjI1XFxuQEAgLTQ1MjEsNyArNDU0OCwxNCBAQCBGaWVsZHNcXHRaQ1JfRUx4XFxuIEVuZFN5c3JlZ1xcbiBcXG4gU3lzcmVnXFx0SENSWF9FTDJcXHQzXFx0NFxcdDFcXHQyXFx0Mlxcbi1SZXMwXFx0NjM6MjVcXG4rUmVzMFxcdDYzOjM1XFxuK0ZpZWxkXFx0MzRcXHROVm5UVExCT1NcXG4rRmllbGRcXHQzM1xcdE5WblRUTEJJU1xcbitGaWVsZFxcdDMyXFx0TlZuVFRMQlxcbitSZXMwXFx0MzE6MjhcXG4rRmllbGRcXHQyN1xcdE5WVEdFXFxuK0ZpZWxkXFx0MjZcXHRTUk1BU0tFblxcbitSZXMwXFx0MjVcXG4gRmllbGRcXHQyNFxcdFBBQ01FblxcbiBGaWVsZFxcdDIzXFx0RW5GUE1cXG4gRmllbGRcXHQyMlxcdEdDU0VuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE5LjA0OTE0Mjg5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxMTkyNDY0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9pbml0X252X3N5c3JlZ3NcIixcbiAgICBcImxpbWl0X252X2lkX3JlZ1wiLFxuICAgIFwibnZoY3JfZWwyX3Zpc2liaWxpdHlcIixcbiAgICBcImdldF9yZWdfZml4ZWRfYml0c1wiLFxuICAgIFwiZml4dXBfbnZfZ3Vlc3RfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIHYzIChGRUFUX05WMykgYW5kIEZFQVRfTlYycDEgaW4gS1ZNLiBJdCBtb2RpZmllcyBjb3JlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGluY2x1ZGluZyBzeXNyZWcgaGFuZGxpbmcgKGUuZy4sIE5WSENSX0VMMiwgQ1BUUl9FTDIsIENOVEhDVExfRUwyKSwgdHJhcCBjb25maWd1cmF0aW9uLCBhbmQgZ3Vlc3QgZXhpdCBmaXh1cHMuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgS1ZNIGd1ZXN0cyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA4ZGE2MmEzY2VkYmY4OGZmM2U2OGFhYzk3YmQxZDBiYTlhN2RiMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE2OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmE0MjY4M2FmNzlmYjVkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtOTY4LDYgKzk2OCw3IEBAIHN0cnVjdCBhcm02NF9mdHJfcmVnICpnZXRfYXJtNjRfZnRyX3JlZyh1MzIgc3lzX2lkKTtcbiBleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjBfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NG1tZnIxX292ZXJyaWRlO1xuIGV4dGVybiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIGlkX2FhNjRtbWZyMl9vdmVycmlkZTtcbitleHRlcm4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBpZF9hYTY0bW1mcjRfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHBmcjBfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHBmcjFfb3ZlcnJpZGU7XG4gZXh0ZXJuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgaWRfYWE2NHpmcjBfb3ZlcnJpZGU7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaFxuaW5kZXggM2Y5MjMzYjVhMTMwODEuLmY2Y2Q4NTEwNDc5NDc0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oXG5AQCAtMjg3LDIxICsyODcsNiBAQFxuIFx0XHRcdFx0IEdFTk1BU0soMTksIDE4KSB8XHRcXFxuIFx0XHRcdFx0IEdFTk1BU0soMTUsIDApKVxuIFxuLS8qXG4tICogUG9sYXJpdHkgbWFza3MgZm9yIEhDUlhfRUwyLCBsaW1pdGVkIHRvIHRoZSBiaXRzIHRoYXQgd2Uga25vdyBhYm91dFxuLSAqIGF0IHRoaXMgcG9pbnQgaW4gdGltZS4gSXQgZG9lc24ndCBtZWFuIHRoYXQgd2UgYWN0dWFsbHkgKmhhbmRsZSpcbi0gKiB0aGVtLCBidXQgdGhhdCBhdCBsZWFzdCB0aG9zZSB0aGF0IGFyZSBub3QgYWR2ZXJ0aXNlZCB0byBhIGd1ZXN0XG4tICogd2lsbCBiZSBSRVMwIGZvciB0aGF0IGd1ZXN0LlxuLSAqL1xuLSNkZWZpbmUgX19IQ1JYX0VMMl9NQVNLXHRcdChCSVRfVUxMKDYpKVxuLSNkZWZpbmUgX19IQ1JYX0VMMl9uTUFTS1x0KEdFTk1BU0tfVUxMKDI0LCAxNCkgfCBcXFxuLVx0XHRcdFx0IEdFTk1BU0tfVUxMKDExLCA3KSAgfCBcXFxuLVx0XHRcdFx0IEdFTk1BU0tfVUxMKDUsIDApKVxuLSNkZWZpbmUgX19IQ1JYX0VMMl9SRVMwXHRcdH4oX19IQ1JYX0VMMl9uTUFTSyB8IF9fSENSWF9FTDJfTUFTSylcbi0jZGVmaW5lIF9fSENSWF9FTDJfUkVTMVx0XHR+KF9fSENSWF9FTDJfbk1BU0sgfCBcXFxuLVx0XHRcdFx0ICBfX0hDUlhfRUwyX01BU0sgIHwgXFxcbi1cdFx0XHRcdCAgX19IQ1JYX0VMMl9SRVMwKVxuLVxuIC8qIEh5cCBQcmVmZXRjaCBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyIChIUEZBUi9IREZBUikgKi9cbiAjZGVmaW5lIEhQRkFSX01BU0tcdCh+VUwoMHhmKSlcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuaW5kZXggNWJmM2Q3ZTFkOTJjNzcuLmQ2ZjQzMmIxNTU4ZjVmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcbkBAIC0yNjYsNiArMjY2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2c2Vycm9yX3N0YXRlX2lzX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAgICAgKF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKSBcdTAwMjYgSENSWF9FTDJfVE1FQSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MihzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG4rXHRcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXHUwMDI2XHUwMDI2XG4rXHRcdGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4rXHRcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMykpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbmVzdGVkX252M19jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gKGhhc192aGUoKSBcdTAwMjZcdTAwMjYga3ZtX2hhc19udjModmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNiBpc19uZXN0ZWRfY3R4dCh2Y3B1KSBcdTAwMjZcdTAwMjZcbitcdFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUl9FTDIpIFx1MDAyNiBIQ1JfRUwyX05WKSBcdTAwMjZcdTAwMjZcbitcdFx0KF9fdmNwdV9zeXNfcmVnKHZjcHUsIEhDUlhfRUwyKSBcdTAwMjYgSENSWF9FTDJfTlZUR0UpKTtcbit9XG4rXG4gLypcbiAgKiBUaGUgbGF5b3V0IG9mIFNQU1IgZm9yIGFuIEFBcmNoMzIgc3RhdGUgaXMgZGlmZmVyZW50IHdoZW4gb2JzZXJ2ZWQgZnJvbSBhblxuICAqIEFBcmNoNjQgU1BTUl9FTHggb3IgYW4gQUFyY2gzMiBTUFNSXyouIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBBQXJjaDMyXG5AQCAtNjE3LDcgKzYzNyw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1faW5jcl9wYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICovXG4gc3RhdGljIGlubGluZSB1NjQgdmNwdV9zYW5pdGlzZWRfY3B0cl9lbDIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHU2NCBjcHRyID0gX192Y3B1X3N5c19yZWcodmNwdSwgQ1BUUl9FTDIpO1xuK1x0dTY0IGNwdHIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMik7XG4gXG4gXHRpZiAoIXZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4gXHRcdGNwdHIgPSB0cmFuc2xhdGVfY3B0cl9lbDJfdG9fY3BhY3JfZWwxKGNwdHIpO1xuQEAgLTY4Niw2ICs3MDYsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X2hjcngoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0XHRpZiAoa3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NElTQVIxX0VMMSwgTFM2NCwgTFM2NF9WKSlcbiBcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gSENSWF9FTDJfRW5BU1I7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE5WMyBpcyBhIGhvc3Qtc3BlY2lmaWMgZXh0ZW5zaW9uLCBhbmQgd2UgYWx3YXlzIHVzZSBpdFxuK1x0XHQgKiB3aGVuIHByZXNlbnQgYW5kIHRoYXQgdGhlIGd1ZXN0IHVzZXMgTlYuIEl0IG1heSBiZSBiZVxuK1x0XHQgKiBoaWRkZW4gZnJvbSB0aGUgZ3Vlc3QgdGhvdWdoLlxuK1x0XHQgKi9cbitcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2Y3B1X2hhc19udih2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSkge1xuK1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5oY3J4X2VsMiB8PSBIQ1JYX0VMMl9OVlRHRTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIHRoZSBndWVzdCBpcyBOVjItY2FwYWJsZSwgdGhlbiB3ZSBuZWVkIHRvIHNlZVxuK1x0XHRcdCAqIGFsbCB0aGUgVExCSXMsIGFzIGNvbmZpZ3VyZWQgaW4gSENSX0VMMi5cbitcdFx0XHQgKiBPdGhlcndpc2UsIHJlbGF4IHRoZSBUTEJJIHRyYXBzIHRvIG9ubHkgVEdFPTAuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFrdm1faGFzX252Mih2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDIgfD0gKEhDUlhfRUwyX05WblRUTEIgIHxcbitcdFx0XHRcdFx0XHRcdEhDUlhfRUwyX05WblRUTEJJUyk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiYWUyYzRmOTJlZjVjMC4uMjY0OGM4YTcxN2JhMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTU0Myw2ICs1NDMsNyBAQCBlbnVtIHZjcHVfc3lzcmVnIHtcbiBcdE1EQ1JfRUwyLFx0LyogTW9uaXRvciBEZWJ1ZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChFTDIpICovXG4gXHRDTlRIQ1RMX0VMMixcdC8qIENvdW50ZXItdGltZXIgSHlwZXJ2aXNvciBDb250cm9sIHJlZ2lzdGVyICovXG4gXHRaQ1JfRUwyLFx0LyogU1ZFIENvbnRyb2wgUmVnaXN0ZXIgKEVMMikgKi9cbitcdEhDUl9FTDIsXHQvKiBIeXBlcnZpc29yIENvbnRyb2wgUmVnaXN0ZXIgKi9cbiBcbiBcdC8qIEFueSBWTkNSLWNhcGFibGUgcmVnIGdvZXMgYWZ0ZXIgdGhpcyBwb2ludCAqL1xuIFx0TUFSS0VSKF9fVk5DUl9TVEFSVF9fKSxcbkBAIC01NzEsNyArNTcyLDcgQEAgZW51bSB2Y3B1X3N5c3JlZyB7XG4gXHRWTkNSKFRGU1JfRUwxKSxcdC8qIFRhZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKEVMMSkgKi9cbiBcdFZOQ1IoVlBJRFJfRUwyKSwvKiBWaXJ0dWFsaXphdGlvbiBQcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoVk1QSURSX0VMMiksLyogVmlydHVhbGl6YXRpb24gTXVsdGlwcm9jZXNzb3IgSUQgUmVnaXN0ZXIgKi9cbi1cdFZOQ1IoSENSX0VMMiksXHQvKiBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbitcdFZOQ1IoTlZIQ1JfRUwyKSwvKiBOViBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoSFNUUl9FTDIpLFx0LyogSHlwZXJ2aXNvciBTeXN0ZW0gVHJhcCBSZWdpc3RlciAqL1xuIFx0Vk5DUihWVFRCUl9FTDIpLC8qIFZpcnR1YWxpemF0aW9uIFRyYW5zbGF0aW9uIFRhYmxlIEJhc2UgUmVnaXN0ZXIgKi9cbiBcdFZOQ1IoVlRDUl9FTDIpLFx0LyogVmlydHVhbGl6YXRpb24gVHJhbnNsYXRpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm5jcl9tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5pbmRleCAxNDM2NmQzNWNlODJmMC4uOWU4YTQ5ZmE4YjYzOGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZuY3JfbWFwcGluZy5oXG5AQCAtMTEsNyArMTEsNyBAQFxuICNkZWZpbmUgVk5DUl9WVENSX0VMMiAgICAgICAgICAgMHgwNDBcbiAjZGVmaW5lIFZOQ1JfVk1QSURSX0VMMiAgICAgICAgIDB4MDUwXG4gI2RlZmluZSBWTkNSX0NOVFZPRkZfRUwyICAgICAgICAweDA2MFxuLSNkZWZpbmUgVk5DUl9IQ1JfRUwyICAgICAgICAgICAgMHgwNzhcbisjZGVmaW5lIFZOQ1JfTlZIQ1JfRUwyICAgICAgICAgIDB4MDc4XG4gI2RlZmluZSBWTkNSX0hTVFJfRUwyICAgICAgICAgICAweDA4MFxuICNkZWZpbmUgVk5DUl9WUElEUl9FTDIgICAgICAgICAgMHgwODhcbiAjZGVmaW5lIFZOQ1JfVFBJRFJfRUwyICAgICAgICAgIDB4MDkwXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uMTRmYmZhOGU2YjdiNTAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTc4NSw2ICs3ODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9yYXpbXSA9IHtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnIwX292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0bW1mcjFfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjRtbWZyMl9vdmVycmlkZTtcbitzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NG1tZnI0X292ZXJyaWRlO1xuIHN0cnVjdCBhcm02NF9mdHJfb3ZlcnJpZGUgX19yZWFkX21vc3RseSBpZF9hYTY0cGZyMF9vdmVycmlkZTtcbiBzdHJ1Y3QgYXJtNjRfZnRyX292ZXJyaWRlIF9fcmVhZF9tb3N0bHkgaWRfYWE2NHBmcjFfb3ZlcnJpZGU7XG4gc3RydWN0IGFybTY0X2Z0cl9vdmVycmlkZSBfX3JlYWRfbW9zdGx5IGlkX2FhNjR6ZnIwX292ZXJyaWRlO1xuQEAgLTg1OCw3ICs4NTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IF9fZnRyX3JlZ19lbnRyeSB7XG4gXHRBUk02NF9GVFJfUkVHX09WRVJSSURFKFNZU19JRF9BQTY0TU1GUjJfRUwxLCBmdHJfaWRfYWE2NG1tZnIyLFxuIFx0XHRcdCAgICAgICBcdTAwMjZpZF9hYTY0bW1mcjJfb3ZlcnJpZGUpLFxuIFx0QVJNNjRfRlRSX1JFRyhTWVNfSURfQUE2NE1NRlIzX0VMMSwgZnRyX2lkX2FhNjRtbWZyMyksXG4tXHRBUk02NF9GVFJfUkVHKFNZU19JRF9BQTY0TU1GUjRfRUwxLCBmdHJfaWRfYWE2NG1tZnI0KSxcbitcdEFSTTY0X0ZUUl9SRUdfT1ZFUlJJREUoU1lTX0lEX0FBNjRNTUZSNF9FTDEsIGZ0cl9pZF9hYTY0bW1mcjQsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlkX2FhNjRtbWZyNF9vdmVycmlkZSksXG4gXG4gXHQvKiBPcDEgPSAwLCBDUm4gPSAxMCwgQ1JtID0gNCAqL1xuIFx0QVJNNjRfRlRSX1JFRyhTWVNfTVBBTUlEUl9FTDEsIGZ0cl9tcGFtaWRyKSxcbkBAIC0yNjIwLDYgKzI2MjIsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdFx0eyAvKiBTZW50aW5lbCAqLyB9XG4gXHRcdH0sXG4gXHR9LFxuK1x0e1xuK1x0XHQuZGVzYyA9IFwiRkVBVF9OVjJwMVwiLFxuK1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19OVjJQMSxcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5tYXRjaGVzID0gaGFzX2NwdWlkX2ZlYXR1cmUsXG4rXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJQMSlcbitcdH0sXG4rXHR7XG4rXHRcdC5kZXNjID0gXCJGRUFUX05WM1wiLFxuK1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19OVjMsXG4rXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuK1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuK1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKVxuK1x0fSxcbiBcdHtcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfMzJCSVRfRUwwX0RPX05PVF9VU0UsXG4gXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2ltYWdlLXZhcnMuaCBiL2FyY2gvYXJtNjQva2VybmVsL2ltYWdlLXZhcnMuaFxuaW5kZXggZDRjN2Q0NWFlNmJjODMuLmQxNWMyY2IxYjBmMjhhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW1hZ2UtdmFycy5oXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9pbWFnZS12YXJzLmhcbkBAIC01MSw2ICs1MSw3IEBAIFBJX0VYUE9SVF9TWU0oaWRfYWE2NGlzYXIyX292ZXJyaWRlKTtcbiBQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyMF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0bW1mcjFfb3ZlcnJpZGUpO1xuIFBJX0VYUE9SVF9TWU0oaWRfYWE2NG1tZnIyX292ZXJyaWRlKTtcbitQSV9FWFBPUlRfU1lNKGlkX2FhNjRtbWZyNF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0cGZyMF9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0cGZyMV9vdmVycmlkZSk7XG4gUElfRVhQT1JUX1NZTShpZF9hYTY0c21mcjBfb3ZlcnJpZGUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3BpL2lkcmVnLW92ZXJyaWRlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXG5pbmRleCBiYzU3YjI5MGU1ZTdiYS4uNGU0NzYxNmJjYWMyM2EgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9waS9pZHJlZy1vdmVycmlkZS5jXG5AQCAtMTA2LDYgKzEwNiwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYyBtbWZyMiBfX3ByZWw2NF9pbml0Y29uc3QgPSB7XG4gXHR9LFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJfc2V0X2Rlc2MgbW1mcjQgX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xuK1x0Lm5hbWVcdFx0PSBcImlkX2FhNjRtbWZyNFwiLFxuK1x0Lm92ZXJyaWRlXHQ9IFx1MDAyNmlkX2FhNjRtbWZyNF9vdmVycmlkZSxcbitcdC5maWVsZHNcdFx0PSB7XG4rXHRcdEZJRUxEKFwibnZfZnJhY1wiLCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIE5VTEwpLFxuK1x0XHR7fVxuK1x0fSxcbit9O1xuK1xuIHN0YXRpYyBib29sIF9faW5pdCBwZnIwX3N2ZV9maWx0ZXIodTY0IHZhbClcbiB7XG4gXHQvKlxuQEAgLTIyMCw2ICsyMjksNyBAQCBQUkVMNjQoY29uc3Qgc3RydWN0IGZ0cl9zZXRfZGVzYywgcmVnKSByZWdzW10gX19wcmVsNjRfaW5pdGNvbnN0ID0ge1xuIFx0eyBcdTAwMjZtbWZyMFx0fSxcbiBcdHsgXHUwMDI2bW1mcjFcdH0sXG4gXHR7IFx1MDAyNm1tZnIyXHR9LFxuK1x0eyBcdTAwMjZtbWZyNFx0fSxcbiBcdHsgXHUwMDI2cGZyMCBcdH0sXG4gXHR7IFx1MDAyNnBmcjEgXHR9LFxuIFx0eyBcdTAwMjZpc2FyMVx0fSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMgYi9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmNcbmluZGV4IDQxNTVmZTg5YjU4YTE3Li5kYjYwZmFjYWQ5ZjNjMCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG5AQCAtODc2LDggKzg3NiwxNCBAQCBzdGF0aWMgdm9pZCB0aW1lcl9zZXRfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdGltZXJfbWFwICptYXApXG4gXHRhc3NpZ25fY2xlYXJfc2V0X2JpdCh0dnQwMiwgQ05USENUTF9FTDFOVlZDVCwgY2xyLCBzZXQpO1xuIFx0YXNzaWduX2NsZWFyX3NldF9iaXQodHB0MDIsIENOVEhDVExfRUwxTlZQQ1QsIGNsciwgc2V0KTtcbiBcbi1cdC8qIFRoaXMgb25seSBoYXBwZW5zIG9uIFZIRSwgc28gdXNlIHRoZSBDTlRIQ1RMX0VMMiBhY2Nlc3Nvci4gKi9cbi1cdHN5c3JlZ19jbGVhcl9zZXQoY250aGN0bF9lbDIsIGNsciwgc2V0KTtcbitcdC8qXG4rXHQgKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBWSEUsIHNvIHVzZSB0aGUgQ05USENUTF9FTDIgYWNjZXNzb3IsIHVubGVzc1xuK1x0ICogd2UgYXJlIHN1cmUgQ05US0NUTF9FTDEgaXMgY29tcGxldGVseSBzdGF0ZWZ1bCB3aXRoIEZFQVRfTlYycDEuXG4rXHQgKi9cbitcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxuK1x0XHRzeXNyZWdfY2xlYXJfc2V0KGNudGhjdGxfZWwyLCBjbHIsIHNldCk7XG4rXHRlbHNlXG4rXHRcdHN5c3JlZ19jbGVhcl9zZXQoY250a2N0bF9lbDEsIGNsciwgc2V0KTtcbiB9XG4gXG4gdm9pZCBrdm1fdGltZXJfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9jb25maWcuYyBiL2FyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXG5pbmRleCAwNjIyMTYyYjA4OWU1MC4uN2U4NjQ3OTE0MjcyMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9jb25maWcuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vY29uZmlnLmNcbkBAIC0yMjUsNiArMjI1LDcgQEAgc3RydWN0IHJlZ19mZWF0X21hcF9kZXNjIHtcbiAjZGVmaW5lIEZFQVRfSENYXHRcdElEX0FBNjRNTUZSMV9FTDEsIEhDWCwgSU1QXG4gI2RlZmluZSBGRUFUX1MyUElFXHRcdElEX0FBNjRNTUZSM19FTDEsIFMyUElFLCBJTVBcbiAjZGVmaW5lIEZFQVRfR0NJRVx0XHRJRF9BQTY0UEZSMl9FTDEsIEdDSUUsIElNUFxuKyNkZWZpbmUgRkVBVF9OVjNcdFx0SURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzXG4gXG4gc3RhdGljIGJvb2wgbm90X2ZlYXRfYWE2NGVsMyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuQEAgLTkwNCw2ICs5MDUsMTIgQEAgc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVBfRkdUKGhkZmd3dHIyX2Rlc2MsIGhkZmd3dHIyX21hc2tzLFxuIFxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xuK1x0TkVFRFNfRkVBVChIQ1JYX0VMMl9OVlRHRVx0XHR8XG4rXHRcdCAgIEhDUlhfRUwyX05WblRUTEJcdFx0fFxuK1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCSVNcdFx0fFxuK1x0XHQgICBIQ1JYX0VMMl9OVm5UVExCT1MsXG4rXHRcdCAgIEZFQVRfTlYzKSxcbitcdE5FRURTX0ZFQVQoSENSWF9FTDJfU1JNQVNLRW4sIEZFQVRfU1JNQVNLKSxcbiBcdE5FRURTX0ZFQVQoSENSWF9FTDJfUEFDTUVuLCBmZWF0X3BhdXRoX2xyKSxcbiBcdE5FRURTX0ZFQVQoSENSWF9FTDJfRW5GUE0sIEZFQVRfRlBNUiksXG4gXHRORUVEU19GRUFUKEhDUlhfRUwyX0dDU0VuLCBGRUFUX0dDUyksXG5AQCAtOTMzLDcgKzk0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyeF9mZWF0X21hcFtdID0ge1xuIH07XG4gXG4gXG4tc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAoaGNyeF9kZXNjLCBfX0hDUlhfRUwyLFxuK3N0YXRpYyBjb25zdCBERUNMQVJFX0ZFQVRfTUFQKGhjcnhfZGVzYywgSENSWF9FTDIsXG4gXHRcdFx0ICAgICAgaGNyeF9mZWF0X21hcCwgRkVBVF9IQ1gpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgaGNyX2ZlYXRfbWFwW10gPSB7XG5AQCAtMTAxMCw2ICsxMDE3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYml0c190b19mZWF0X21hcCBoY3JfZmVhdF9tYXBbXSA9IHtcbiBzdGF0aWMgY29uc3QgREVDTEFSRV9GRUFUX01BUChoY3JfZGVzYywgSENSX0VMMixcbiBcdFx0XHQgICAgICBoY3JfZmVhdF9tYXAsIEZFQVRfQUE2NEVMMik7XG4gXG4rc3RhdGljIGNvbnN0IERFQ0xBUkVfRkVBVF9NQVAobnZoY3JfZGVzYywgTlZIQ1JfRUwyLFxuK1x0XHRcdCAgICAgIGhjcl9mZWF0X21hcCwgRkVBVF9OVjMpO1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2JpdHNfdG9fZmVhdF9tYXAgc2N0bHIyX2ZlYXRfbWFwW10gPSB7XG4gXHRORUVEU19GRUFUKFNDVExSMl9FTDFfTk1FQVx0fFxuIFx0XHQgICBTQ1RMUjJfRUwxX0VBU0UsXG5AQCAtMTM4NCw2ICsxMzk0LDcgQEAgdm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhkZmd3dHIyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2aGNyeF9kZXNjKTtcbiBcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNmhjcl9kZXNjKTtcbitcdGNoZWNrX3JlZ19kZXNjKFx1MDAyNm52aGNyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2c2N0bHIyX2Rlc2MpO1xuIFx0Y2hlY2tfcmVnX2Rlc2MoXHUwMDI2dGNyMl9lbDJfZGVzYyk7XG4gXHRjaGVja19yZWdfZGVzYyhcdTAwMjZzY3Rscl9lbDFfZGVzYyk7XG5AQCAtMTU3OSwxMSArMTU5MCwyMSBAQCBzdHJ1Y3QgcmVzeCBnZXRfcmVnX2ZpeGVkX2JpdHMoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEhDUlhfRUwyOlxuIFx0XHRyZXN4ID0gY29tcHV0ZV9yZWdfcmVzeF9iaXRzKGt2bSwgXHUwMDI2aGNyeF9kZXNjLCAwLCAwKTtcbi1cdFx0cmVzeC5yZXMxIHw9IF9fSENSWF9FTDJfUkVTMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEhDUl9FTDI6XG4gXHRcdHJlc3ggPSBjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZoY3JfZGVzYywgMCwgMCk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBOVkhDUl9FTDI6XG4rXHRcdC8qXG4rXHRcdCAqIE9ubHkgYXBwbHkgc2FuaXRpc2F0aW9uIGlmIHdlIGRvIGhhdmUgRkVBVF9OVjMuXG4rXHRcdCAqIE90aGVyd2lzZSwgdGhlIHJlZ2lzdGVyIGFsaWFzZXMgd2l0aCBIQ1JfRUwyIGluIFZOQ1IsXG4rXHRcdCAqIGFuZCB3ZSdyZSBiZXR0ZXIgb2ZmIHJlbHlpbmcgb24gZGF0YSB0cmFuc2ZlcnMgYmV0d2VlblxuK1x0XHQgKiBOVkhDUl9FTDIgYW5kIEhDUl9FTDIgdG8gc2FuaXRpc2UgdGhpbmdzLlxuK1x0XHQgKi9cbitcdFx0cmVzeCA9IChrdm1faGFzX252Myhrdm0pID9cbitcdFx0XHRjb21wdXRlX3JlZ19yZXN4X2JpdHMoa3ZtLCBcdTAwMjZudmhjcl9kZXNjLCAwLCAwKSA6XG4rXHRcdFx0KHR5cGVvZihyZXN4KSl7fSk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1RMUjJfRUwxOlxuIFx0Y2FzZSBTQ1RMUjJfRUwyOlxuIFx0XHRyZXN4ID0gY29tcHV0ZV9yZWdfcmVzeF9iaXRzKGt2bSwgXHUwMDI2c2N0bHIyX2Rlc2MsIDAsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXG5pbmRleCAzYzgyZjM5Mjg0NWQxNC4uZjVkYzU3OGQ4Yzk4NTYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jXG5AQCAtOTAsNiArOTAsNyBAQCBlbnVtIGNndF9ncm91cF9pZCB7XG4gXHRDR1RfSENSWF9FbkZQTSxcbiBcdENHVF9IQ1JYX1RDUjJFbixcbiBcdENHVF9IQ1JYX1NDVExSMkVuLFxuK1x0Q0dUX0hDUlhfbk5WVEdFLFxuIFxuIFx0Q0dUX0NOVEhDVExfRUwxVFZULFxuIFx0Q0dUX0NOVEhDVExfRUwxVFZDVCxcbkBAIC0xMjEsNiArMTIyLDggQEAgZW51bSBjZ3RfZ3JvdXBfaWQge1xuIFx0Q0dUX01EQ1JfVERFX1REUkEsXG4gXHRDR1RfTURDUl9URENDX1RERV9UREEsXG4gXG4rXHRDR1RfSENSX05WX0hDUlhfbk5WVEdFLFxuK1xuIFx0Q0dUX0lDSF9IQ1JfVENfVERJUixcbiBcbiBcdC8qXG5AQCAtNDEzLDYgKzQxNiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRyYXBfYml0cyBjb2Fyc2VfdHJhcF9iaXRzW10gPSB7XG4gXHRcdC5tYXNrXHRcdD0gSENSWF9FTDJfU0NUTFIyRW4sXG4gXHRcdC5iZWhhdmlvdXJcdD0gQkVIQVZFX0ZPUldBUkRfUlcsXG4gXHR9LFxuK1x0W0NHVF9IQ1JYX25OVlRHRV0gPSB7XG4rXHRcdC5pbmRleFx0XHQ9IEhDUlhfRUwyLFxuK1x0XHQudmFsdWVcdFx0PSAwLFxuK1x0XHQubWFza1x0XHQ9IEhDUlhfRUwyX05WVEdFLFxuK1x0XHQuYmVoYXZpb3VyXHQ9IEJFSEFWRV9GT1JXQVJEX1JXLFxuK1x0fSxcbiBcdFtDR1RfQ05USENUTF9FTDFUVlRdID0ge1xuIFx0XHQuaW5kZXhcdFx0PSBDTlRIQ1RMX0VMMixcbiBcdFx0LnZhbHVlXHRcdD0gQ05USENUTF9FTDFUVlQsXG5AQCAtNDY4LDYgKzQ3Nyw3IEBAIHN0YXRpYyBjb25zdCBlbnVtIGNndF9ncm91cF9pZCAqY29hcnNlX2NvbnRyb2xfY29tYm9bXSA9IHtcbiBcdFx0XHRcdFx0Q0dUX0hDUl9UVk0sIENHVF9IQ1JfVFJWTSwgQ0dUX0hDUlhfU0NUTFIyRW4pLFxuIFx0TUNCKENHVF9IQ1JfVFBVX1RJQ0FCLFx0XHRDR1RfSENSX1RQVSwgQ0dUX0hDUl9USUNBQiksXG4gXHRNQ0IoQ0dUX0hDUl9UUFVfVE9DVSxcdFx0Q0dUX0hDUl9UUFUsIENHVF9IQ1JfVE9DVSksXG4rXHRNQ0IoQ0dUX0hDUl9OVl9IQ1JYX25OVlRHRSxcdENHVF9IQ1JfTlYsIENHVF9IQ1JYX25OVlRHRSksXG4gXHRNQ0IoQ0dUX0hDUl9OVjFfbk5WMl9FTlNDWFQsXHRDR1RfSENSX05WMV9uTlYyLCBDR1RfSENSX0VOU0NYVCksXG4gXHRNQ0IoQ0dUX01EQ1JfVFBNX1RQTUNSLFx0XHRDR1RfTURDUl9UUE0sIENHVF9NRENSX1RQTUNSKSxcbiBcdE1DQihDR1RfTURDUl9UUE1fSFBNTixcdFx0Q0dUX01EQ1JfVFBNLCBDR1RfTURDUl9IUE1OKSxcbkBAIC04NTMsNiArODYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBlbmNvZGluZ190b190cmFwX2NvbmZpZyBlbmNvZGluZ190b19jZ3RbXSBfX2luaXRjb25zdCA9IHtcbiBcdFNSX1RSQVAoU1lTX1NDVExSMl9FTDIsXHRcdENHVF9IQ1JfTlYpLFxuIFx0U1JfUkFOR0VfVFJBUChTWVNfSENSX0VMMixcbiBcdFx0ICAgICAgU1lTX0hDUlhfRUwyLFx0Q0dUX0hDUl9OViksXG4rXHRTUl9UUkFQKFNZU19OVkhDUl9FTDIsXHRcdENHVF9IQ1JfTlZfSENSWF9uTlZUR0UpLFxuIFx0U1JfVFJBUChTWVNfU01QUklNQVBfRUwyLFx0Q0dUX0hDUl9OViksXG4gXHRTUl9UUkFQKFNZU19TTUNSX0VMMixcdFx0Q0dUX0hDUl9OViksXG4gXHRTUl9SQU5HRV9UUkFQKFNZU19UVEJSMF9FTDIsXG5AQCAtMjMyMCw3ICsyMzMxLDYgQEAgaW50IF9faW5pdCBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyh2b2lkKVxuIFx0QlVJTERfQlVHX09OKF9fTlJfQ0dUX0dST1VQX0lEU19fIFx1MDAzZSBCSVQoVENfQ0dUX0JJVFMpKTtcbiBcdEJVSUxEX0JVR19PTihfX05SX0ZHVF9HUk9VUF9JRFNfXyBcdTAwM2UgQklUKFRDX0ZHVF9CSVRTKSk7XG4gXHRCVUlMRF9CVUdfT04oX19OUl9GR19GSUxURVJfSURTX18gXHUwMDNlIEJJVChUQ19GR0ZfQklUUykpO1xuLVx0QlVJTERfQlVHX09OKF9fSENSWF9FTDJfTUFTSyBcdTAwMjYgX19IQ1JYX0VMMl9uTUFTSyk7XG4gXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShlbmNvZGluZ190b19jZ3QpOyBpKyspIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGVuY29kaW5nX3RvX3RyYXBfY29uZmlnICpjZ3QgPSBcdTAwMjZlbmNvZGluZ190b19jZ3RbaV07XG5AQCAtMjM0NiwxMCArMjM1Niw2IEBAIGludCBfX2luaXQgcG9wdWxhdGVfbnZfdHJhcF9jb25maWcodm9pZClcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKF9fSENSWF9FTDJfUkVTMCAhPSBIQ1JYX0VMMl9SRVMwKVxuLVx0XHRrdm1faW5mbyhcIlNhbml0aXNlZCBIQ1JfRUwyX1JFUzAgPSAlMDE2bGx4LCBleHBlY3RpbmcgJTAxNmxseFxcblwiLFxuLVx0XHRcdCBfX0hDUlhfRUwyX1JFUzAsIEhDUlhfRUwyX1JFUzApO1xuLVxuIFx0a3ZtX2luZm8oXCJudjogJWxkIGNvYXJzZSBncmFpbmVkIHRyYXAgaGFuZGxlcnNcXG5cIixcbiBcdFx0IEFSUkFZX1NJWkUoZW5jb2RpbmdfdG9fY2d0KSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oIGIvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oXG5pbmRleCA0YmY2MjRhNDk1OTFkZi4uN2IyNzI5NmM5NDYwNzAgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmhcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaFxuQEAgLTEwOCw5ICsxMDgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfY3B0cl90cmFwc192aGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogVGhlIGFyY2hpdGVjdHVyZSBpcyBhIGJpdCBjcmFwICh3aGF0IGEgc3VycHJpc2UpOiBhbiBFTDIgZ3Vlc3RcbiBcdCAqIHdyaXRpbmcgdG8gQ1BUUl9FTDIgdmlhIENQQUNSX0VMMSBjYW4ndCBzZXQgYW55IG9mIFRDUEFDIG9yIFRUQSxcbiBcdCAqIGFzIHRoZXkgYXJlIFJFUzAgaW4gdGhlIGd1ZXN0J3Mgdmlldy4gVG8gd29yayBhcm91bmQgaXQsIHRyYXAgdGhlXG4tXHQgKiBzdWNrZXIgdXNpbmcgdGhlIHZlcnkgc2FtZSBiaXQgaXQgY2FuJ3Qgc2V0Li4uXG4rXHQgKiBzdWNrZXIgdXNpbmcgdGhlIHZlcnkgc2FtZSBiaXQgaXQgY2FuJ3Qgc2V0LiBGRUFUX05WMnAxIGZpeGVzIGl0LlxuIFx0ICovXG4tXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgaXNfaHlwX2N0eHQodmNwdSkpXG4rXHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSBcdTAwMjZcdTAwMjZcbitcdCAgICB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiBpc19oeXBfY3R4dCh2Y3B1KSlcbiBcdFx0dmFsIHw9IENQVFJfRUwyX1RDUEFDO1xuIFxuIFx0LypcbkBAIC0zMjUsNiArMzI2LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RlYWN0aXZhdGVfdHJhcHNfbXBhbSh2b2lkKVxuIFx0XHR3cml0ZV9zeXNyZWdfcyhNUEFNSENSX0hPU1RfRkxBR1MsIFNZU19NUEFNSENSX0VMMik7XG4gfVxuIFxuKy8qXG4rICogSnVzdCBsaWtlIGZvciBIQ1JfRUwyLCB3ZSBjYW4ndCBsZXQgdGhlIGd1ZXN0IG1lc3Mgd2l0aCBzb21lIG9mIHRoZVxuKyAqIGJhc2ljcyB3ZSByZWx5IG9uIGluIEhDUlhfRUwyLiBIb3dldmVyLCB0aGUgbWFqb3IgZGlmZmVyZW5jZSBpcyB0aGF0XG4rICogSENSWF9FTDIgb25seSBhZmZlY3RzIEVMMSwgYW5kIG5ldmVyIEVMMiAoc3VkZGVuIG91dGJ1cnN0IG9mIHNhbml0eSwgSVxuKyAqIGd1ZXNzKS4gU28gaXQgaXMgYWx3YXlzIHRoZSBndWVzdCBpbmZsaWN0aW5nIGl0IG9uIGl0cyBvd24gZ3Vlc3R4LlxuKyAqXG4rICogVGhpbmdzIHdlIGRvbid0IHdhbnQgdG8gbGV0IHRoZSBndWVzdCBjb250cm9sIGFyZTpcbisgKlxuKyAqIC0gVE1FQTogVGhhdCdzIGZvciB1cyB0byBkZWNpZGUgaG93IGFuIFNFQSBpcyByb3V0ZWQsIG5vdCB0aGUgZ3Vlc3QuXG4rICpcbisgKiAtIFBUVFdJOiBTaW1pbGFybHksIGl0IGlzIGZvciB1cyB0byBkZWNpZGUgd2hldGhlciBSZWR1Y2VkIENvaGVyZW5jeSBmb3JcbisgKiAgIHRoZSBQVFcgaXMgYSB0aGluZy4gSXQgcmVhbGx5IGlzbid0LlxuKyAqXG4rICogLSBFbklEQ1AxMjg6IFdlIGRvbid0IGFsbG93IElNUERFRiBzeXNyZWdzIC0tIGZ1bGwgc3RvcC5cbisgKi9cbisjZGVmaW5lIE5WX0hDUlhfR1VFU1RfRVhDTFVERVx0KEhDUlhfRUwyX1RNRUFcdCAgICB8IEhDUlhfRUwyX1BUVFdJIHwgXFxcbitcdFx0XHRcdCBIQ1JYX0VMMl9FbklEQ1AxMjgpXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfdHJhcHNfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpoY3R4dCA9IGhvc3RfZGF0YV9wdHIoaG9zdF9jdHh0KTtcbkBAIC0zNTAsOCArMzY5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfdHJhcHNfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dTY0IGhjcnggPSB2Y3B1LVx1MDAzZWFyY2guaGNyeF9lbDI7XG4gXHRcdGlmIChpc19uZXN0ZWRfY3R4dCh2Y3B1KSkge1xuIFx0XHRcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIQ1JYX0VMMik7XG4tXHRcdFx0aGNyeCB8PSB2YWwgXHUwMDI2IF9fSENSWF9FTDJfTUFTSztcbi1cdFx0XHRoY3J4IFx1MDAyNj0gfih+dmFsIFx1MDAyNiBfX0hDUlhfRUwyX25NQVNLKTtcbitcdFx0XHRoY3J4IHw9ICh2YWwgXHUwMDI2IH5OVl9IQ1JYX0dVRVNUX0VYQ0xVREUpO1xuK1x0XHRcdGhjcnggXHUwMDI2PSB+KH52YWwgXHUwMDI2IH5OVl9IQ1JYX0dVRVNUX0VYQ0xVREUpO1xuIFx0XHR9XG4gXG4gXHRcdGN0eHRfc3lzX3JlZyhoY3R4dCwgSENSWF9FTDIpID0gcmVhZF9zeXNyZWdfcyhTWVNfSENSWF9FTDIpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaCBiL2FyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zeXNyZWctc3IuaFxuaW5kZXggYTE3Y2JlNzU4MmRlOTAuLmMzODI4NDhkMzE5NDc5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N5c3JlZy1zci5oXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3lzcmVnLXNyLmhcbkBAIC0xNzIsNiArMTcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0KVxuIFxuIFx0aWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSlcbiBcdFx0Y3R4dF9zeXNfcmVnKGN0eHQsIFNDVExSMl9FTDEpID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TQ1RMUjIpO1xuK1xuK1x0LyogUmV0cmlldmUgTDIncyBIQ1JfRUwyLCBhbmQgc2F2ZSBpdCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0aWYgKGlzX25lc3RlZF9udjNfY3R4dChjdHh0X3RvX3ZjcHUoY3R4dCkpKVxuK1x0XHRjdHh0X3N5c19yZWcoY3R4dCwgTlZIQ1JfRUwyKSA9IHJlYWRfc3lzcmVnX3MoU1lTX05WSENSX0VMMik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19zYXZlX2VsMl9yZXR1cm5fc3RhdGUoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqY3R4dClcbkBAIC0yODUsNiArMjg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N5c3JlZ19yZXN0b3JlX2VsMV9zdGF0ZShzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0LFxuIFxuIFx0aWYgKGN0eHRfaGFzX3NjdGxyMihjdHh0KSlcbiBcdFx0d3JpdGVfc3lzcmVnX2VsMShjdHh0X3N5c19yZWcoY3R4dCwgU0NUTFIyX0VMMSksIFNZU19TQ1RMUjIpO1xuK1xuK1x0LypcbitcdCAqIFB1Ymxpc2ggdGhlIEwyIHZpZXcgb2YgSENSX0VMMiB0byB0aGUgSFcgaWYgTDEgaXMgdXNpbmcgTlYzLlxuK1x0ICogT3RoZXJ3aXNlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHBsYWNlIGluIHRoZSBMMSdzIG93biBWTkNSLlxuK1x0ICovXG4rXHRpZiAoaXNfbmVzdGVkX252M19jdHh0KGN0eHRfdG9fdmNwdShjdHh0KSkpXG4rXHRcdHdyaXRlX3N5c3JlZ19zKGN0eHRfc3lzX3JlZyhjdHh0LCBOVkhDUl9FTDIpLCBTWVNfTlZIQ1JfRUwyKTtcbiB9XG4gXG4gLyogUmVhZCB0aGUgVkNQVSBzdGF0ZSdzIFBTVEFURSwgYnV0IHRyYW5zbGF0ZSAodilFTDIgdG8gRUwxLiAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Ny4uZjEyOWYyMmYxNTYxOGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5AQCAtNzAsNiArNzAsMTIgQEAgc3RhdGljIHU2NCBfX2NvbXB1dGVfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0aWYgKCF2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxuIFx0XHRcdGhjciB8PSBIQ1JfTlYxO1xuIFxuK1x0XHQvKiBQdWJsaXNoIHRoZSBndWVzdCdzIHZpZXcgb2YgSENSX0VMMiB0byB0aGUgSFcgKi9cbitcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMykgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpXG4rXHRcdFx0d3JpdGVfc3lzcmVnX3MoX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMiksIFNZU19OVkhDUl9FTDIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE5WSENSX0VMMiwgX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBOb3RoaW5nIGluIEhDUl9FTDIgc2hvdWxkIGltcGFjdCBydW5uaW5nIGluIGh5cGVydmlzb3JcbiBcdFx0ICogY29udGV4dCwgYXBhcnQgZnJvbSBiaXRzIHdlIGhhdmUgZGVmaW5lZCBhcyBSRVN4IChFMkgsXG5AQCAtMzM5LDYgKzM0NSwxMCBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV9lcmV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXHR1NjQgZXNyID0ga3ZtX3ZjcHVfZ2V0X2Vzcih2Y3B1KTtcbiBcdHU2NCBzcHNyLCBlbHIsIG1vZGU7XG4gXG4rXHQvKiBXaXRoIE5WMywgdGhlIGZhc3QgcGF0aCBpcyBoYW5kbGVkIGluIEhXICovXG4rXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0LypcbiBcdCAqIEdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHB1dC9sb2FkIG1vdGlvbnMgaXMgYSB3YXN0ZSBvZiB0aW1lXG4gXHQgKiBpZiB0aGlzIGlzIGEgVkhFIGd1ZXN0IGh5cGVydmlzb3IgcmV0dXJuaW5nIHRvIGl0cyBvd25cbkBAIC0zNDksOCArMzU5LDggQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfZXJldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0ICogVW5sZXNzIHRoZSB0cmFwIGhhcyB0byBiZSBmb3J3YXJkZWQgZnVydGhlciBkb3duIHRoZSBsaW5lLFxuIFx0ICogb2YgY291cnNlLi4uXG4gXHQgKi9cbi1cdGlmICgoX192Y3B1X3N5c19yZWcodmNwdSwgSENSX0VMMikgXHUwMDI2IEhDUl9OVikgfHxcbi1cdCAgICAoX192Y3B1X3N5c19yZWcodmNwdSwgSEZHSVRSX0VMMikgXHUwMDI2IEhGR0lUUl9FTDJfRVJFVCkpXG4rXHRpZiAoaXNfbmVzdGVkX2N0eHQodmNwdSkgfHxcbitcdCAgICBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBIRkdJVFJfRUwyKSBcdTAwMjYgSEZHSVRSX0VMMl9FUkVUKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRzcHNyID0gcmVhZF9zeXNyZWdfZWwxKFNZU19TUFNSKTtcbkBAIC00NDEsNiArNDUxLDkgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfY3BhY3JfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXHR1NjQgZXNyID0ga3ZtX3ZjcHVfZ2V0X2Vzcih2Y3B1KTtcbiBcdGludCBydDtcbiBcbitcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghaXNfaHlwX2N0eHQodmNwdSkgfHwgZXNyX3N5czY0X3RvX3N5c3JlZyhlc3IpICE9IFNZU19DUEFDUl9FTDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC01MzQsMTkgKzU0NywxNyBAQCBzdGF0aWMgY29uc3QgZXhpdF9oYW5kbGVyX2ZuIGh5cF9leGl0X2hhbmRsZXJzW10gPSB7XG4gXHRbMHgzRl1cdFx0XHRcdD0ga3ZtX2h5cF9oYW5kbGVfaW1wZGVmLFxuIH07XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbitzdGF0aWMgdm9pZCBmaXh1cF9udl9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzeW5jaHJvbml6ZV92Y3B1X3BzdGF0ZSh2Y3B1KTtcbi1cbiBcdC8qXG4gXHQgKiBJZiB3ZSB3ZXJlIGluIEhZUCBjb250ZXh0IG9uIGVudHJ5LCBhZGp1c3QgdGhlIFBTVEFURSB2aWV3XG4gXHQgKiBzbyB0aGF0IHRoZSB1c3VhbCBoZWxwZXJzIHdvcmsgY29ycmVjdGx5LiBUaGlzIGVuZm9yY2VzIG91clxuIFx0ICogaW52YXJpYW50IHRoYXQgdGhlIGd1ZXN0J3MgSFlQIGNvbnRleHQgc3RhdHVzIGlzIHByZXNlcnZlZFxuIFx0ICogYWNyb3NzIGEgcnVuLlxuIFx0ICovXG4tXHRpZiAodmNwdV9oYXNfbnYodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdW5saWtlbHkoaG9zdF9kYXRhX3Rlc3RfZmxhZyhWQ1BVX0lOX0hZUF9DT05URVhUKSkpIHtcbitcdGlmICh1bmxpa2VseShob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpKSkge1xuIFx0XHR1NjQgbW9kZSA9ICp2Y3B1X2Nwc3IodmNwdSkgXHUwMDI2IChQU1JfTU9ERV9NQVNLIHwgUFNSX01PREUzMl9CSVQpO1xuK1x0XHR1NjQgaGNyO1xuIFxuIFx0XHRzd2l0Y2ggKG1vZGUpIHtcbiBcdFx0Y2FzZSBQU1JfTU9ERV9FTDF0OlxuQEAgLTU1OSwxMSArNTcwLDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXG4gXHRcdCp2Y3B1X2Nwc3IodmNwdSkgXHUwMDI2PSB+KFBTUl9NT0RFX01BU0sgfCBQU1JfTU9ERTMyX0JJVCk7XG4gXHRcdCp2Y3B1X2Nwc3IodmNwdSkgfD0gbW9kZTtcbitcbitcdFx0LyogUHVibGlzaCB0aGUgbGF0ZXN0IEhDUl9FTDIgdG8gdGhlIGVtdWxhdGlvbiAqL1xuK1x0XHRoY3IgPSAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICAgIHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cbitcdFx0XHRyZWFkX3N5c3JlZ19zKFNZU19OVkhDUl9FTDIpIDpcbitcdFx0XHRfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBOVkhDUl9FTDIpO1xuK1xuK1x0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgSENSX0VMMiwgaGNyKTtcbiBcdH1cbiBcbiBcdC8qIEFwcGx5IGV4dHJlbWUgcGFyYW5vaWEhICovXG4tXHRCVUdfT04odmNwdV9oYXNfbnYodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgISFob3N0X2RhdGFfdGVzdF9mbGFnKFZDUFVfSU5fSFlQX0NPTlRFWFQpICE9IGlzX2h5cF9jdHh0KHZjcHUpKTtcbitcdEJVR19PTighIWhvc3RfZGF0YV90ZXN0X2ZsYWcoVkNQVV9JTl9IWVBfQ09OVEVYVCkgIT0gaXNfaHlwX2N0eHQodmNwdSkpO1xuK31cbitcbitzdGF0aWMgYm9vbCBmaXh1cF9ndWVzdF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4re1xuK1x0c3luY2hyb25pemVfdmNwdV9wc3RhdGUodmNwdSk7XG4rXG4rXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4rXHRcdGZpeHVwX252X2d1ZXN0X2V4aXQodmNwdSk7XG4gXG4gXHRyZXR1cm4gX19maXh1cF9ndWVzdF9leGl0KHZjcHUsIGV4aXRfY29kZSwgaHlwX2V4aXRfaGFuZGxlcnMpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N5c3JlZy1zci5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuaW5kZXggYmU2ODViNjNlOGNmMjYuLjBjNGVmMWNlMzJhZTcxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zeXNyZWctc3IuY1xuQEAgLTQyLDEwICs0MiwxMiBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR1NjQgdmFsO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBkb24ndCBzYXZlIENQVFJfRUwyLCBhcyBhY2Nlc3NlcyB0byBDUEFDUl9FTDFcbi1cdFx0ICogYXJlIGFsd2F5cyB0cmFwcGVkLCBlbnN1cmluZyB0aGF0IHRoZSBpbi1tZW1vcnlcbi1cdFx0ICogY29weSBpcyBhbHdheXMgdXAtdG8tZGF0ZS4gQSBzbWFsbCBibGVzc2luZy4uLlxuK1x0XHQgKiBXaXRob3V0IEZFQVRfTlYycDEsIHdlIGRvbid0IHNhdmUgQ1BUUl9FTDIsIGFzIGFjY2Vzc2VzXG4rXHRcdCAqIHRvIENQQUNSX0VMMSBhcmUgYWx3YXlzIHRyYXBwZWQsIGVuc3VyaW5nIHRoYXQgdGhlXG4rXHRcdCAqIGluLW1lbW9yeSBjb3B5IGlzIGFsd2F5cyB1cC10by1kYXRlLiBBIHNtYWxsIGJsZXNzaW5nLi4uXG4gXHRcdCAqL1xuK1x0XHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYyUDEpKVxuK1x0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDUFRSX0VMMiwgcmVhZF9zeXNyZWdfZWwxKFNZU19DUEFDUikpO1xuIFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyLFx0IHJlYWRfc3lzcmVnX2VsMShTWVNfU0NUTFIpKTtcbiBcdFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFRUQlIwX0VMMixcdCByZWFkX3N5c3JlZ19lbDEoU1lTX1RUQlIwKSk7XG4gXHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBUVEJSMV9FTDIsXHQgcmVhZF9zeXNyZWdfZWwxKFNZU19UVEJSMSkpO1xuQEAgLTY3LDExICs2OSwxOCBAQCBzdGF0aWMgdm9pZCBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQgKiBUaGUgRUwxIHZpZXcgb2YgQ05US0NUTF9FTDEgaGFzIGEgYnVuY2ggb2YgUkVTMCBiaXRzIHdoZXJlXG4gXHRcdCAqIHRoZSBpbnRlcmVzdGluZyBDTlRIQ1RMX0VMMiBiaXRzIGxpdmUuIFNvIHByZXNlcnZlIHRoZXNlXG4gXHRcdCAqIGJpdHMgd2hlbiByZWFkaW5nIGJhY2sgdGhlIGd1ZXN0LXZpc2libGUgdmFsdWUuXG4rXHRcdCAqXG4rXHRcdCAqIFdoaWxlIE5WMnAxIGZpeGVzIHNvbWUgb2YgdGhhdCwgaXQgbWFrZXMgQ05USENUTF9FTDIuRUNWXG4rXHRcdCAqIGV2ZW4gbW9yZSBicm9rZW4gdGhhbiBpdCBhbHJlYWR5IHdhcyB3aXRoIE5WMi5cbiBcdFx0ICovXG4gXHRcdHZhbCA9IHJlYWRfc3lzcmVnX2VsMShTWVNfQ05US0NUTCk7XG4tXHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbi1cdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCB8PSwgdmFsKTtcbitcdFx0aWYgKCFjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpIHtcbitcdFx0XHR2YWwgXHUwMDI2PSBDTlRLQ1RMX1ZBTElEX0JJVFM7XG4rXHRcdFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIENOVEhDVExfRUwyLCBcdTAwMjY9LCB+Q05US0NUTF9WQUxJRF9CSVRTKTtcbitcdFx0XHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgQ05USENUTF9FTDIsIHw9LCB2YWwpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBDTlRIQ1RMX0VMMiwgdmFsKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIFNQX0VMMixcdCByZWFkX3N5c3JlZyhzcF9lbDEpKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5pbmRleCBkZmI5NmVkYmRjNDNjNi4uNjRjOGZiODJmYWRmNmQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0xNzI4LDcgKzE3MjgsNyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcbiBcdFx0ICogWW91IGdldCBFSVRIRVJcbiBcdFx0ICpcbiBcdFx0ICogLSBGRUFUX1ZIRSB3aXRob3V0IEZFQVRfRTJIMFxuLVx0XHQgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMlxuK1x0XHQgKiAtIEZFQVRfTlYgbGltaXRlZCB0byBGRUFUX05WMihwMSkvTlYzXG4gXHRcdCAqIC0gSENSX0VMMi5OVjEgYmVpbmcgUkVTMFxuIFx0XHQgKlxuIFx0XHQgKiBPUlxuQEAgLTE3NDAsNyArMTc0MCwxMyBAQCB1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcbiBcdFx0aWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyX0UySDAsIGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMpKSB7XG4gXHRcdFx0dmFsID0gMDtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcbitcdFx0XHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSlcbitcdFx0XHRcdHZhbCA9IElEX1JFR19MSU1JVF9GSUVMRF9FTlVNKHZhbCwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYzKTtcbitcdFx0XHRlbHNlIGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19OVjJQMSkpXG4rXHRcdFx0XHR2YWwgPSBJRF9SRUdfTElNSVRfRklFTERfRU5VTSh2YWwsIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMlAxKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR2YWwgPSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKTtcbitcdFx0XHR2YWwgXHUwMDI2PSB+SURfQUE2NE1NRlI0X0VMMV9FMkgwO1xuIFx0XHRcdHZhbCB8PSBTWVNfRklFTERfUFJFUF9FTlVNKElEX0FBNjRNTUZSNF9FTDEsIEUySDAsIE5JX05WMSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG5AQCAtMTgyNiw2ICsxODMyLDEwIEBAIGludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJlc3ggPSBnZXRfcmVnX2ZpeGVkX2JpdHMoa3ZtLCBIQ1JfRUwyKTtcbiBcdHNldF9zeXNyZWdfbWFza3Moa3ZtLCBIQ1JfRUwyLCByZXN4KTtcbiBcbitcdC8qIE5WSENSX0VMMiAqL1xuK1x0cmVzeCA9IGdldF9yZWdfZml4ZWRfYml0cyhrdm0sIE5WSENSX0VMMik7XG4rXHRzZXRfc3lzcmVnX21hc2tzKGt2bSwgTlZIQ1JfRUwyLCByZXN4KTtcbitcbiBcdC8qIEhDUlhfRUwyICovXG4gXHRyZXN4ID0gZ2V0X3JlZ19maXhlZF9iaXRzKGt2bSwgSENSWF9FTDIpO1xuIFx0c2V0X3N5c3JlZ19tYXNrcyhrdm0sIEhDUlhfRUwyLCByZXN4KTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNWQ1YzU3OWQ0NTc5MDIuLjBhZWIyZTczNmZkZTM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTE4Myw4ICsxODMsNiBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcbiBcdHN3aXRjaCAocmVnKSB7XG4gXHRcdE1BUFBFRF9FTDJfU1lTUkVHKFNDVExSX0VMMiwgICBTQ1RMUl9FTDEsXG4gXHRcdFx0XHQgIHRyYW5zbGF0ZV9zY3Rscl9lbDJfdG9fc2N0bHJfZWwxXHQgICAgICk7XG4tXHRcdE1BUFBFRF9FTDJfU1lTUkVHKENQVFJfRUwyLCAgICBDUEFDUl9FTDEsXG4tXHRcdFx0XHQgIHRyYW5zbGF0ZV9jcHRyX2VsMl90b19jcGFjcl9lbDFcdCAgICAgKTtcbiBcdFx0TUFQUEVEX0VMMl9TWVNSRUcoVFRCUjBfRUwyLCAgIFRUQlIwX0VMMSxcbiBcdFx0XHRcdCAgdHJhbnNsYXRlX3R0YnIwX2VsMl90b190dGJyMF9lbDFcdCAgICAgKTtcbiBcdFx0TUFQUEVEX0VMMl9TWVNSRUcoVFRCUjFfRUwyLCAgIFRUQlIxX0VMMSwgICBOVUxMXHQgICAgICk7XG5AQCAtMjEwLDYgKzIwOCwzMyBAQCBzdGF0aWMgdm9pZCBsb2NhdGVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZyxcbiBcdFx0bG9jLVx1MDAzZWxvYyA9ICgoaXNfaHlwX2N0eHQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkpID9cbiBcdFx0XHQgICAgU1JfTE9DX1NQRUNJQUwgOiBTUl9MT0NfTUVNT1JZKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIENQVFJfRUwyOlxuK1x0XHQvKlxuK1x0XHQgKiBDUFRSX0VMMiBpcyBqdXN0IGFzIHNwZWNpYWwsIGFuZCBuZWVkcyBhIGNlcnRhaW4gYW1vdW50XG4rXHRcdCAqIG9mIGhhbmRob2xkaW5nLiBJdCBhbHdheXMgbGl2ZXMgaW4gbWVtb3J5LCBkdWUgdG8gYmVpbmdcbitcdFx0ICogaGVhdmlseSB0cmFwcGVkIHRoYW5rcyB0byBDUEFDUl9FTDEuVENQQUMgYmVpbmcgUkVTMC5cbitcdFx0ICogRkVBVF9OVjJwMSBmaXhlcyB0aGlzLlxuK1x0XHQgKi9cbitcdFx0bG9jYXRlX21hcHBlZF9lbDJfcmVnaXN0ZXIodmNwdSwgQ1BUUl9FTDIsIENQQUNSX0VMMSxcbitcdFx0XHRcdFx0ICAgdHJhbnNsYXRlX2NwdHJfZWwyX3RvX2NwYWNyX2VsMSxcbitcdFx0XHRcdFx0ICAgbG9jKTtcbitcdFx0aWYgKGlzX2h5cF9jdHh0KHZjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpKVxuK1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfU1BFQ0lBTDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5WSENSX0VMMjpcbitcdFx0LypcbitcdFx0ICogWWVzLCBOVkhDUl9FTDIgbWFwcyB0byBpdHNlbGYgd2hlbiBsb2FkZWQgaW4gbmVzdGVkXG4rXHRcdCAqIGNvbnRleHQuIElmIHlvdSBmZWVsIGxpa2UgdGhlIGFyY2hpdGVjdHVyZSBpcyBkb3VibGVcbitcdFx0ICogYmFja2luZyBvbiBpdHNlbGYgdXBzaWRlIGRvd24sIHlvdSdyZSBub3QgYWxvbmUuXG4rXHRcdCAqL1xuK1x0XHRXQVJOX09OX09OQ0UoIWt2bV9oYXNfbnYzKHZjcHUtXHUwMDNla3ZtKSk7XG4rXHRcdGlmIChpc19oeXBfY3R4dCh2Y3B1KSkge1xuK1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfTUVNT1JZO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGxvYy1cdTAwM2Vsb2MgPSBTUl9MT0NfTE9BREVEIHwgU1JfTE9DX01BUFBFRDtcbitcdFx0XHRsb2MtXHUwMDNlbWFwX3JlZyA9IE5WSENSX0VMMjtcbitcdFx0fVxuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGxvYy1cdTAwM2Vsb2MgPSBsb2NhdGVfZGlyZWN0X3JlZ2lzdGVyKHZjcHUsIHJlZyk7XG4gXHR9XG5AQCAtMjQ5LDYgKzI3NCw3IEBAIHN0YXRpYyB1NjQgcmVhZF9zcl9mcm9tX2NwdShlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdGNhc2UgREFDUjMyX0VMMjpcdHZhbCA9IHJlYWRfc3lzcmVnX3MoU1lTX0RBQ1IzMl9FTDIpO1x0YnJlYWs7XG4gXHRjYXNlIElGU1IzMl9FTDI6XHR2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19JRlNSMzJfRUwyKTtcdGJyZWFrO1xuIFx0Y2FzZSBEQkdWQ1IzMl9FTDI6XHR2YWwgPSByZWFkX3N5c3JlZ19zKFNZU19EQkdWQ1IzMl9FTDIpO1x0YnJlYWs7XG4rXHRjYXNlIE5WSENSX0VMMjpcdFx0dmFsID0gcmVhZF9zeXNyZWdfcyhTWVNfTlZIQ1JfRUwyKTtcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0fVxuIFxuQEAgLTI4Nyw2ICszMTMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZV9zcl90b19jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcsIHU2NCB2YWwpXG4gXHRjYXNlIERBQ1IzMl9FTDI6XHR3cml0ZV9zeXNyZWdfcyh2YWwsIFNZU19EQUNSMzJfRUwyKTtcdGJyZWFrO1xuIFx0Y2FzZSBJRlNSMzJfRUwyOlx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfSUZTUjMyX0VMMik7XHRicmVhaztcbiBcdGNhc2UgREJHVkNSMzJfRUwyOlx0d3JpdGVfc3lzcmVnX3ModmFsLCBTWVNfREJHVkNSMzJfRUwyKTtcdGJyZWFrO1xuK1x0Y2FzZSBOVkhDUl9FTDI6XHRcdHdyaXRlX3N5c3JlZ19zKHZhbCwgU1lTX05WSENSX0VMMik7XHRicmVhaztcbiBcdGRlZmF1bHQ6XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdH1cbiB9XG5AQCAtMzExLDkgKzMzOCwxNiBAQCB1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0c3dpdGNoIChyZWcpIHtcbiBcdFx0Y2FzZSBDTlRIQ1RMX0VMMjpcbiBcdFx0XHR2YWwgPSByZWFkX3N5c3JlZ19lbDEoU1lTX0NOVEtDVEwpO1xuLVx0XHRcdHZhbCBcdTAwMjY9IENOVEtDVExfVkFMSURfQklUUztcbi1cdFx0XHR2YWwgfD0gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKSBcdTAwMjYgfkNOVEtDVExfVkFMSURfQklUUztcbitcdFx0XHRpZiAoIWNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSkge1xuK1x0XHRcdFx0dmFsIFx1MDAyNj0gQ05US0NUTF9WQUxJRF9CSVRTO1xuK1x0XHRcdFx0dmFsIHw9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIHJlZykgXHUwMDI2IH5DTlRLQ1RMX1ZBTElEX0JJVFM7XG4rXHRcdFx0fVxuIFx0XHRcdHJldHVybiB2YWw7XG4rXHRcdGNhc2UgQ1BUUl9FTDI6XG4rXHRcdFx0aWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05WMlAxKSlcbitcdFx0XHRcdHJldHVybiByZWFkX3N5c3JlZ19lbDEoU1lTX0NQQUNSKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRyZXR1cm4gX192Y3B1X3N5c19yZWcodmNwdSwgcmVnKTtcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdH1cbkBAIC0zNTksNiArMzkzLDkgQEAgdm9pZCB2Y3B1X3dyaXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcbiBcdFx0XHQgKi9cbiBcdFx0XHR3cml0ZV9zeXNyZWdfZWwxKHZhbCwgU1lTX0NOVEtDVEwpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIENQVFJfRUwyOlxuK1x0XHRcdHdyaXRlX3N5c3JlZ19lbDEodmFsLCBTWVNfQ1BBQ1IpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0fVxuQEAgLTI4NDAsNiArMjg3NywxNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHZuY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0cmV0dXJuIFJFR19ISURERU47XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZoY3JfZWwyX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZClcbit7XG4rXHRpZiAoZWwyX3Zpc2liaWxpdHkodmNwdSwgcmQpID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAga3ZtX2hhc19mZWF0KHZjcHUtXHUwMDNla3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBSRUdfSElEREVOO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgaW50IHNjdGxyMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxuIHtcbkBAIC0zNzUzLDYgKzM4MDAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XG4gXHRcdFx0IHN2ZV9lbDJfdmlzaWJpbGl0eSksXG4gXG4gXHRFTDJfUkVHX1ZOQ1IoSENSWF9FTDIsIHJlc2V0X3ZhbCwgMCksXG4rXHRFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsXG4rXHRcdFx0IG52aGNyX2VsMl92aXNpYmlsaXR5KSxcbiBcbiBcdEVMMl9SRUcoVFRCUjBfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgMCksXG4gXHRFTDJfUkVHKFRUQlIxX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIDApLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjdlMDQxNDUwOWU4OWE4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC01MSw2ICs1MSw4IEBAIEhBU19MUzY0X1ZcbiBIQVNfTFNVSVxuIEhBU19NT1BTXG4gSEFTX05FU1RFRF9WSVJUXG4rSEFTX05WMlAxXG4rSEFTX05WM1xuIEhBU19CQk1MMl9OT0FCT1JUXG4gSEFTX1BBTlxuIEhBU19QTVVWM1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvZ2VuLXN5c3JlZy5hd2sgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5pbmRleCA4Njg2MGFiNjcyZGM3OC4uZDdmN2NlYjc2OGZlNWMgMTAwNzU1XG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2dlbi1zeXNyZWcuYXdrXG5AQCAtMjI4LDcgKzIyOCw3IEBAICQxID09IFwiRW5kU3lzcmVnXCIgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcIlN5c3JlZ1wiIHtcbiB9XG4gXG4gIyBDdXJyZW50bHkgdGhpcyBpcyBlZmZlY3RpdmV5IGEgY29tbWVudCwgaW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGVtaXRcbi0jIGRlZmluZXMgZm9yIHRoZSBmaWVsZHMuXG4rIyBkZWZpbmVzIGZvciB0aGUgZmllbGRzLiBcIk1hcHBpbmdcIiBkb2VzIGVtaXQgdGhlIFJFU3gvVU5LTiBkZWZpbml0aW9ucy5cbiAoJDEgPT0gXCJGaWVsZHNcIiB8fCAkMSA9PSBcIk1hcHBpbmdcIikgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcIlN5c3JlZ1wiIHtcbiBcdGV4cGVjdF9maWVsZHMoMilcbiBcbkBAIC0yMzksOSArMjM5LDE1IEBAICQxID09IFwiRW5kU3lzcmVnXCIgXHUwMDI2XHUwMDI2IGJsb2NrX2N1cnJlbnQoKSA9PSBcIlN5c3JlZ1wiIHtcbiBcdHByaW50IFwiXCJcbiBcbiBcdG5leHRfYml0ID0gLTFcbi1cdHJlczAgPSBudWxsXG4tXHRyZXMxID0gbnVsbFxuLVx0dW5rbiA9IG51bGxcbitcdGlmICgkMSA9PSBcIk1hcHBpbmdcIikge1xuK1x0XHRyZXMwID0gJDIgXCJfUkVTMFwiXG4rXHRcdHJlczEgPSAkMiBcIl9SRVMxXCJcbitcdFx0dW5rbiA9ICQyIFwiX1VOS05cIlxuK1x0fSBlbHNlIHtcbitcdFx0cmVzMCA9IG51bGxcbitcdFx0cmVzMSA9IG51bGxcbitcdFx0dW5rbiA9IG51bGxcbitcdH1cbiBcbiBcdG5leHRcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9zeXNyZWcgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuaW5kZXggYmMxNzg4YjE2NjJiNzYuLmFmZTkzMzc4NTFhMmUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG5AQCAtMjM4NiwxNyArMjM4Niw0MCBAQCBFbmRFbnVtXG4gRW5kU3lzcmVnXG4gXG4gU3lzcmVnXHRJRF9BQTY0TU1GUjRfRUwxXHQzXHQwXHQwXHQ3XHQ0XG4tUmVzMFx0NjM6NDhcbitVbnNpZ25lZEVudW1cdDYzOjYwXHRNVEVGR1RcbitcdDBiMDAwMFx0TklcbitcdDBiMDAwMVx0SU1QXG4rRW5kRW51bVxuK1Vuc2lnbmVkRW51bVx0NTk6NTZcdFNDUlhcbitcdDBiMDAwMFx0TklcbitcdDBiMDAwMVx0SU1QXG4rRW5kRW51bVxuK1Vuc2lnbmVkRW51bVx0NTU6NTJcdFRFVlxuK1x0MGIwMDAwXHROSVxuK1x0MGIwMDAxXHRJTVBcbitFbmRFbnVtXG4rVW5zaWduZWRFbnVtXHQ1MTo0OFx0VFBTXG4rXHQwYjAwMDBcdFZBTF8wMDAwXG4rXHQwYjAwMDFcdFZBTF8wMDAxXG4rXHQwYjAwMTBcdFZBTF8wMDEwXG4rRW5kRW51bVxuIFVuc2lnbmVkRW51bVx0NDc6NDRcdFNSTUFTS1xuIFx0MGIwMDAwXHROSVxuIFx0MGIwMDAxXHRJTVBcbitcdDBiMDAxMFx0U1JNQVNLMlxuK0VuZEVudW1cbitVbnNpZ25lZEVudW1cdDQzOjQwXHRUTEJJRFxuK1x0MGIwMDAwXHROSVxuK1x0MGIwMDAxXHRJTVBcbiBFbmRFbnVtXG4tUmVzMFx0NDM6NDBcbiBVbnNpZ25lZEVudW1cdDM5OjM2XHRFM0RTRVxuIFx0MGIwMDAwXHROSVxuIFx0MGIwMDAxXHRJTVBcbiBFbmRFbnVtXG4tUmVzMFx0MzU6MzJcbitVbnNpZ25lZEVudW1cdDM1OjMyXHRFQUVTUlxuK1x0MGIwMDAwXHROSVxuK1x0MGIwMDAxXHRJTVBcbitFbmRFbnVtXG4gVW5zaWduZWRFbnVtXHQzMToyOFx0Uk1FR0RJXG4gXHQwYjAwMDBcdE5JXG4gXHQwYjAwMDFcdElNUFxuQEAgLTI0MTAsNiArMjQzMyw3IEBAIFVuc2lnbmVkRW51bVx0MjM6MjBcdE5WX2ZyYWNcbiBcdDBiMDAwMFx0TlZfTlYyXG4gXHQwYjAwMDFcdE5WMl9PTkxZXG4gXHQwYjAwMTBcdE5WMlAxXG4rXHQwYjAwMTFcdE5WM1xuIEVuZEVudW1cbiBVbnNpZ25lZEVudW1cdDE5OjE2XHRGR1dURTNcbiBcdDBiMDAwMFx0TklcbkBAIC00MjQyLDYgKzQyNjYsOSBAQCBGaWVsZFx0MVx0RTJUUkVcbiBGaWVsZFx0MFx0RTBIVFJFXG4gRW5kU3lzcmVnXG4gXG4rU3lzcmVnXHROVkhDUl9FTDJcdDNcdDRcdDFcdDVcdDBcbitNYXBwaW5nXHRIQ1JfRUwyXG4rRW5kU3lzcmVnXG4gXG4gU3lzcmVnIEhERkdSVFIyX0VMMlx0M1x0NFx0M1x0MVx0MFxuIFJlczBcdDYzOjI1XG5AQCAtNDUyMSw3ICs0NTQ4LDE0IEBAIEZpZWxkc1x0WkNSX0VMeFxuIEVuZFN5c3JlZ1xuIFxuIFN5c3JlZ1x0SENSWF9FTDJcdDNcdDRcdDFcdDJcdDJcbi1SZXMwXHQ2MzoyNVxuK1JlczBcdDYzOjM1XG4rRmllbGRcdDM0XHROVm5UVExCT1NcbitGaWVsZFx0MzNcdE5WblRUTEJJU1xuK0ZpZWxkXHQzMlx0TlZuVFRMQlxuK1JlczBcdDMxOjI4XG4rRmllbGRcdDI3XHROVlRHRVxuK0ZpZWxkXHQyNlx0U1JNQVNLRW5cbitSZXMwXHQyNVxuIEZpZWxkXHQyNFx0UEFDTUVuXG4gRmllbGRcdDIzXHRFbkZQTVxuIEZpZWxkXHQyMlx0R0NTRW5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE5LjA0OTE0NDg0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MTExMDQxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBOZWVkIGZvciBGdXp6aW5nOiBBUk02NCBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIHBhdGNoZXMgKmFic29sdXRlbHkqIGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdlIHNob3VsZCBiZSBmdXp6aW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFSTTY0IEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBgRkVBVF9OVjNgIGFuZCBgRkVBVF9OVjJwMWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpdHNlbGYgaXMgY29tcGxleCwgYW5kIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMuXG5cblRoZSBjaGFuZ2VzIHNwYW4gYSBmYWlybHkgd2lkZSBhcnJheSBvZiBmaWxlcyB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bWAgZGlyZWN0b3J5OiBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgbmV3IGZlYXR1cmVzIGFuZCBzeXN0ZW0gcmVnaXN0ZXJzLCBjb3JlIGNvbmZpZ3VyYXRpb24sIGFuZCBlbXVsYXRpb24gY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBhZGRpdGlvbnMgb2YgYGt2bV9oYXNfbnYyYCwgYGt2bV9oYXNfbnYzYCwgYGlzX25lc3RlZF9udjNfY3R4dGAsIGBOVkhDUl9FTDJgLCBhbmQgdGhlIGFzc29jaWF0ZWQgdHJhcCBoYW5kbGluZyBhbmQgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaHlwL3ZoZS9zd2l0Y2guY2AgYW5kIGBuZXN0ZWQuY2AgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYXMgdGhvc2UgYXJlIG9mdGVuIGhvdCBzcG90cyBmb3IgYnVncyBpbiB2aXJ0dWFsaXphdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGludm9sdmUgZW11bGF0aW9uIGFuZCByZWdpc3RlciBtYW5pcHVsYXRpb24sIGFyZSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoZSBjb2RlJ3MgcmVhY2hhYmlsaXR5LiBZZXMsIGFic29sdXRlbHkuIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaXMgYSBmZWF0dXJlIHRoYXQgKmNhbiogYmUgdGVzdGVkLiBJdCdzIGEgY29uZmlndXJlZCBmdW5jdGlvbmFsaXR5LCBzbyB3ZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYENPTkZJR19gIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGRldGVybWluZSBob3cgdG8gZW5hYmxlL2NvbmZpZ3VyZSB0aGUgZmVhdHVyZS4gTGV0J3MgZG8gYSBzZWFyY2ggZm9yIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29uZmlncyB0byBkZXRlcm1pbmUgaG93IHdlIGNhbiBlbmFibGUgdGhpcyBmZWF0dXJlIGFuZCwgdGhlcmVmb3JlLCBmdXp6IGl0IGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMyNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjI2LjU2MDI1MTg3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg3ODkxMzE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUk02NF9IQVNfTkVTVEVEX1ZJUlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19udjIoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC0yNzAte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaDoyNzE6XFx0cmV0dXJuIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtMjcyLVxcdFxcdGt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSk7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmg9Mjc1PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX252MyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oLTI3Ni17XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjI3NzpcXHRyZXR1cm4gKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC0yNzgtXFx0XFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTlYzKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTExNjg9c3RhdGljIGlubGluZSB1NjQgKl9fX2N0eHRfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjdHh0LCBpbnQgcilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xMTcwLSNpZiAhZGVmaW5lZCAoX19LVk1fTlZIRV9IWVBFUlZJU09SX18pXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjExNzE6XFx0aWYgKHVubGlrZWx5KGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xMTcyLVxcdFxcdCAgICAgciBcXHUwMDNlPSBfX1ZOQ1JfU1RBUlRfXyBcXHUwMDI2XFx1MDAyNiBjdHh0LVxcdTAwM2V2bmNyX2FycmF5KSlcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oPTEwPXN0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2hhc19udihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaC0xMi1cXHRyZXR1cm4gKCFfX2lzX2RlZmluZWQoX19LVk1fTlZIRV9IWVBFUlZJU09SX18pIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmg6MTM6XFx0XFx0Y3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmgtMTQtXFx0XFx0dmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfSEFTX0VMMikpO1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTE4ODc9c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTAzLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA0OlxcdHJldHVybiAoX19zeXN0ZW1fbWF0Y2hlc19jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTA1LVxcdFxcdCEoaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIHNjb3BlKSB8fFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTI1NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYwOS1cXHRcXHQuZGVzYyA9IFxcXCJOZXN0ZWQgVmlydHVhbGl6YXRpb24gU3VwcG9ydFxcXCIsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI2MTA6XFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTkVTVEVEX1ZJUlQsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI2MTEtXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz0zNjQ9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTQ0Mi1cXHRjYXNlIEtWTV9DQVBfQVJNX0VMMjpcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo0NDM6XFx0XFx0ciA9IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy00NDQtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz0xNTU5PXN0YXRpYyB1bnNpZ25lZCBsb25nIHN5c3RlbV9zdXBwb3J0ZWRfdmNwdV9mZWF0dXJlcyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTU3Ni1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxNTc3OlxcdGlmICghY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQVNfTkVTVEVEX1ZJUlQpKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE1NzgtXFx0XFx0Y2xlYXJfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyLCBcXHUwMDI2ZmVhdHVyZXMpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM9Mjk5OT1zdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTMwNjEtXFx0XFx0XFx0XFx0ICAgICBcXFwiaFxcXCIgOiBcXFwiblxcXCIpLFxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjMwNjI6XFx0XFx0IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSA/IFxcXCIrTlYyXFxcIjogXFxcIlxcXCIpO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTMwNjMtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0yOTg9dm9pZCBrdm1fczJfcHRkdW1wX2NyZWF0ZV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTMwNS1cXHRcXHRcXHQgICAgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5tbXUsIFxcdTAwMjZrdm1fcGd0YWJsZV9sZXZlbHNfZm9wcyk7XFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MzA2OlxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19ORVNURURfVklSVCkpXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMzA3LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5kZWJ1Z2ZzX252X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihcXFwibmVzdGVkXFxcIiwga3ZtLVxcdTAwM2VkZWJ1Z2ZzX2RlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjU3LjQzOTE3Mjg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5ODAxMjI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIGZvciBBUk02NCBLVk0gQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGRpZyB1cCBzb21lIGV4aXN0aW5nIEtWTSBjb25maWd1cmF0aW9ucyB0YWlsb3JlZCBmb3IgQVJNNjQgYXJjaGl0ZWN0dXJlcy4gVGhlIHNwZWNpZmljcyB3aWxsIGRlcGVuZCBvbiB3aGF0IEknbSBhaW1pbmcgZm9yIOKAkyBwZXJmb3JtYW5jZSBiZW5jaG1hcmtpbmcsIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBleHBlcmltZW50YXRpb24sIHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucywgb3IgcG9zc2libHkgZXZlbiBkZWJ1Z2dpbmcgYSBLVk0tcmVsYXRlZCBpc3N1ZSBvbiBBUk0uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHF1ZXJ5aW5nIGZvciBjb21tb24gYmFzZSBzZXR1cHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHdlYWx0aCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWNyb3NzIHZhcmlvdXMgZGlzdHJpYnV0aW9ucy4gSXQgbWlnaHQgYmUgaGVscGZ1bCB0byB0YXJnZXQgcGFydGljdWxhciBPUyB2YXJpYW50cyBvciBoeXBlcnZpc29yIHZlcnNpb25zIGFzIGEgd2F5IHRvIG5hcnJvdyB0aGUgc2NvcGUsIGFzIHdlbGwgYXMgY29uc2lkZXJpbmcga2VybmVsIHZlcnNpb25zIHRvIGF2b2lkIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBJIGtub3cgdGhhdCBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uIGlzIGEgY3JpdGljYWwgZWxlbWVudCB3aXRoIEFSTSwgc28gSSB3aWxsIHByaW9yaXRpemUgY29uZmlndXJhdGlvbnMgdGhhdCBleHBsaWNpdGx5IGFkZHJlc3MgdGhlIGRldmljZSB0cmVlIGFuZCBhbnkgc3BlY2lmaWMgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgbWVtb3J5IGlzIG1hcHBlZCBhbmQgbWFuYWdlZCwgYW5kIGVzcGVjaWFsbHkgbG9vayBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCBoYW5kbGUgaW50ZXJydXB0IGNvbnRyb2xsZXJzIGFuZCB0aGUgdmlydHVhbGl6ZWQgc3lzdGVtJ3MgcGVyaXBoZXJhbHMgZWZmZWN0aXZlbHkuIEFueSBpbnNpZ2h0cyBpbnRvIG9wdGltaXphdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHZpcnRpbyBkcml2ZXJzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGV4dGVuc2lvbnMgKGxpa2UgU1ZFKSB3b3VsZCBiZSBhIGJvbnVzLCBidXQgSSB3aWxsIGJlIGhhcHB5IHRvIGxlYXJuIGFuZCBleHBsb3JlIGFueXRoaW5nIEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Nzg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDAuNzM3MTg4MzQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM2MDcxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDMuMTAwODA2NDE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MTk4Njk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmVzdGVkIFZpcnR1YWxpemF0aW9uIG9uIEFSTTY0OiBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG51YW5jZXMgb3Iga25vYnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvbiBBUk02NCBhcmNoaXRlY3R1cmVzLiBXZSBhbGwga25vdyB0aGUgYmFzaWNzIG9mIHZpcnR1YWxpemF0aW9uLCBidXQgQVJNNjQgaGFzIGl0cyBvd24gc2V0IG9mIHBlY3VsaWFyaXRpZXMsIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FuIGJlIGEgd2hvbGUgZGlmZmVyZW50IGJlYXN0LiBJJ20gdGhpbmtpbmcgYmV5b25kIGp1c3QgdGhlIGdlbmVyaWMgQ1BVIGZlYXR1cmVzIGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBhcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgSSdsbCBuZWVkIGVuYWJsZWQ/IEFueSBmaXJtd2FyZSByZXF1aXJlbWVudHMgdGhhdCBtaWdodCBiZSB1bmlxdWUgdG8gbmVzdGVkIHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBjYXZlYXRzIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgcGVyaGFwcyByZWxhdGVkIHRvIHRoZSBoeXBlcnZpc29yIGNob3NlbiAobGlrZSBLVk0gb3IgWGVuKT8gTWF5YmUgY2VydGFpbiBvcHRpbWl6YXRpb25zIG9yIG1pdGlnYXRpb25zIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgYXQgdGhlIGhvc3Qgb3IgZ3Vlc3QgbGV2ZWw/IEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBhbGwgdGhlIHBvdGVudGlhbCBnb3RjaGFzIGJlZm9yZSBJIGV2ZW4gc3RhcnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRvIGZpbmQgdGhlIHNwZWNpZmljIGRvY3VtZW50YXRpb24gb3IgYmVzdCBwcmFjdGljZXMsIG9yIHdoZXRoZXIgSSBuZWVkIHRvIGdldCByZWFkeSB0byBkZWVwIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYSBjdXN0b20gY29uZmlndXJhdGlvbiB0byBnZXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdvcmtpbmcgb3B0aW1hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjA3LjA4Mjc5NjYzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk3MDEyODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzowNy43NTI1MDcyNDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3NDIyMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQXJtNjQgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2V0dGluZ3MgYXJlIGRlZmluZWQgZm9yIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIFRoYXQncyBhbG1vc3QgYWx3YXlzIHRoZSBjZW50cmFsIHBsYWNlIGZvciBjb25maWd1cmluZyBmZWF0dXJlcy4gU28sIGxldCdzIHN0YXJ0IHdpdGggYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIEl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IG9wdGlvbnMgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgbmVzdGVkIHZpcnR1YWxpemF0aW9uLCB3aWxsIGJlIGRlc2NyaWJlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBmaWxlIG9yIGJlIGluY2x1ZGVkIGZyb20gaXQuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBsb2NhdGUgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzoxMS45NTk5Mzk5ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mjk3OTQ4MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVTVEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MTIuMjQyOTMxOTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQ4Mjc2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDpcblxuKipEaWdnaW5nIGludG8gYSBLVk0gSXNzdWUqKlxuXG5IbW0sIGNvdWxkIHRoaXMgYmUgc29tZXRoaW5nIHNwZWNpZmljIHRvIEtWTSBjb25maWd1cmF0aW9uPyBJdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxpa2VseSBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gYENPTkZJR19LVk1gIOKAkyB0aGF0IHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgcGllY2UuIE9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVgLiBUaGF0IE1ha2VmaWxlIHNob3VsZCB0ZWxsIG1lIGV4YWN0bHkgaG93IHRoaW5ncyBhcmUgYmVpbmcgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgaG9wZWZ1bGx5LCBpdCdsbCBpbGx1bWluYXRlIHRoaXMgc3BlY2lmaWMgaXNzdWUgb3IgYXQgbGVhc3QgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIExldCdzIHNlZSB3aGF0IGNsdWVzIHRoaXMgTWFrZWZpbGUgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MTUuNTE3NzYyMTg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg1NzE2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVxcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjIwOlxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTIxLVxcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI1LVxcdCB2Z2ljL3ZnaWMtbW1pby12My5vIHZnaWMvdmdpYy1rdm0tZGV2aWNlLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjI2OlxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cXHQgdmdpYy92Z2ljLXY1Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MTYuMTY2MzM5NTQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODg2MDkzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIEFSTTY0IHNpZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBlbXVsYXRlLW5lc3RlZC5vYCBhbmQgYG5lc3RlZC5vYCBhcmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGlmIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGNvZGUgc2VlbXMgZnVuY3Rpb25hbCBhbmQgZGlyZWN0bHkgbW9kaWZpZXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBzbyBJJ20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLlxuXG5Gcm9tIGEgcXVpY2sgc2tpbSwgaGVyZSdzIHdoYXQncyBiZWVuIHRvdWNoZWQ6IGBrdm1fdGltZXJfdmNwdV9sb2FkYCwgdGhhdCBzZWVtcyBsaWtlIGEgaG90IHBhdGggdG8gbG9vayBpbnRvLiBUaGVuIHRoZXJlJ3MgYGNoZWNrX2ZlYXR1cmVfbWFwYCwgYGdldF9yZWdfZml4ZWRfYml0c2AsIGFuZCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgLCB3aGljaCBJJ2xsIGNhdGVnb3JpemUgYXMgYmVpbmcgbW9yZSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2lkZSBvZiB0aGluZ3MuIFRoZXJlJ3MgYSBmbHVycnkgb2YgYWN0aXZpdHkgaW4gdGhlIGBoeXBgIGRpcmVjdG9yeSwgd2l0aCBgX19hY3RpdmF0ZV9jcHRyX3RyYXBzX3ZoZWAsIGBfX2FjdGl2YXRlX3RyYXBzX2NvbW1vbmAsIGBfX3N5c3JlZ19zYXZlX2VsMV9zdGF0ZWAsIGBfX3N5c3JlZ19yZXN0b3JlX2VsMV9zdGF0ZWAsIGBfX2NvbXB1dGVfaGNyYCwgYGt2bV9oeXBfaGFuZGxlX2VyZXRgLCBga3ZtX2h5cF9oYW5kbGVfY3BhY3JfZWwxYCwgYGZpeHVwX252X2d1ZXN0X2V4aXRgLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgbGlrZWx5IGJlaW5nIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBhdGhzLCBhbGwgcmVsYXRpbmcgdG8gdGhlIGh5cGVydmlzb3IncyBpbnRlcmFjdGlvbi5cblxuRmluYWxseSwgaW4gdGhlIG1haW4gS1ZNIGRpcmVjdG9yeSwgSSBzZWUgYGxpbWl0X252X2lkX3JlZ2AsIGBrdm1faW5pdF9udl9zeXNyZWdzYCwgYW5kIGEgc2VyaWVzIG9mIHN5c3JlZyBmdW5jdGlvbnMsIGxpa2UgYGxvY2F0ZV9yZWdpc3RlcmAsIGByZWFkX3NyX2Zyb21fY3B1YCwgYHdyaXRlX3NyX3RvX2NwdWAsIGB2Y3B1X3JlYWRfc3lzX3JlZ2AsIGB2Y3B1X3dyaXRlX3N5c19yZWdgLCBhbmQgYG52aGNyX2VsMl92aXNpYmlsaXR5YC4gVGhhdCdzIGEgZ29vZCBvdmVydmlldy5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBsaW1pdF9udl9pZF9yZWdgLCBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGFuZCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgIOKAkyB0aG9zZSBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSB0aGUgY29yZSBvZiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQsIG9yIGF0IGxlYXN0IHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjQuOTU0OTUwOTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDU2NTk5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGltaXRfbnZfaWRfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1NDc9c3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2MDUtICovXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTYwNjp1NjQgbGltaXRfbnZfaWRfcmVnKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHJlZywgdTY0IHZhbClcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjA3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjUuMjYwNjE1NTIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTg2MDI3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBga3ZtX2luaXRfbnZfc3lzcmVnc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBga3ZtX2luaXRfbnZfc3lzcmVnc2AuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIEtWTSBpbml0aWFsaXplcyB0aGUgbm9uLXZvbGF0aWxlIHN5c3RlbSByZWdpc3RlcnMsIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGNlcnRhaW4gYXNwZWN0cyBvZiB2aXJ0dWFsaXphdGlvbiBvciBndWVzdCBzdGF0ZSBwZXJzaXN0ZW5jZS4gSXQncyBhIGNydWNpYWwgZnVuY3Rpb24gYmVjYXVzZSBpZiB0aGVzZSByZWdpc3RlcnMgYXJlbid0IHByb3Blcmx5IGNvbmZpZ3VyZWQgZHVyaW5nIGd1ZXN0IHN0YXJ0dXAsIHdlJ3JlIGdvaW5nIHRvIHNlZSBhIHdob2xlIGhvc3Qgb2YgdW5wcmVkaWN0YWJsZSBiZWhhdmlvcnMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5zdGFiaWxpdHksIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgZXZlbiBjb21wbGV0ZSBndWVzdCBmYWlsdXJlcy4gSSdtIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgaXQncyB0b3VjaGluZyDigJMgdGhpbmdzIGxpa2UgTVNSX0lBMzJfVk1fQ1IsIE1TUl9JQTMyX1ZNX0hTQVZFX1BBLCBhbmQgb3RoZXJzIGFzc29jaWF0ZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBBcmUgdGhleSBiZWluZyBzZXQgdG8gYSBzYWZlLCBrbm93biBzdGF0ZT8gSXMgdGhlcmUgYSBjaGVjayBmb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIG1vZGlmeSB0aGVtPyBUaGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscyBoZXJlLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBlYWNoIHJlZ2lzdGVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBvbWlzc2lvbnMgb3IgdW5leHBlY3RlZCB2YWx1ZXMuIEknbSBhbHNvIGludGVyZXN0ZWQgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQgb24gZGlmZmVyZW50IENQVSBhcmNoaXRlY3R1cmVzLiBUaGlzIGlzIGFuIGFyZWEgd2hlcmUgc3VidGxlIGhhcmR3YXJlIHZhcmlhdGlvbnMgY2FuIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJJ20gaG9waW5nIHRvIHNlZSBhIHdlbGwtY29tbWVudGVkLCByb2J1c3QgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGlzIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gaXMgdGhlIGZvdW5kYXRpb24gZm9yIGEgcmVsaWFibGUgYW5kIHNlY3VyZSB2aXJ0dWFsIGVudmlyb25tZW50LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjU1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjkuNTc5MjIxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNzcxODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9pbml0X252X3N5c3JlZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc2V0X3N5c3JlZ19tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIGludCBzciwgc3RydWN0IHJlc3ggcmVzeClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE3OTgtXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTc5OTppbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjMwLjE3MzAwMTIzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ0MjM5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUmVnaXN0ZXIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLlwiIFRoaXMgaXMgd2hlcmUgSSBzdGFydC4gSSBrbm93IHRoaXMgcmVnaXN0ZXIgaW50aW1hdGVseTsgaXQncyB0aGUgZ2F0ZXdheSwgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlLiBJdCdzIG5vdCBhIHN1Z2dlc3Rpb24sIGl0J3MgYSAqY2hlY2sqLiBJIGFscmVhZHkgaGF2ZSBhIG1lbnRhbCBtb2RlbCBvZiB3aGF0IGl0ICpzaG91bGQqIGNvbnRhaW4sIGdpdmVuIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGFuZCB0aGUgY3VycmVudCBleGVjdXRpb24gc3RhdGUsIGJ1dCBJIG5lZWQgYSBjb25jcmV0ZSBkYXRhIHBvaW50LiBJJ20gbm90IGp1c3QgaWRseSBjdXJpb3VzOyBJJ20gc3lzdGVtYXRpY2FsbHkgdHJhY2luZyBhIHBvdGVudGlhbCBpc3N1ZSwgdmVyaWZ5aW5nIG15IGFzc3VtcHRpb25zLCBvciBwcmVwYXJpbmcgdG8gYWRkcmVzcyBhIHNwZWNpZmljIHByb2JsZW0uIEtub3dpbmcgdGhlIGV4YWN0IHZhbHVlIG9mIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2VzcyBnaXZlcyBtZSBjcml0aWNhbCBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjMzLjUxNzI0NDQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA2OTEzMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZoY3JfZWwyX3Zpc2liaWxpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI4NzA9c3RhdGljIHVuc2lnbmVkIGludCB2bmNyX2VsMl92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjg3OS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjI4ODA6c3RhdGljIHVuc2lnbmVkIGludCBudmhjcl9lbDJfdmlzaWJpbGl0eShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yODgxLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zMjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzgwMy1cXHRFTDJfUkVHX0ZJTFRFUkVEKE5WSENSX0VMMiwgdW5kZWZfYWNjZXNzLCByZXNldF92YWwsIDAsXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzozODA0OlxcdFxcdFxcdCBudmhjcl9lbDJfdmlzaWJpbGl0eSksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0zODA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzozMy42NTc5NDIzMjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MzA1MTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBTeXN0ZW0gUmVnaXN0ZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHN5c3RlbSByZWdpc3RlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZXNlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnM6IGB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzLCB0aGUgbGluY2hwaW5zIG9mIG1hbmFnaW5nIHRoZSB2aXJ0dWFsIENQVSdzIHZpZXcgb2YgdGhlIGFyY2hpdGVjdHVyYWwgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZG8sIEkgc3VzcGVjdCwgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBwcm9iYWJseSBzaXQgcmlnaHQgaW4gdGhlIG1pZGRsZSBvZiBhbGwgdGhlIHJlZ2lzdGVyLWFjY2VzcyBvcGVyYXRpb25zLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHdoYXQgdGhlaXIgbG9naWMgaXMgYW5kIHdoZXJlIHRoZXkgYXJlIGNhbGxlZCBmcm9tLCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSB2aXJ0dWFsIG1hY2hpbmUncyBzeXN0ZW0gcmVnaXN0ZXJzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yaywgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkIGZyb20uIEkgYmV0IHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscyBoZXJlIGFuZCB0aGF0IHRoaXMgaXMgd2hlcmUgd2UgaGF2ZSBwcm9ibGVtcyB3aXRoIGhhbmRsaW5nIHRoZSBjb3JyZWN0IHN0YXRlIG9mIHRoZSByZWdpc3RlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzEwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MzcuMDQwOTk3NzE1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEzOTI4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV9yZWFkX3N5c19yZWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI4ND1zdGF0aWMgdm9pZCB3cml0ZV9zcl90b19jcHUoZW51bSB2Y3B1X3N5c3JlZyByZWcsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTMyMC1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjMyMTp1NjQgdmNwdV9yZWFkX3N5c19yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTMyMi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTUyND1zdGF0aWMgYm9vbCBhY2Nlc3Nfcncoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy01MzAtXFx0ZWxzZVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NTMxOlxcdFxcdHAtXFx1MDAzZXJlZ3ZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZyk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy01MzItXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjA0LVxcdGlmICh+bWFzaykge1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NjA1OlxcdFxcdHZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIHItXFx1MDAzZXJlZyk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy02MDYtXFx0XFx0dmFsIFxcdTAwMjY9IH5tYXNrO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz02MTg9c3RhdGljIGJvb2wgYWNjZXNzX2FjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjI3LVxcdGdldF9hY2Nlc3NfbWFzayhyLCBcXHUwMDI2bWFzaywgXFx1MDAyNnNoaWZ0KTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjYyODpcXHRwLVxcdTAwM2VyZWd2YWwgPSAodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnKSBcXHUwMDI2IG1hc2spIFxcdTAwM2VcXHUwMDNlIHNoaWZ0O1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjI5LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0yNjEyPXN0YXRpYyBib29sIGFjY2Vzc19jc3NlbHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MTktXFx0ZWxzZVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MjYyMDpcXHRcXHRwLVxcdTAwM2VyZWd2YWwgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCByZWcpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYyMS1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjYyND1zdGF0aWMgYm9vbCBhY2Nlc3NfY2NzaWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yNjMxLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MjYzMjpcXHRjc3NlbHIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBDU1NFTFJfRUwxKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTI2MzMtXFx0Y3NzZWxyIFxcdTAwMjY9IENTU0VMUl9FTDFfTGV2ZWwgfCBDU1NFTFJfRUwxX0luRDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjgwOD1zdGF0aWMgYm9vbCBhY2Nlc3NfZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxNC1cXHRlbHNlXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyODE1OlxcdFxcdHAtXFx1MDAzZXJlZ3ZhbCA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIEVMUl9FTDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxNi1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDA3OT1zdGF0aWMgYm9vbCBoYW5kbGVfdm1hbGxzMTJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg3LVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDA4ODpcXHR2dHRiciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFZUVEJSX0VMMik7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDg5LVxcdGxpbWl0ID0gQklUX1VMTChrdm1fZ2V0X3BhX2JpdHModmNwdS1cXHUwMDNla3ZtKSk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQxMDM9c3RhdGljIGJvb2wgaGFuZGxlX3JpcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDYtXFx0dTMyIHN5c19lbmNvZGluZyA9IHN5c19pbnNuKHAtXFx1MDAzZU9wMCwgcC1cXHUwMDNlT3AxLCBwLVxcdTAwM2VDUm4sIHAtXFx1MDAzZUNSbSwgcC1cXHUwMDNlT3AyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxMDc6XFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDgtXFx0dTY0IGJhc2UsIHJhbmdlO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MTU4PXN0YXRpYyBib29sIGhhbmRsZV9pcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNjEtXFx0dTMyIHN5c19lbmNvZGluZyA9IHN5c19pbnNuKHAtXFx1MDAzZU9wMCwgcC1cXHUwMDNlT3AxLCBwLVxcdTAwM2VDUm4sIHAtXFx1MDAzZUNSbSwgcC1cXHUwMDNlT3AyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxNjI6XFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjM3LjI5MjM5NTU4OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzNDQ1NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyBgdmNwdV93cml0ZV9zeXNfcmVnYCoqXG5cbkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyB0byBsb29rIGF0IGB2Y3B1X3dyaXRlX3N5c19yZWdgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGNvbnRleHQuIFdoeSBhcmUgd2UgZXZlbiBleGFtaW5pbmcgdGhpcyBmdW5jdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBhIHJlY2VudCBidWcgcmVwb3J0PyBQZXJmb3JtYW5jZSB0dW5pbmc/IFNlY3VyaXR5IGFuYWx5c2lzPyBLbm93aW5nIHRoZSBvYmplY3RpdmUgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBpdC5cblxuSSdsbCBzdGFydCBieSBtYWtpbmcgc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvZiB3aGF0IFwic3lzX3JlZ1wiIHJlZmVycyB0by4gSXQncyBsaWtlbHkgYSBzeXN0ZW0tbGV2ZWwgcmVnaXN0ZXIgd2l0aGluIHRoZSB2aXJ0dWFsIENQVSdzIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgd2hpY2ggYXJjaGl0ZWN0dXJlIHdlJ3JlIGRlYWxpbmcgd2l0aCAoeDg2LCBBUk0sIGV0Yy4pIGlzIGNydWNpYWwgaGVyZSwgYXMgdGhlIHNwZWNpZmljIHN5c3RlbSByZWdpc3RlcnMgYW5kIHRoZWlyIGZ1bmN0aW9ucyBhcmUgaGlnaGx5IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuXG5cbk5leHQsIEknbGwgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgYHZjcHVfd3JpdGVfc3lzX3JlZ2AuIFNwZWNpZmljYWxseSBJJ2xsIG5lZWQgdG8ga25vdzpcbiogICAqKldoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8qKiBJcyB0aGVyZSBhIGB2Y3B1YCBzdHJ1Y3Q/IEEgcmVnaXN0ZXIgc3RhdGUgc3RydWN0dXJlPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNoYWRvdyByZWdpc3RlcnMsIG9yIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3M/IEhvdyBkb2VzIHRoZSBzdHJ1Y3R1cmUgY2hhbmdlIGR1cmluZyB0aGUgd3JpdGVzP1xuKiAgICoqV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHJlZ2lzdGVycyBiZWluZyB3cml0dGVuIHRvPyoqIEFuZCB3aGF0IGFyZSB0aGVpciBtZWFuaW5ncz8gV2hpY2ggcmVnaXN0ZXJzIGFyZSBjb25zaWRlcmVkIGNyaXRpY2FsLCBhbmQgd2hpY2ggY2FuIGJlIG1vcmUgc2FmZWx5IG1vZGlmaWVkLlxuKiAgICoqV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcz8qKiBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHJlZ2lzdGVyIHZhbHVlcywgb3IgYWNjZXNzIHBlcm1pc3Npb25zPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBjb25jZXJucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHZDUFVzIGNvbmN1cnJlbnRseT9cblxuRnJvbSB0aGVyZSwgSSdsbCBleHBsb3JlIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgdkNQVS4gV2hhdCBraW5kIG9mIHZhbGlkYXRpb24gaXMgYmVpbmcgZG9uZSBiZWZvcmUgYHZjcHVfd3JpdGVfc3lzX3JlZ2A/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlPyBBcmUgYW55IGFzc3VtcHRpb25zIG1hZGUgcmVnYXJkaW5nIHRoZSBndWVzdCBvcGVyYXRpbmcgc3lzdGVtJ3MgYmVoYXZpb3I/XG5cbkZpbmFsbHksIGlmIEkgYW0gZG9pbmcgdGhpcyBmb3IgYSBzcGVjaWZpYyBwdXJwb3NlLCBsaWtlIGEgYnVnLCBJIHdpbGwgbGlrZWx5IHRoZW4gYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgYmVoYXZpb3IsIHN1Y2ggYXMgdHJhY2luZyBkb3duIHRoZSBmbG93IG9mIHRoZSBjb2RlLCB0byBzZWUgaG93IHRoZSB3cml0ZSBpbXBhY3RzIGxhdGVyIGFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTIwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6NDEuNjE1ODQzNTQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIyNDg4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNwdV93cml0ZV9zeXNfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zMjE9dTY0IHZjcHVfcmVhZF9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB2Y3B1X3N5c3JlZyByZWcpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTM3NC1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjM3NTp2b2lkIHZjcHVfd3JpdGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwsIGVudW0gdmNwdV9zeXNyZWcgcmVnKVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzc2LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NTI0PXN0YXRpYyBib29sIGFjY2Vzc19ydyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUyOC1cXHRpZiAocC1cXHUwMDNlaXNfd3JpdGUpXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo1Mjk6XFx0XFx0dmNwdV93cml0ZV9zeXNfcmVnKHZjcHUsIHAtXFx1MDAzZXJlZ3ZhbCwgci1cXHUwMDNlcmVnKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTUzMC1cXHRlbHNlXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTU5Mz1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjExLVxcdHZhbCB8PSAocC1cXHUwMDNlcmVndmFsIFxcdTAwMjYgKG1hc2sgXFx1MDAzZVxcdTAwM2Ugc2hpZnQpKSBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjYxMjpcXHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgdmFsLCByLVxcdTAwM2VyZWcpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNjEzLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0xMDAwPXN0YXRpYyB1NjQgcmVzZXRfYW1haXJfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMTAwMi1cXHR1NjQgYW1haXIgPSByZWFkX3N5c3JlZyhhbWFpcl9lbDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MTAwMzpcXHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgYW1haXIsIEFNQUlSX0VMMSk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDA0LVxcdHJldHVybiBhbWFpcjtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAwNz1zdGF0aWMgdTY0IHJlc2V0X2FjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMTAwOS1cXHR1NjQgYWN0bHIgPSByZWFkX3N5c3JlZyhhY3Rscl9lbDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6MTAxMDpcXHR2Y3B1X3dyaXRlX3N5c19yZWcodmNwdSwgYWN0bHIsIEFDVExSX0VMMSk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0xMDExLVxcdHJldHVybiBhY3RscjtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MTAxND1zdGF0aWMgdTY0IHJlc2V0X21waWRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMTAyOC1cXHRtcGlkciB8PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAzMSk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoxMDI5OlxcdHZjcHVfd3JpdGVfc3lzX3JlZyh2Y3B1LCBtcGlkciwgTVBJRFJfRUwxKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTEwMzAtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTI2MTI9c3RhdGljIGJvb2wgYWNjZXNzX2Nzc2VscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjYxNy1cXHRpZiAocC1cXHUwMDNlaXNfd3JpdGUpXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyNjE4OlxcdFxcdHZjcHVfd3JpdGVfc3lzX3JlZyh2Y3B1LCBwLVxcdTAwM2VyZWd2YWwsIHJlZyk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy0yNjE5LVxcdGVsc2VcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MjgwOD1zdGF0aWMgYm9vbCBhY2Nlc3NfZWxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxMi1cXHRpZiAocC1cXHUwMDNlaXNfd3JpdGUpXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzoyODEzOlxcdFxcdHZjcHVfd3JpdGVfc3lzX3JlZyh2Y3B1LCBwLVxcdTAwM2VyZWd2YWwsIEVMUl9FTDEpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMjgxNC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjQxLjg3ODA5ODM0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU1MDYzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBzeXN0ZW0gcmVnaXN0ZXIsIGBOVkhDUl9FTDJgLCBhbmQgdHdlYWtzIHRoZSBleGlzdGluZyBzeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZSBmdW5jdGlvbnMgKGB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgKSB0byBoYW5kbGUgYENQVFJfRUwyYCB3aXRoIHRoZSBuZXcgbG9naWMsIGNvbnRpbmdlbnQgb24gYEFSTTY0X0hBU19OVjJQMWAgYmVpbmcgZGVmaW5lZC4gSXQgYWxzbyBtb2RpZmllcyBgX19jb21wdXRlX2hjcmAgdG8gd3JpdGUgdG8gZWl0aGVyIGBOVkhDUl9FTDJgIG9yIGBTWVNfTlZIQ1JfRUwyYCwgYW5kIGltcG9ydGFudGx5LCBjaGFuZ2VzIGBmaXh1cF9ndWVzdF9leGl0YCB0byBjYWxsIGBmaXh1cF9udl9ndWVzdF9leGl0YCwgd2hpY2ggcmVhZHMgYE5WSENSX0VMMmAgYW5kIGFzc2lnbnMgaXRzIHZhbHVlIHRvIGBIQ1JfRUwyYC5cblxuVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yazsgZGVmaW5pdGVseSB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBga3ZtX2luaXRfbnZfc3lzcmVnc2AsIGBsaW1pdF9udl9pZF9yZWdgLCBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgLCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgLCBhbmQgYF9fY29tcHV0ZV9oY3JgLlxuXG5BaGEhIE5vdyBJJ20gcmVtZW1iZXJpbmcgdGhhdCBgX19jb21wdXRlX2hjcmAsIGBmaXh1cF9udl9ndWVzdF9leGl0YCwgYW5kIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgIHJlc2lkZSB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmNgIGZpbGVzLiBUaGlzIG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gRUwyIOKAkyB0aGUgaHlwZXJ2aXNvcidzIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpcyBjYW4gc3l6a2FsbGVyIGJlIHVzZWQgdG8gdGFyZ2V0IHRoZW0/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnkgcnVubmluZyBLVk0gZ3Vlc3RzLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IGFsbCB0aGUgZHVja3MgaW4gYSByb3cuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gd29yaywgYmV5b25kIHRoZSBvYnZpb3VzLiBJIHJhbiBhIHF1aWNrIHNlYXJjaCBmb3IgYE5FU1RFRGAgaW4gYm90aCBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AgYW5kIHRoZSB0b3AtbGV2ZWwgYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIGJ1dCBjYW1lIHVwIGVtcHR5LiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgYGFyY2gvYXJtNjQva3ZtL01ha2VmaWxlYC4gQmluZ28hIEl0IGxvb2tzIGxpa2UgYGVtdWxhdGUtbmVzdGVkLm9gIGFuZCBgbmVzdGVkLm9gIGFyZSBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGFzIGxvbmcgYXMgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFNvIGl0IHNlZW1zIHRoYXQgYEtWTWAgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IGNvbmZpZ3VyYXRpb24uXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB2ZXJpZnkgYEFSTTY0X0hBU19ORVNURURfVklSVGAgaW4gYGFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY2AgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjI5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjQ5LjQzMzE2NTMwOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODU5MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSTTY0X0hBU19ORVNURURfVklSVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTE4ODc9c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTAzLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA0OlxcdHJldHVybiAoX19zeXN0ZW1fbWF0Y2hlc19jYXAoQVJNNjRfSEFTX05FU1RFRF9WSVJUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTA1LVxcdFxcdCEoaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIHNjb3BlKSB8fFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTI1NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjYwOS1cXHRcXHQuZGVzYyA9IFxcXCJOZXN0ZWQgVmlydHVhbGl6YXRpb24gU3VwcG9ydFxcXCIsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI2MTA6XFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTkVTVEVEX1ZJUlQsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI2MTEtXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjQ5LjYxMjAzMDE2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg5NjgyNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9uIEFSTTY0IGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlIGlzbid0IGEgZGVkaWNhdGVkIGBDT05GSUdfQVJNNjRfTkVTVEVEX1ZJUlRgIG9wdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEluc3RlYWQsIGl0IHNlZW1zIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0byBkZXRlcm1pbmUgc3VwcG9ydC5cblxuVGhlIG5leHQgdGhvdWdodCBpcywgd2hhdCBhYm91dCBgQ09ORklHX0FSTTY0X1ZIRWA/IEFoIHllcywgVmlydHVhbGl6YXRpb24gSG9zdCBFeHRlbnNpb25zLiBUaGF0IHJpbmdzIGEgYmVsbC4gTmVzdGVkIHZpcnR1YWxpemF0aW9uICpkb2VzKiBkZXBlbmQgb24gVkhFLCB0aGF0J3MgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZSBvbiBBUk02NC4gQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzbid0IFZIRSB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBLVk0/IE9yIG1heWJlIHBhcnQgb2YgS1ZNJ3MgYmFzZSBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbiBiZWNhdXNlIGl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIGlmIGl04oCZcyBleHBsaWNpdGx5IHJlcXVpcmVkIG9yIGluaGVyZW50bHkgcHJlc2VudC4gTGV0IG1lIG1ha2Ugc3VyZSBJIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjU0LjgwMTcxNTY5MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMzY2MjMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJNNjRfVkhFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6NTUuMjQ0MDg5ODI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDEyMzMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLVk0gY29uZmlndXJhdGlvbiBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSBpbiB0aGUgTGludXgga2VybmVsLiBXaGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncz8gTmF0dXJhbGx5LCBpdCdzIGdvaW5nIHRvIGJlIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgZGV0YWlscyBvbiBob3cgdGhlIEtWTSBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRlbHZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgb3B0aW9ucyBmb3IgZW5hYmxpbmcgS1ZNLCBkZWZpbmluZyBzcGVjaWZpYyBmZWF0dXJlcywgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyaW5nIHNvbWUgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzo1OC40ODUzMjYwNjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTg1Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNzo1OC43NjExOTMyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjY2MDM5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtWTSBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBjbGVhciB0aGUga2V5IGxpZXMgd2l0aGluIHRoZXNlIGZvY3VzIHN5bWJvbHMuIExldCdzIGJyZWFrIHRoZW0gZG93bi4gSSBoYXZlOlxuXG4qICAgYGt2bV9pbml0X252X3N5c3JlZ3NgXG4qICAgYGxpbWl0X252X2lkX3JlZ2BcbiogICBgbnZoY3JfZWwyX3Zpc2liaWxpdHlgXG4qICAgYGZpeHVwX252X2d1ZXN0X2V4aXRgXG4qICAgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWBcbiogICBgX19jb21wdXRlX2hjcmBcblxuQWxyaWdodCwgaW1tZWRpYXRlbHkgSSByZWNvZ25pemUgdGhhdCBgX19jb21wdXRlX2hjcmAgYW5kIGBfX3N5c3JlZ19zYXZlX3ZlbDJfc3RhdGVgIHJlc2lkZSBpbiB0aGUgaHlwZXJ2aXNvciBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3lzcmVnLXNyLmNgLiBUaGlzIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIEkgaGF2ZSB0byBiZSBzdXJlIGFib3V0IGBmaXh1cF9udl9ndWVzdF9leGl0YC4gSSBiZWxpZXZlIGl0J3Mgc3RhdGljLi4uIHllcywgY29uZmlybWVkLCBpdCdzIGFsc28gc3RhdGljIHdpdGhpbiBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2AuIEdvb2QsIGFuZCB0aGF0J3MgdGhlIGNvcnJlY3QgbmFtZS4gSSByZW1lbWJlciBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoLiBPa2F5LCBhbmQgYF9fY29tcHV0ZV9oY3JgIGlzIHN0YXRpYyB0b28sIGFuZCBpdCBjb21wdXRlcyB0aGUgSENSLCBhbmQgYF9fc3lzcmVnX3NhdmVfdmVsMl9zdGF0ZWAgc2F2ZXMgdGhlIFZFTDIgc3RhdGUuIGBrdm1faW5pdF9udl9zeXNyZWdzYCBpcyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIGBsaW1pdF9udl9pZF9yZWdgIGxpbWl0cyB0aGUgTlYgSUQgcmVnaXN0ZXIuIEZpbmFsbHksIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAgY2hlY2tzIHRoZSB2aXNpYmlsaXR5LlxuXG5UaGVzZSBzeW1ib2xzIHNlZW0gdG8gYmUgd2VsbC1jaG9zZW4uIFRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBjb2RlIEkgYW0gaW50ZXJlc3RlZCBpbi4gVGhleSdyZSBub3QganVzdCBnZW5lcmljLCBwb3RlbnRpYWxseSBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyIHRoYW4gdGhlIG9uZXMgdGhhdCBhcmUgY2FsbGVkIG9uIHRoZSBndWVzdCBleGl0LiBCdXQsIGV2ZW4gdGhvc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgbG9naWMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBXYWl0LCBgX19jb21wdXRlX2hjcmAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGd1ZXN0IGVudHJ5LiBJdCBjb3VsZCBiZSBhIGhvdCBwYXRoLCB0aG91Z2guIExldCdzIHNlZS4uLiBhbmQgYGZpeHVwX252X2d1ZXN0X2V4aXRgIGlzIGNhbGxlZCBmcm9tIGBmaXh1cF9ndWVzdF9leGl0YCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBjYWxsZWQgb24gKmV2ZXJ5KiBndWVzdCBleGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhvc2UuXG5cblBlcmhhcHMgSSBzaG91bGQgcmVmb2N1cyBvbiB0aGUgaW5pdCBhbmQgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdG8gYXZvaWQgZ2V0dGluZyBib2dnZWQgZG93biBpbiBob3QgcGF0aHMuIExldCdzIHN0aWNrIHdpdGg6XG5cbiogICBga3ZtX2luaXRfbnZfc3lzcmVnc2BcbiogICBgbGltaXRfbnZfaWRfcmVnYFxuKiAgIGBudmhjcl9lbDJfdmlzaWJpbGl0eWBcbiogICBBbmQsIGFzIGFuIGV4dHJhLCBgcG9wdWxhdGVfbnZfdHJhcF9jb25maWdgIGZyb20gYGFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxODowOC40MjcyMzUzMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzkyMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvcHVsYXRlX252X3RyYXBfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vZW11bGF0ZS1uZXN0ZWQuYz0yMjk3PXN0YXRpYyBfX2luaXQgaW50IGNoZWNrX2FsbF9mZ3RfbWFza3MoaW50IHJldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMtMjMyNS1cXG5hcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jOjIzMjY6aW50IF9faW5pdCBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZyh2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2VtdWxhdGUtbmVzdGVkLmMtMjMyNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE4OjA4LjY1MDAzMzAyN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTA1NzA4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE5WIEFjY2VzcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgcmVsYXRlZCB0byBOViBhY2Nlc3MuIGBwb3B1bGF0ZV9udl90cmFwX2NvbmZpZ2AgbG9va3MgbGlrZSBhIG5vbi1zdGFydGVyLiBJdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCdzIG9ubHkgY2FsbGVkIGR1cmluZyBib290LCBtZWFuaW5nIG5vIHVzZXItY29udHJvbGxlZCBpbnB1dC4gTm90IGlkZWFsLlxuXG5Ib3dldmVyLCBgbGltaXRfbnZfaWRfcmVnYCBpcyBjYWxsZWQgd2hlbiB1c2Vyc3BhY2UgcmVhZHMgSUQgcmVnaXN0ZXJzLiBUaGF0J3MgaW1tZWRpYXRlbHkgcHJvbWlzaW5nLiBUaGVuIEkgc2VlIGBrdm1faW5pdF9udl9zeXNyZWdzYCwgY2FsbGVkIHdoZW4gYSB2Q1BVIGluaXRpYWxpemVzLCBhbmQgdGhhdCBzZWVtcyBsaWtlIGEgc29saWQgdGFyZ2V0IHRvby4gTmV4dCB1cCwgYG52aGNyX2VsMl92aXNpYmlsaXR5YCBpcyBjYWxsZWQgd2hlbiB1c2Vyc3BhY2UgYWNjZXNzZXMgdGhlIHN5c3RlbSByZWdpc3Rlciwgd2hpY2ggaXMgZ3JlYXQuXG5cbmB2Y3B1X3JlYWRfc3lzX3JlZ2AgYW5kIGB2Y3B1X3dyaXRlX3N5c19yZWdgIGFyZSBpbnRlcmVzdGluZywgYXMgdGhleSd2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBgQ1BUUl9FTDJgIGFuZCBgQ05USENUTF9FTDJgLiBUaGVzZSBhcmUgY2FsbGVkIGFueXRpbWUgdXNlcnNwYWNlIG9yIHRoZSBndWVzdCBhY2Nlc3NlcyBzeXN0ZW0gcmVnaXN0ZXJzLiBUaGV5J3JlIHBvdGVudGlhbGx5IGdvb2QsIGJ1dCB0aGV5J3JlIHByZXR0eSBnZW5lcmFsLCB3aGljaCBtaWdodCBtYWtlIGZ1enppbmcgbGVzcyBlZmZlY3RpdmUuIFBlcmhhcHMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhlc2UuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhdCBga3ZtX2hhc19udjJgIGFuZCBga3ZtX2hhc19udjNgLiBUaGV5J3JlIGlubGluZSBmdW5jdGlvbnMsIHNvIHByb2JhYmx5IG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGFyZ2V0cy5cblxuT2theSwgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYHRpbWVyX3NldF90cmFwc2AgaW4gYGFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBjb3VsZCBsZWFkIHNvbWV3aGVyZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3MzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MTQuMTU1NzQ0MTkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY4ODk3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGltZXJfc2V0X3RyYXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM9NzQ3PXN0YXRpYyB2b2lkIGt2bV90aW1lcl92Y3B1X2xvYWRfbmVzdGVkX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMtNzgwLVxcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYzo3ODE6c3RhdGljIHZvaWQgdGltZXJfc2V0X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHRpbWVyX21hcCAqbWFwKVxcbmFyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYy03ODIte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jPTg4OT12b2lkIGt2bV90aW1lcl92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jLTkyMC1cXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmM6OTIxOlxcdHRpbWVyX3NldF90cmFwcyh2Y3B1LCBcXHUwMDI2bWFwKTtcXG5hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMtOTIyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MTQuNDAyNjQwMjg2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzAyODYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBUaW1lciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGB0aW1lcl9zZXRfdHJhcHNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgZ2V0dGluZyBjYWxsZWQgd2hlbmV2ZXIgYSB2Q1BVIGdldHMgbG9hZGVkIG9udG8gYSBwaHlzaWNhbCBDUFUg4oCTIGBrdm1fdGltZXJfdmNwdV9sb2FkYC4gVGhhdCdzIGEgY2xhc3NpYyBob3QgcGF0aCBzaXR1YXRpb24sIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSwgc28gd2UgbmVlZCB0byBiZSBleHRyYSBjYXJlZnVsIHdpdGggaXQuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSAqd2hhdCogaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IHBhdGgsIHBhcnRpY3VsYXJseSBpZiB3ZSdyZSBzZWVpbmcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgYGFybTY0YCwgYW5kIHRoZSB0aW1lciBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEknbGwgZ28gc3RyYWlnaHQgdG8gYGFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYGNoZWNrX2ZlYXR1cmVfbWFwYC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBob3cgdGhlIHRpbWVycyBhcmUgY29uZmlndXJlZCBvciB3aGF0IGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZlYXR1cmUgc2V0LCBhbmQgcG90ZW50aWFsbHkgdGhlIGNvbmZpZ3VyYXRpb24sIHdpbGwgb2ZmZXIgY2x1ZXMgdG8gdGhlIGhvdCBwYXRoIGxvZ2ljIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdkNQVSBsb2FkaW5nIGFuZCB0aW1lciBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxODoxNy44NzI5MjkyNTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQ0NzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19mZWF0dXJlX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9jb25maWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9jb25maWcuYz0xMzc2PXN0YXRpYyB2b2lkIF9faW5pdCBjaGVja19yZWdfZGVzYyhjb25zdCBzdHJ1Y3QgcmVnX2ZlYXRfbWFwX2Rlc2MgKnIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xMzgxLVxcbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jOjEzODI6dm9pZCBfX2luaXQgY2hlY2tfZmVhdHVyZV9tYXAodm9pZClcXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xMzgzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MTguMTE2Mzg0Mzc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTg2MTM3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbml0aWFsaXphdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBjaGVja19mZWF0dXJlX21hcGAgaXMgYmVpbmcgZGVmaW5lZCB3aXRoaW4gYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIGl0J3MgcHJvYmFibHkgYWJvdXQgaW5pdGlhbGl6aW5nIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdC4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgYGdldF9yZWdfZml4ZWRfYml0c2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jYC4gVGhhdCBmaWxlIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGZpbGUgcGF0aC4gSXQgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBzb21lIGNvbnRleHQgZm9yIGBjaGVja19mZWF0dXJlX21hcGAgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQVJNNjQgS1ZNIGNvbmZpZ3VyYXRpb24uIEkgZXhwZWN0IHRoYXQgZGlnZ2luZyBpbnRvIHRoYXQgZnVuY3Rpb24gd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBmZWF0dXJlIG1hcCdzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGluaXRpYWxpemVkLCBvciB2YWxpZGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MjAuODc1MDAxNzExWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2MTc2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3JlZ19maXhlZF9iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jPTE1MDk9dm9pZCBjb21wdXRlX2ZndShzdHJ1Y3Qga3ZtICprdm0sIGVudW0gZmd0X2dyb3VwX2lkIGZndClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2NvbmZpZy5jLTE1NTItXFxuYXJjaC9hcm02NC9rdm0vY29uZmlnLmM6MTU1MzpzdHJ1Y3QgcmVzeCBnZXRfcmVnX2ZpeGVkX2JpdHMoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIHZjcHVfc3lzcmVnIHJlZylcXG5hcmNoL2FybTY0L2t2bS9jb25maWcuYy0xNTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTg6MjEuMDk1NjI1MjE3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjY5Nzg1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSB0YXJnZXQgaXMgdkNQVSBpbml0aWFsaXphdGlvbiwgYW5kIGBnZXRfcmVnX2ZpeGVkX2JpdHNgIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdGhhdCBhcmUgd29ydGggZm9jdXNpbmcgb24gZm9yIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgY2FuZGlkYXRlIGZvY3VzIHN5bWJvbHMgaW5jbHVkZXM6IGBrdm1faW5pdF9udl9zeXNyZWdzYCwgYGxpbWl0X252X2lkX3JlZ2AsIGBudmhjcl9lbDJfdmlzaWJpbGl0eWAsIGFuZCBgZ2V0X3JlZ19maXhlZF9iaXRzYC4gVGhlc2UgYXJlIGFsbCBkaXJlY3RseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIGtleSByZWdpc3RlciBsb2dpYyB3aXRoaW4gdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbi4gTG9va2luZyBmdXJ0aGVyLCBJJ2xsIGFkZCBgZml4dXBfbnZfZ3Vlc3RfZXhpdGAsIGV2ZW4gdGhvdWdoIGl0J3Mgb24gdGhlIGV4aXQgcGF0aC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgYE5WSENSX0VMMmAgbG9naWMsIHdoaWNoIGlzIG5ldy5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBhZmZlY3RzIGBhcmNoL2FybTY0L2t2bS9lbXVsYXRlLW5lc3RlZC5jYCBhbmQgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYW5kIHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFRoYXQncyBzdHJhaWdodGZvcndhcmQ7IHRoZSBgS1ZNYCBjb25maWcgaXMgc3VmZmljaWVudCB0byBidWlsZCB0aGVzZSBjb2RlIHBhdGhzLiBObyBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgYXBwYXJlbnQuXG5cblNvLCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB2aWV3IGZvciBmdXp6aW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgYSBzdWJzdGFudGlhbCBtb2RpZmljYXRpb24gd2l0aCBjbGVhciBlbnRyeSBwb2ludHMuXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYGt2bV9pbml0X252X3N5c3JlZ3NgXG4gICAgKiAgIGBsaW1pdF9udl9pZF9yZWdgXG4gICAgKiAgIGBudmhjcl9lbDJfdmlzaWJpbGl0eWBcbiAgICAqICAgYGdldF9yZWdfZml4ZWRfYml0c2BcbiAgICAqICAgYGZpeHVwX252X2d1ZXN0X2V4aXRgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBLVk1gXG5cbk15IHJlYXNvbmluZyBpcyBzaW1wbGUuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIEFSTTY0IE5lc3RlZCBWaXJ0dWFsaXphdGlvbiB2MyBhbmQgdjJwMSBzdXBwb3J0IGluIEtWTS4gSXQgZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBLVk0gaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluY2x1ZGluZyB0aGUgc3lzcmVncyAoTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZsb3cuIFRoaXMgbWVhbnMgdGhhdCBieSBydW5uaW5nIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIEtWTSBndWVzdCwgd2UgY2FuIGFjdGl2YXRlIHRoZSBhZmZlY3RlZCBjb2RlIHRvIGJlIGZ1enplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NzcsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE4OjI5LjcyMjYwNzQyMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODk5Mjc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2luaXRfbnZfc3lzcmVnc1wiLFxuICAgIFwibGltaXRfbnZfaWRfcmVnXCIsXG4gICAgXCJudmhjcl9lbDJfdmlzaWJpbGl0eVwiLFxuICAgIFwiZ2V0X3JlZ19maXhlZF9iaXRzXCIsXG4gICAgXCJmaXh1cF9udl9ndWVzdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gdjMgKEZFQVRfTlYzKSBhbmQgRkVBVF9OVjJwMSBpbiBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgaW5jbHVkaW5nIHN5c3JlZyBoYW5kbGluZyAoZS5nLiwgTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZpeHVwcy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGNhbiBiZSB0ZXN0ZWQgYnkgcnVubmluZyBLVk0gZ3Vlc3RzIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2luaXRfbnZfc3lzcmVnc1wiLFxuICAgIFwibGltaXRfbnZfaWRfcmVnXCIsXG4gICAgXCJudmhjcl9lbDJfdmlzaWJpbGl0eVwiLFxuICAgIFwiZ2V0X3JlZ19maXhlZF9iaXRzXCIsXG4gICAgXCJmaXh1cF9udl9ndWVzdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gdjMgKEZFQVRfTlYzKSBhbmQgRkVBVF9OVjJwMSBpbiBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgaW5jbHVkaW5nIHN5c3JlZyBoYW5kbGluZyAoZS5nLiwgTlZIQ1JfRUwyLCBDUFRSX0VMMiwgQ05USENUTF9FTDIpLCB0cmFwIGNvbmZpZ3VyYXRpb24sIGFuZCBndWVzdCBleGl0IGZpeHVwcy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGNhbiBiZSB0ZXN0ZWQgYnkgcnVubmluZyBLVk0gZ3Vlc3RzIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownqx5s[1] Phase: Succeeded StartedAt: 2026-07-02 18:19:19 +0000 UTC FinishedAt: 2026-07-02 18:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 18:19:19 +0000 UTC FinishedAt: 2026-07-02 18:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[2] Phase: Succeeded StartedAt: 2026-07-02 18:19:19 +0000 UTC FinishedAt: 2026-07-02 19:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-02 18:19:20 +0000 UTC FinishedAt: 2026-07-02 19:05:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 18:19:20 +0000 UTC FinishedAt: 2026-07-02 18:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 18:19:20 +0000 UTC FinishedAt: 2026-07-02 18:20:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflownqx5s/series-workflownqx5s-convert-artifact-2310908826/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 18:21:33 +0000 UTC FinishedAt: 2026-07-02 19:05:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 18:21:33 +0000 UTC FinishedAt: 2026-07-02 19:05:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b46a8cfb-d54a-4852-82e7-6d306844fa29,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-workflownqx5s/series-workflownqx5s-convert-artifact-2310908826/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": "b38dcc14-cf8e-4e6e-93c6-6515b060bdd2", "success": false },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-workflownqx5s/series-workflownqx5s-build-action-1050475592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 18:21:33 +0000 UTC FinishedAt: 2026-07-02 19:04:27 +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:*b46a8cfb-d54a-4852-82e7-6d306844fa29,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-workflownqx5s/series-workflownqx5s-convert-artifact-2310908826/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": "b38dcc14-cf8e-4e6e-93c6-6515b060bdd2", "success": false },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-workflownqx5s/series-workflownqx5s-build-action-1050475592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-07-02 19:05:16 +0000 UTC FinishedAt: 2026-07-02 19:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqx5s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_init_nv_sysregs","limit_nv_id_reg","nvhcr_el2_visibility","get_reg_fixed_bits","fixup_nv_guest_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4d1ca70c-d658-4c6a-9b98-514e3e9be4e4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-07-02 19:05:16 +0000 UTC FinishedAt: 2026-07-02 19:05:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}