Name: series-workflowvrx6l Phase: Succeeded StartedAt: 2026-08-06 01:35:58 +0000 UTC FinishedAt: 2026-08-06 05:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[0] Phase: Succeeded StartedAt: 2026-08-06 01:35:58 +0000 UTC FinishedAt: 2026-08-06 02:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 01:35:58 +0000 UTC FinishedAt: 2026-08-06 02:17:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "51ba04112e93ac6e04c627eddcea5caf9cbc0134", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "X86_SGX", "X86_SGX_KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "51ba04112e93ac6e04c627eddcea5caf9cbc0134", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "X86_SGX", "X86_SGX_KVM" ], "series_id": "9b25f76e-1f9f-4fed-8e61-14584ea7a9ed" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vmx_is_lass_violation", "get_vmx_mem_address", "kvm_handle_invpcid", "vmx_get_untagged_addr" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7WDg2X1NHWCYjMzQ7LAogICAgJiMzNDtYODZfU0dYX0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZteF9pc19sYXNzX3Zpb2xhdGlvbiYjMzQ7LAogICAgJiMzNDtnZXRfdm14X21lbV9hZGRyZXNzJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfaW52cGNpZCYjMzQ7LAogICAgJiMzNDt2bXhfZ2V0X3VudGFnZ2VkX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBpbiBLVk0gb24geDg2LiBJdCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM0YjE4NWQ3MDlhMDZhZjc4OGZkN2RhODFmOGY2OGRiMzM2ODg2MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjE1OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCBlMjEzYzlhZTNlMzAxLi5hODJiMjAyODFmMzFhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTE0Niw2ICYjNDM7MTQ2LDcgQEAgS1ZNX1g4Nl9PUChjb21wbGV0ZV9lbXVsYXRlZF9tc3IpXG4gS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGlzX2xhc3NfdmlvbGF0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21ha2VfcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjgzODQ3NjE5ZmY4OC4uZDIxODFhODA1YWNlNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNzI3LDYgJiM0MzsxNzI3LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdHVuc2lnbmVkIGxvbmcgKCp2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gXHRndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7XHRib29sICgqaXNfbGFzc192aW9sYXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXHR2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcbiBcdGludCAoKmdtZW1fbWFrZV9wcml2YXRlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5pbmRleCA5ZTljZjY1MzhhOTZlLi5jNGRiZDAwZjVlNGU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5AQCAtMTAyOSw2ICYjNDM7MTAyOSw3IEBAIHZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcbiBcdFx0RihTTTQpLFxuIFx0XHRGKEFWWF9WTk5JKSxcbiBcdFx0RihBVlg1MTJfQkYxNiksXG4mIzQzO1x0XHRYODZfNjRfRihMQVNTKSxcbiBcdFx0RihDTVBDQ1hBREQpLFxuIFx0XHRGKEZaUk0pLFxuIFx0XHRGKEZTUlMpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5pbmRleCA4MDcxYjM3MmQyMzNlLi45Y2JmZGU2NDkwNjQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuQEAgLTY3Miw3ICYjNDM7NjcyLDggQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19saW5lYXJpemUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdCAgICAoZmxhZ3MgXHUwMDI2IFg4NkVNVUxfRl9XUklURSkpXG4gXHRcdFx0Z290byBiYWQ7XG4gXHRcdC8qIHVucmVhZGFibGUgY29kZSBzZWdtZW50ICovXG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBYODZFTVVMX0ZfRkVUQ0gpIFx1MDAyNlx1MDAyNiAoZGVzYy50eXBlIFx1MDAyNiA4KSBcdTAwMjZcdTAwMjYgIShkZXNjLnR5cGUgXHUwMDI2IDIpKVxuJiM0MztcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfQlJBTkNIKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2ICEoZGVzYy50eXBlIFx1MDAyNiAyKSlcbiBcdFx0XHRnb3RvIGJhZDtcbiBcdFx0bGltID0gZGVzY19saW1pdF9zY2FsZWQoXHUwMDI2ZGVzYyk7XG4gXHRcdGlmICghKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2IChkZXNjLnR5cGUgXHUwMDI2IDQpKSB7XG5AQCAtNjkyLDYgJiM0Mzs2OTMsMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19saW5lYXJpemUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTEFTUyBhbmQgY2Fub25pY2FsaXR5IGNoZWNrcyBnZW5lcmF0ZSB0aGUgc2FtZSBmYXVsdCBhbmRcbiYjNDM7XHQgKiB0aGVpciByZWxhdGl2ZSBvcmRlciBpcyBub3QgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQuIEFsc28sXG4mIzQzO1x0ICogdGhlIFNETSBkb2VzbiYjMzk7dCBwcmlvcml0aXplIExBU1MgdmlvbGF0aW9ucyBhZ2FpbnN0XG4mIzQzO1x0ICogYWxpZ25tZW50LWNoZWNrIGZhdWx0cywgc28gYW55IG9yZGVyIGlzIGxlZ2FsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHh0LVx1MDAzZW9wcy1cdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsYSwgc2l6ZSwgZmxhZ3MpKVxuJiM0MztcdFx0Z290byBiYWQ7XG4mIzQzO1xuIFx0aWYgKGxhIFx1MDAyNiAoaW5zbl9hbGlnbm1lbnQoY3R4dCwgc2l6ZSkgLSAxKSlcbiBcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbkBAIC03MjMsNyAmIzQzOzczNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFzc2lnbl9laXAoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGRzdClcbiBcdGlmIChjdHh0LVx1MDAzZW9wX2J5dGVzICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSlcbiBcdFx0YWRkci5lYSA9IGRzdCBcdTAwMjYgKCgxVUwgXHUwMDNjXHUwMDNjIChjdHh0LVx1MDAzZW9wX2J5dGVzIFx1MDAzY1x1MDAzYyAzKSkgLSAxKTtcbiBcdHJjID0gX19saW5lYXJpemUoY3R4dCwgYWRkciwgXHUwMDI2bWF4X3NpemUsIDEsIGN0eHQtXHUwMDNlbW9kZSwgXHUwMDI2bGluZWFyLFxuLVx0XHRcdCBYODZFTVVMX0ZfRkVUQ0gpO1xuJiM0MztcdFx0XHQgWDg2RU1VTF9GX0JSQU5DSCk7XG4gXHRpZiAocmMgPT0gWDg2RU1VTF9DT05USU5VRSlcbiBcdFx0Y3R4dC1cdTAwM2VfZWlwID0gYWRkci5lYTtcbiBcdHJldHVybiByYztcbkBAIC03OTgsNiAmIzQzOzgwOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGptcF9yZWwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCByZWwpXG4gc3RhdGljIGludCBsaW5lYXJfcmVhZF9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGxpbmVhcixcbiBcdFx0XHQgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXplKVxuIHtcbiYjNDM7XHRpZiAoY3R4dC1cdTAwM2VvcHMtXHUwMDNlaXNfbGFzc192aW9sYXRpb24oY3R4dCwgbGluZWFyLCBzaXplLCBYODZFTVVMX0ZfSU1QTElDSVQpKVxuJiM0MztcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4mIzQzO1xuIFx0cmV0dXJuIGN0eHQtXHUwMDNlb3BzLVx1MDAzZXJlYWRfc3RkKGN0eHQsIGxpbmVhciwgZGF0YSwgc2l6ZSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24sIHRydWUpO1xuIH1cbiBcbkBAIC04MDUsNiAmIzQzOzgxOSwxMCBAQCBzdGF0aWMgaW50IGxpbmVhcl93cml0ZV9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdFx0ICAgICAgIHVsb25nIGxpbmVhciwgdm9pZCAqZGF0YSxcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuJiM0MztcdGlmIChjdHh0LVx1MDAzZW9wcy1cdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX1dSSVRFKSlcbiYjNDM7XHRcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xuJiM0MztcbiBcdHJldHVybiBjdHh0LVx1MDAzZW9wcy1cdTAwM2V3cml0ZV9zdGQoY3R4dCwgbGluZWFyLCBkYXRhLCBzaXplLCBcdTAwMjZjdHh0LVx1MDAzZWV4Y2VwdGlvbiwgdHJ1ZSk7XG4gfVxuIFxuQEAgLTI1NzIsMTIgJiM0MzsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdGJhc2UgfD0gKCh1NjQpYmFzZTMpIFx1MDAzY1x1MDAzYyAzMjtcbiAjZW5kaWZcbi1cdHIgPSBvcHMtXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSAmIzQzOyAxMDIsIFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIsIE5VTEwsIHRydWUpO1xuJiM0MztcdHIgPSBsaW5lYXJfcmVhZF9zeXN0ZW0oY3R4dCwgYmFzZSAmIzQzOyAxMDIsIFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIpO1xuIFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKGlvX2JpdG1hcF9wdHIgJiM0MzsgcG9ydC84IFx1MDAzZSBkZXNjX2xpbWl0X3NjYWxlZChcdTAwMjZ0cl9zZWcpKVxuJiM0MztcdGlmIChpb19iaXRtYXBfcHRyICYjNDM7IHBvcnQvOCAmIzQzOyAxIFx1MDAzZSBkZXNjX2xpbWl0X3NjYWxlZChcdTAwMjZ0cl9zZWcpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyID0gb3BzLVx1MDAzZXJlYWRfc3RkKGN0eHQsIGJhc2UgJiM0MzsgaW9fYml0bWFwX3B0ciAmIzQzOyBwb3J0LzgsIFx1MDAyNnBlcm0sIDIsIE5VTEwsIHRydWUpO1xuJiM0MztcdHIgPSBsaW5lYXJfcmVhZF9zeXN0ZW0oY3R4dCwgYmFzZSAmIzQzOyBpb19iaXRtYXBfcHRyICYjNDM7IHBvcnQvOCwgXHUwMDI2cGVybSwgMik7XG4gXHRpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoKHBlcm0gXHUwMDNlXHUwMDNlIGJpdF9pZHgpIFx1MDAyNiBtYXNrKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmYxMzZkM2QwYmE0MjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIHN0cnVjdCB4ODZfaW5zdHJ1Y3Rpb25faW5mbyB7XG4gI2RlZmluZSBYODZFTVVMX0ZfSU5WTFBHXHRcdEJJVCgzKVxuICNkZWZpbmUgWDg2RU1VTF9GX01TUlx0XHRcdEJJVCg0KVxuICNkZWZpbmUgWDg2RU1VTF9GX0RUX0xPQURcdFx0QklUKDUpXG4mIzQzOyNkZWZpbmUgWDg2RU1VTF9GX0JSQU5DSFx0XHRCSVQoNilcbiBcbiBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHtcbiBcdHZvaWQgKCp2bV9idWdnZWQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbkBAIC0yNDgsNyAmIzQzOzI0OSw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMge1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLVxuJiM0MztcdGJvb2wgKCppc19sYXNzX3Zpb2xhdGlvbikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBcdGJvb2wgKCppc19jYW5vbmljYWxfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmhcbmluZGV4IDQ0N2YwZWMzZTYzZTQuLmJlODYyMTY5NWM0MTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5AQCAtMjgsNyAmIzQzOzI4LDcgQEAgc3RhdGljX2Fzc2VydCghKEtWTV9QT1NTSUJMRV9DUjBfR1VFU1RfQklUUyBcdTAwMjYgWDg2X0NSMF9QRFBUUl9CSVRTKSk7XG4gXHRcdFx0ICB8IFg4Nl9DUjRfT1NYU0FWRSB8IFg4Nl9DUjRfU01FUCB8IFg4Nl9DUjRfRlNHU0JBU0UgXFxcbiBcdFx0XHQgIHwgWDg2X0NSNF9PU1hNTUVYQ1BUIHwgWDg2X0NSNF9MQTU3IHwgWDg2X0NSNF9WTVhFIFxcXG4gXHRcdFx0ICB8IFg4Nl9DUjRfU01BUCB8IFg4Nl9DUjRfUEtFIHwgWDg2X0NSNF9VTUlQIFxcXG4tXHRcdFx0ICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUKSlcbiYjNDM7XHRcdFx0ICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUIHwgWDg2X0NSNF9MQVNTKSlcbiBcbiAjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpXG4gXG5AQCAtNDA1LDYgJiM0Mzs0MDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19rdm1faXNfdmFsaWRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gXHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X1BDSURFOyAgICAgICBcXFxuIFx0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQU0pKSAgICAgICAgICAgXFxcbiBcdFx0X19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFNX1NVUDsgICAgIFxcXG4mIzQzO1x0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQVNTKSkgICAgICAgICAgXFxcbiYjNDM7XHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0xBU1M7ICAgICAgICBcXFxuIFx0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9TSFNUSykgXHUwMDI2XHUwMDI2ICAgICAgIFxcXG4gXHQgICAgIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0lCVCkpICAgICAgICAgICBcXFxuIFx0XHRfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9DRVQ7ICAgICAgICAgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCAwZmYzMjMwZmQ5NWU4Li4zNTgwYWFkYThkMmM4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTAzMSw2ICYjNDM7MTAzMSw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQudmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yID0ga3ZtX3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcixcbiBcbiBcdC5nZXRfdW50YWdnZWRfYWRkciA9IHZteF9nZXRfdW50YWdnZWRfYWRkcixcbiYjNDM7XHQuaXNfbGFzc192aW9sYXRpb24gPSB2bXhfaXNfbGFzc192aW9sYXRpb24sXG4gXG4gXHQubWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KG1lbV9lbmNfaW9jdGwpLFxuIFx0LnZjcHVfbWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY19pb2N0bCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTI5OSwxMSAmIzQzOzUyOTksMTIgQEAgaW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbiBcdFx0XHQqcmV0ID0gb2ZmO1xuIFxuIFx0XHQqcmV0ID0gdm14X2dldF91bnRhZ2dlZF9hZGRyKHZjcHUsICpyZXQsIDApO1xuLVx0XHQvKiBMb25nIG1vZGU6ICNHUCgwKS8jU1MoMCkgaWYgdGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIGFcbi1cdFx0ICogbm9uLWNhbm9uaWNhbCBmb3JtLiBUaGlzIGlzIHRoZSBvbmx5IGNoZWNrIG9uIHRoZSBtZW1vcnlcbi1cdFx0ICogZGVzdGluYXRpb24gZm9yIGxvbmcgbW9kZSFcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBMb25nIG1vZGU6ICNHUCgwKS8jU1MoMCkgaWYgdGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIGFcbiYjNDM7XHRcdCAqIG5vbi1jYW5vbmljYWwgZm9ybSwgb3IgaWYgdGhlIGFjY2VzcyB2aW9sYXRlcyBMQVNTLlxuIFx0XHQgKi9cbi1cdFx0ZXhuID0gaXNfbm9uY2Fub25pY2FsX2FkZHJlc3MoKnJldCwgdmNwdSwgMCk7XG4mIzQzO1x0XHRleG4gPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqcmV0LCB2Y3B1LCAwKSB8fFxuJiM0MztcdFx0ICAgICAgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHZjcHUsICpyZXQsIGxlbiwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIG5vdCBpbiBsb25nIG1vZGUsIHRoZSB2aXJ0dWFsL2xpbmVhciBhZGRyZXNzIGlzXG5AQCAtNjEwOCw3ICYjNDM7NjEwOSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHR5cGUgIT0gVk1YX1ZQSURfRVhURU5UX0FMTF9DT05URVhUIFx1MDAyNlx1MDAyNiAhb3BlcmFuZC52cGlkKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9JTlZBTElEX09QRVJBTkRfVE9fSU5WRVBUX0lOVlZQSUQpO1xuIFxuLVx0LyogTEFNIGRvZXNuJiMzOTt0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCIGludmFsaWRhdGlvbi4gKi9cbiYjNDM7XHQvKiBMQU0gYW5kIExBU1MgZG9uJiMzOTt0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCIGludmFsaWRhdGlvbi4gKi9cbiBcdGlmICh0eXBlID09IFZNWF9WUElEX0VYVEVOVF9JTkRJVklEVUFMX0FERFIgXHUwMDI2XHUwMDI2XG4gXHQgICAgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKG9wZXJhbmQuZ2xhLCB2Y3B1KSlcbiBcdFx0cmV0dXJuIG5lc3RlZF92bXhfZmFpbCh2Y3B1LCBWTVhFUlJfSU5WQUxJRF9PUEVSQU5EX1RPX0lOVkVQVF9JTlZWUElEKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xuaW5kZXggNzcxYzc1YTU4MzQzNi4uNGFjMzA1ZWQ2ZGVhMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvc2d4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvc2d4LmNcbkBAIC0zOSw3ICYjNDM7MzksOCBAQCBzdGF0aWMgaW50IHNneF9nZXRfZW5jbHNfZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHRcdGZhdWx0ID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAobGlrZWx5KGlzXzY0X2JpdF9tb2RlKHZjcHUpKSkge1xuIFx0XHQqZ3ZhID0gdm14X2dldF91bnRhZ2dlZF9hZGRyKHZjcHUsICpndmEsIDApO1xuLVx0XHRmYXVsdCA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpndmEsIHZjcHUsIDApO1xuJiM0MztcdFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fFxuJiM0MztcdFx0XHR2bXhfaXNfbGFzc192aW9sYXRpb24odmNwdSwgKmd2YSwgc2l6ZSwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHQqZ3ZhIFx1MDAyNj0gMHhmZmZmZmZmZjtcbiBcdFx0ZmF1bHQgPSAocy51bnVzYWJsZSkgfHxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uMzA4MjE5NTkwNmRhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC03ODg1LDYgJiM0Mzs3ODg1LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeV9pbmRleCh2Y3B1LCAweDcsIDEpO1xuIFx0Y3I0X2ZpeGVkMV91cGRhdGUoWDg2X0NSNF9MQU1fU1VQLCAgICBlYXgsIGZlYXR1cmVfYml0KExBTSkpO1xuJiM0MztcdGNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFTUywgICAgICAgZWF4LCBmZWF0dXJlX2JpdChMQVNTKSk7XG4gXG4gI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlXG4gfVxuQEAgLTg1NzEsNyAmIzQzOzg1NzIsOCBAQCBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFnc1xuIFx0aW50IGxhbV9iaXQ7XG4gXHR1bnNpZ25lZCBsb25nIGNyM19iaXRzO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX0lOVkxQRykpXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0JSQU5DSCB8IFg4NkVNVUxfRl9JTVBMSUNJVCB8XG4mIzQzO1x0XHQgICAgIFg4NkVNVUxfRl9JTlZMUEcpKVxuIFx0XHRyZXR1cm4gZ3ZhO1xuIFxuIFx0aWYgKCFpc182NF9iaXRfbW9kZSh2Y3B1KSlcbkBAIC04NjAzLDYgJiM0Mzs4NjA1LDUzIEBAIGd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzXG4gXHRyZXR1cm4gKHNpZ25fZXh0ZW5kNjQoZ3ZhLCBsYW1fYml0KSBcdTAwMjYgfkJJVF9VTEwoNjMpKSB8IChndmEgXHUwMDI2IEJJVF9VTEwoNjMpKTtcbiB9XG4gXG4mIzQzO2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgYm9vbCBpc19zdXBlcnZpc29yX2FkZHJlc3MgPSAhIShndmEgXHUwMDI2IEJJVF9VTEwoNjMpKTtcbiYjNDM7XHRjb25zdCBib29sIGltcGxpY2l0X3N1cGVydmlzb3IgPSAhIShmbGFncyBcdTAwMjYgWDg2RU1VTF9GX0lNUExJQ0lUKTtcbiYjNDM7XHRjb25zdCBib29sIGZldGNoID0gISEoZmxhZ3MgXHUwMDI2IFg4NkVNVUxfRl9GRVRDSCk7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX2lzX2NyNF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjRfTEFTUykgfHwgIWlzX2xvbmdfbW9kZSh2Y3B1KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJTlZMUEcgaXNuJiMzOTt0IHN1YmplY3QgdG8gTEFTUywgZS5nLiB0byBhbGxvdyBpbnZhbGlkYXRpbmcgdXNlcnNwYWNlXG4mIzQzO1x0ICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbiYjMzk7dCBzdWJqZWN0XG4mIzQzO1x0ICogdG8gTEFTUyBpbiBvcmRlciB0byBzaW1wbGlmeSBmYXIgY29udHJvbCB0cmFuc2ZlcnMgKHRoZSBzdWJzZXF1ZW50XG4mIzQzO1x0ICogZmV0Y2ggd2lsbCBlbmZvcmNlIExBU1MgYXMgYXBwcm9wcmlhdGUpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgKFg4NkVNVUxfRl9CUkFOQ0ggfCBYODZFTVVMX0ZfSU5WTFBHKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yIFx1MDAyNlx1MDAyNiB2bXhfZ2V0X2NwbCh2Y3B1KSA9PSAzKVxuJiM0MztcdFx0cmV0dXJuIGlzX3N1cGVydmlzb3JfYWRkcmVzcztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMQVNTIGVuZm9yY2VtZW50IGZvciBzdXBlcnZpc29yLW1vZGUgZGF0YSBhY2Nlc3NlcyBkZXBlbmRzIG9uIFNNQVBcbiYjNDM7XHQgKiBiZWluZyBlbmFibGVkLCBhbmQgbGlrZSBTTUFQIGlnbm9yZXMgZXhwbGljaXQgYWNjZXNzZXMgaWYgUkZMQUdTLkFDPTEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFmZXRjaCkge1xuJiM0MztcdFx0aWYgKCFrdm1faXNfY3I0X2JpdF9zZXQodmNwdSwgWDg2X0NSNF9TTUFQKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghaW1wbGljaXRfc3VwZXJ2aXNvciBcdTAwMjZcdTAwMjYgKGt2bV9nZXRfcmZsYWdzKHZjcHUpIFx1MDAyNiBYODZfRUZMQUdTX0FDKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZW50aXJlIGFjY2VzcyBtdXN0IGJlIGluIHRoZSBhcHByb3ByaWF0ZSBhZGRyZXNzIHNwYWNlLiAgTm90ZSxcbiYjNDM7XHQgKiBpZiBMQU0gaXMgc3VwcG9ydGVkLCBAZ3ZhIGhhcyBhbHJlYWR5IGJlZW4gdW50YWdnZWQsIHNvIGJhcnJpbmcgYVxuJiM0MztcdCAqIG1hc3NpdmUgYXJjaGl0ZWN0dXJlIGNoYW5nZSB0byBleHBhbmQgdGhlIGNhbm9uaWNhbCBhZGRyZXNzIHJhbmdlLFxuJiM0MztcdCAqIGl0JiMzOTtzIGltcG9zc2libGUgZm9yIGEgdXNlciBhY2Nlc3MgdG8gc3RyYWRkbGUgdXNlciBhbmQgc3VwZXJ2aXNvclxuJiM0MztcdCAqIGFkZHJlc3Mgc3BhY2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiAhKChndmEgJiM0Mzsgc2l6ZSAtIDEpIFx1MDAyNiBCSVRfVUxMKDYzKSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICFpc19zdXBlcnZpc29yX2FkZHJlc3M7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGludCB2bXhfaGFuZGxlX2ludGVsX3B0X2ludHIodm9pZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li40M2RmNzI1YTc3ZjBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM5Nyw2ICYjNDM7Mzk3LDkgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG4mIzQzO2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7XG4gdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gdTY0IHZteF9nZXRfc3VwcG9ydGVkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBob3N0X2luaXRpYXRlZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBkOTRiNTkxNDBjNDUyLi5hNmVhNzM2ZmQ0OGZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC01ODAwLDYgJiM0Mzs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0XHRcdFx0ICAgICAgIGFkZHIsIGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV94ODZfY2FsbChpc19sYXNzX3Zpb2xhdGlvbikoZW11bF90b192Y3B1KGN0eHQpLCBhZGRyLCBzaXplLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdFx0XHQgICAgICAgZ3ZhX3QgYWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC01ODU5LDYgJiM0Mzs1ODY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XG4gXHQuZ2V0X3hjciAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF94Y3IsXG4gXHQuc2V0X3hjciAgICAgICAgICAgICA9IGVtdWxhdG9yX3NldF94Y3IsXG4gXHQuZ2V0X3VudGFnZ2VkX2FkZHIgICA9IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyLFxuJiM0MztcdC5pc19sYXNzX3Zpb2xhdGlvbiAgID0gZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24sXG4gXHQuaXNfY2Fub25pY2FsX2FkZHIgICA9IGVtdWxhdG9yX2lzX2Nhbm9uaWNhbF9hZGRyLFxuIFx0LnBhZ2VfYWRkcmVzc192YWxpZCAgPSBlbXVsYXRvcl9wYWdlX2FkZHJlc3NfdmFsaWQsXG4gfTtcbkBAIC0xMDc0NSw3ICYjNDM7MTA3NTIsNyBAQCBpbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6XG4gXHRcdC8qXG4tXHRcdCAqIExBTSBkb2VzbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxuJiM0MztcdFx0ICogTEFNIGFuZCBMQVNTIGRvbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxuIFx0XHQgKiBpbnZhbGlkYXRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoKCFwY2lkX2VuYWJsZWQgXHUwMDI2XHUwMDI2IChvcGVyYW5kLnBjaWQgIT0gMCkpIHx8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDAwMTIzMTY5YTE5MGEuLjg2ZmE5M2UwZjZjMDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtOTEsNiAmIzQzOzkxLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2xhc3NfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L21vbml0b3JfbXdhaXRfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L21zcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuaW5kZXggNmU2ZjcwMDM1NTA4YS4uZjQyNTE2NjE3NGY5ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtNzksNiAmIzQzOzc5LDcgQEAgY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpO1xuICNkZWZpbmUgWDg2X0NSNF9TTUVQXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDIwKVxuICNkZWZpbmUgWDg2X0NSNF9TTUFQXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDIxKVxuICNkZWZpbmUgWDg2X0NSNF9QS0VcdFx0KDF1bCBcdTAwM2NcdTAwM2MgMjIpXG4mIzQzOyNkZWZpbmUgWDg2X0NSNF9MQVNTXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDI3KVxuIFxuIHN0cnVjdCB4c3RhdGVfaGVhZGVyIHtcbiBcdHU2NFx0XHRcdFx0eHN0YXRlX2J2O1xuQEAgLTE5NSw2ICYjNDM7MTk2LDcgQEAgc3RydWN0IGt2bV94ODZfY3B1X2ZlYXR1cmUge1xuICNkZWZpbmVcdFg4Nl9GRUFUVVJFX1NQRUNfQ1RSTFx0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyNilcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9BUkNIX0NBUEFCSUxJVElFU1x0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVEWCwgMjkpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfUEtTXHRcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVDWCwgMzEpXG4mIzQzOyNkZWZpbmVcdFg4Nl9GRUFUVVJFX0xBU1NcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDEsIEVBWCwgNilcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9YVElMRUNGR1x0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4RCwgMCwgRUFYLCAxNylcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9YVElMRURBVEFcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweEQsIDAsIEVBWCwgMTgpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfWFNBVkVTXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAxLCBFQVgsIDMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbGFzc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YzVjZmEyNGMyYmRkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2xhc3NfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSw1NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSB0ZXN0XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiwgSW50ZWwgQ29ycG9yYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgdGVzdCB0aGF0IHRoZSBndWVzdCBjYW4mIzM5O3Qgc2V0IENSNC5MQVNTIHdoZW4gTEFTUyBpc24mIzM5O3RcbiYjNDM7ICogZW51bWVyYXRlZCBpbiB0aGUgZ3Vlc3QmIzM5O3MgQ1BVSUQuICBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgQ1I0LkxBU1MgdmlhXG4mIzQzOyAqIEtWTV9TRVRfU1JFR1MgaXMgY292ZXJlZCBieSBzZXRfc3JlZ3NfdGVzdC5cbiYjNDM7ICpcbiYjNDM7ICogVGVzdGluZyBMQVNTIGVuZm9yY2VtZW50IHJlcXVpcmVzIHJ1bm5pbmcgc3VwZXJ2aXNvciBjb2RlIGluIHRoZVxuJiM0MzsgKiB1cHBlciBoYWxmIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCB3aGljaCB0aGUgS1ZNIHNlbGZ0ZXN0cyBmcmFtZXdvcmtcbiYjNDM7ICogZG9lc24mIzM5O3Qgc3VwcG9ydC4gRW5hYmxpbmcgQ1I0LkxBU1MgaW4gdGhlIGN1cnJlbnQgZnJhbWV3b3JrIHdvdWxkXG4mIzQzOyAqIG1ha2UgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gZmV0Y2ggYSB2aW9sYXRpb24gYW5kIHRyaXBsZS1mYXVsdCB0aGVcbiYjNDM7ICogZ3Vlc3QuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXaXRob3V0IExBU1MgaW4gQ1BVSUQsIGEgZ3Vlc3Qgd3JpdGUgbXVzdCBnZW5lcmF0ZSAjR1Agd2l0aG91dFxuJiM0MzsgKiBjaGFuZ2luZyBDUjQuIFJlc2VydmVkIGJpdHMgYXJlIG93bmVkIGJ5IEtWTSBzbyB0aGUgd3JpdGUgaXNcbiYjNDM7ICogZ3VhcmFudGVlZCB0byBleGl0IHRvIEtWTS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHU4IHZlY3RvcjtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKCF0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpO1xuJiM0MztcbiYjNDM7XHR2ZWN0b3IgPSBrdm1fYXNtX3NhZmUoXCYjMzQ7bW92ICVbY3I0XSwgJSVjcjRcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIFtjcjRdIFwmIzM0O3JcJiMzNDsoZ2V0X2NyNCgpIHwgWDg2X0NSNF9MQVNTKSk7XG4mIzQzO1x0X19HVUVTVF9BU1NFUlQodmVjdG9yID09IEdQX1ZFQ1RPUixcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtXYW50ZWQgI0dQIG9uIENSNC5MQVNTLCBnb3QgJXNcJiMzNDssIGV4X3N0cih2ZWN0b3IpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIShnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEFTUykpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9MQVNTKSk7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0dmNwdV9jbGVhcl9jcHVpZF9mZWF0dXJlKHZjcHUsIFg4Nl9GRUFUVVJFX0xBU1MpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbmluZGV4IDYwMzIyNmZmZTQzNzQuLjhiMzc1ZmVhODRkMDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIHN0YXRpYyB1NjQgY2FsY19zdXBwb3J0ZWRfY3I0X2ZlYXR1cmVfYml0cyh2b2lkKVxuIFx0XHRjcjQgfD0gWDg2X0NSNF9TTUFQO1xuIFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BLVSkpXG4gXHRcdGNyNCB8PSBYODZfQ1I0X1BLRTtcbiYjNDM7XHRpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpXG4mIzQzO1x0XHRjcjQgfD0gWDg2X0NSNF9MQVNTO1xuIFxuIFx0cmV0dXJuIGNyNDtcbiB9XG5AQCAtMTI4LDYgJiM0MzsxMzAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgY3I0KVxuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfU01FUCk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9TTUFQKTtcbiBcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjQsIHNyZWdzLCBYODZfQ1I0X1BLRSk7XG4mIzQzO1x0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfTEFTUyk7XG4gXG4gXHRmb3IgKGkgPSAzMjsgaSBcdTAwM2MgNjQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgQklUKGkpKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGVcbmluZGV4IDQzNDA2NTIxNWQxMjcuLjI1MmQ3NTdmYzFiMmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZVxuQEAgLTE5LDcgJiM0MzsxOSw4IEBAIFRBUkdFVFNfQ18zMkJJVF9PTkxZIDo9IGVudHJ5X2Zyb21fdm04NiB0ZXN0X3N5c2NhbGxfdmRzbyB1bndpbmRfdmRzbyBcXFxuIFx0XHRcdHRlc3RfRkNNT1YgdGVzdF9GQ09NSSB0ZXN0X0ZJU1RUUCBcXFxuIFx0XHRcdHZkc29fcmVzdG9yZXJcbiBUQVJHRVRTX0NfNjRCSVRfT05MWSA6PSBmc2dzYmFzZSBzeXNyZXRfcmlwIHN5c2NhbGxfbnVtYmVyaW5nIFxcXG4tXHRcdFx0Y29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweFxuJiM0MztcdFx0XHRjb3JydXB0X3hzdGF0ZV9oZWFkZXIgYW14IGxhbSB0ZXN0X3NoYWRvd19zdGFjayBhdnggYXB4IFxcXG4mIzQzO1x0XHRcdGxhc3NcbiAjIFNvbWUgc2VsZnRlc3RzIHJlcXVpcmUgMzJiaXQgc3VwcG9ydCBlbmFibGVkIGFsc28gb24gNjRiaXQgc3lzdGVtc1xuIFRBUkdFVFNfQ18zMkJJVF9ORUVERUQgOj0gbGR0X2dkdCBwdHJhY2Vfc3lzY2FsbFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RkM2RjOGU0MWQxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhc3MuY1xuQEAgLTAsMCAmIzQzOzEsMTk2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGxhc3MuYyAtIFRlc3QgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgZW5mb3JjZW1lbnRcbiYjNDM7ICpcbiYjNDM7ICogV2l0aCBMQVNTIGVuYWJsZWQsIGEgdXNlci1tb2RlIHJlYWQsIHdyaXRlIG9yIGluc3RydWN0aW9uIGZldGNoIGF0IGFcbiYjNDM7ICoga2VybmVsIGFkZHJlc3MgcmFpc2VzIGEgI0dQIGluc3RlYWQgb2YgdGhlICNQRiB0aGF0IFNNQVAvU01FUCB3b3VsZFxuJiM0MzsgKiBwcm9kdWNlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3Vjb250ZXh0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hlbHBlcnMuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3g4Nl82NF9fXG4mIzQzOyMgZXJyb3IgVGhpcyB0ZXN0IGlzIDY0LWJpdCBvbmx5XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsXG4mIzQzOyAqIGFkZHJlc3MgcmFpc2VzIHRoZSB2ZXJ5IHNhbWUgI0dQIGZvciBhIGRpZmZlcmVudCByZWFzb24sIHNvIHRoZVxuJiM0MzsgKiBhZGRyZXNzIGhhcyB0byBiZSBjYW5vbmljYWwgdG8gYXR0cmlidXRlIHRoZSBmYXVsdCB0byBMQVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBCaXRzIDYzOjQ3IGFyZSBhbGwgc2V0IGhlcmUsIHdoaWNoIGlzIGNhbm9uaWNhbCB3aXRoIDQtbGV2ZWwgcGFnaW5nXG4mIzQzOyAqIGFzIHdlbGwgYXMgNS1sZXZlbCBwYWdpbmcuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEtFUk5FTF9BRERSXHQweGZmZmY4MDAwMDAwMDAwMDBVTFxuJiM0MztcbiYjNDM7c3RhdGljIHNpZ2ptcF9idWYgam1wYnVmO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIsIGZhdWx0X3JpcDtcbiYjNDM7XG4mIzQzOy8qIEhhbmRsZSBTSUdTRUdWICgjR1AgYW5kICNQRikgYXMgd2VsbCBhcyBTSUdCVVMgKCNTUykgKi9cbiYjNDM7c3RhdGljIHZvaWQgZmF1bHRfaGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QgKmluZm8sIHZvaWQgKmN0eF92b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dWNvbnRleHRfdCAqY3R4ID0gKHVjb250ZXh0X3QgKiljdHhfdm9pZDtcbiYjNDM7XG4mIzQzO1x0ZmF1bHRfdHJhcG5vID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19UUkFQTk9dO1xuJiM0MztcdGZhdWx0X2VyciA9IGN0eC1cdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfRVJSXTtcbiYjNDM7XHRmYXVsdF9yaXAgPSBjdHgtXHUwMDNldWNfbWNvbnRleHQuZ3JlZ3NbUkVHX1JJUF07XG4mIzQzO1x0c2lnbG9uZ2ptcChqbXBidWYsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgZGVsaW1zW10gPSBcJiMzNDsgXFxuXCYjMzQ7O1xuJiM0MztcdHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcdGNoYXIgbGluZVs0MDk2XTtcbiYjNDM7XHRGSUxFICpjcHVpbmZvO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgdGhlIGNwdWluZm8gZmxhZyByZWZsZWN0cyB3aGV0aGVyIHRoZSBrZXJuZWwgYWN0dWFsbHlcbiYjNDM7XHQgKiBlbmFibGVkIExBU1MuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1aW5mbyA9IGZvcGVuKFwmIzM0Oy9wcm9jL2NwdWluZm9cJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghY3B1aW5mbylcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtmYWlsZWQgdG8gb3BlbiAvcHJvYy9jcHVpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFmb3VuZCBcdTAwMjZcdTAwMjYgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBjcHVpbmZvKSkge1xuJiM0MztcdFx0Y2hhciAqZmxhZztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RybmNtcChsaW5lLCBcJiMzNDtmbGFnc1wmIzM0OywgNSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1hdGNoIHdob2xlIHdvcmRzIG9ubHksIG5vdCBhIHN1YnN0cmluZyBvZiBhbm90aGVyIGZsYWcuICovXG4mIzQzO1x0XHRmb3IgKGZsYWcgPSBzdHJ0b2sobGluZSwgZGVsaW1zKTsgZmxhZzsgZmxhZyA9IHN0cnRvayhOVUxMLCBkZWxpbXMpKSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGZsYWcsIFwmIzM0O2xhc3NcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmY2xvc2UoY3B1aW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmIChmb3VuZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBDUFVJRC4oRUFYPTA3SCxFQ1g9MSk6RUFYLkxBU1NbYml0IDZdICovXG4mIzQzO1x0X19jcHVpZF9jb3VudCgweDcsIDB4MSwgZWF4LCBlYngsIGVjeCwgZWR4KTtcbiYjNDM7XHRpZiAoZWF4IFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgNikpXG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtMQVNTIGlzIHN1cHBvcnRlZCBieSB0aGUgQ1BVIGJ1dCBub3QgZW5hYmxlZCBieSB0aGUga2VybmVsXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBHZW5lcmFsIFByb3RlY3Rpb24gRmF1bHQgKHRyYXBuci5oIGlzIG5vdCBleHBvcnRlZCB0byB1YXBpKSAqL1xuJiM0MzsjZGVmaW5lIFg4Nl9UUkFQX0dQXHQxM1xuJiM0MztcbiYjNDM7LyogQSBMQVNTIHZpb2xhdGlvbiByYWlzZXMgYSAjR1Agd2l0aCBhIG51bGwgZXJyb3IgY29kZS4gKi9cbiYjNDM7c3RhdGljIGJvb2wgaXNfbGFzc192aW9sYXRpb24odm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYXVsdF90cmFwbm8gPT0gWDg2X1RSQVBfR1AgXHUwMDI2XHUwMDI2ICFmYXVsdF9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3JlYWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChzaWdzZXRqbXAoam1wYnVmLCAxKSA9PSAwKSB7XG4mIzQzO1x0XHQqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilLRVJORUxfQUREUjtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDt0aGUgcmVhZCBkaWQgbm90IGZhdWx0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSxcbiYjNDM7XHRcdFx0IFwmIzM0O3RoZSByZWFkIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3dyaXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xuJiM0MztcdFx0Kih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopS0VSTkVMX0FERFIgPSAweDFhNTU7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCYjMzQ7dGhlIHdyaXRlIGRpZCBub3QgZmF1bHRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChpc19sYXNzX3Zpb2xhdGlvbigpLFxuJiM0MztcdFx0XHQgXCYjMzQ7dGhlIHdyaXRlIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFVzZSBpbmxpbmUgYXNtIHJhdGhlciB0aGFuIGEgY2FsbCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcjogYSBkaXJlY3RcbiYjNDM7ICogJiMzOTtjYWxsIHJlbDMyJiMzOTsgY2Fubm90IHJlYWNoIGEga2VybmVsIGFkZHJlc3MsIGFuZCBsZXR0aW5nIHRoZSBjb21waWxlciBsb3dlclxuJiM0MzsgKiB0aGUgaW5kaXJlY3QgYnJhbmNoIHJpc2tzIHJvdXRpbmcgaXQgdGhyb3VnaCBhIHRodW5rLCBvciBlbGlkaW5nIGl0XG4mIzQzOyAqIGFsdG9nZXRoZXIsIGVpdGhlciBvZiB3aGljaCB3b3VsZCBzdG9wIHRlc3RpbmcgdGhlIGZldGNoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZG9fZmV0Y2godW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtjYWxsIColW2ZuXVwmIzM0O1xuJiM0MztcdFx0ICAgICAgOiA6IFtmbl0gXCYjMzQ7clwmIzM0OyAoYWRkcilcbiYjNDM7XHRcdCAgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmF4XCYjMzQ7LCBcJiMzNDtyY3hcJiMzNDssIFwmIzM0O3JkeFwmIzM0OywgXCYjMzQ7cnNpXCYjMzQ7LCBcJiMzNDtyZGlcJiMzNDssXG4mIzQzO1x0XHRcdFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LCBcJiMzNDtyMTFcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF9mZXRjaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHtcbiYjNDM7XHRcdGRvX2ZldGNoKEtFUk5FTF9BRERSKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRXhlY3V0aW9uIHJlc3VtZWQgYXQgYW4gdW5rbm93biBwb2ludCB3aXRoIGFuIHVuZGVmaW5lZFxuJiM0MztcdFx0ICogcmVnaXN0ZXIgc3RhdGUsIHNvIGRvbiYjMzk7dCB0cnkgdG8gcnVuIHRoZSByZXN0IG9mIHRoZSB0ZXN0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3RoZSBmZXRjaCByZXR1cm5lZCB3aXRob3V0IGZhdWx0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQnJhbmNoIGluc3RydWN0aW9ucyBkbyBub3QgY2hlY2sgdGhlaXIgdGFyZ2V0IGFnYWluc3QgTEFTUy4gVGhlXG4mIzQzO1x0ICogdmlvbGF0aW9uIGhhcHBlbnMgd2hlbiB0aGUgdGFyZ2V0IGFkZHJlc3MgaXMgdXNlZCB0byBmZXRjaCB0aGVcbiYjNDM7XHQgKiBuZXh0IGluc3RydWN0aW9uLCBzbyB0aGUgZmF1bHQgbXVzdCBiZSByZXBvcnRlZCBhdCB0aGUgdGFyZ2V0XG4mIzQzO1x0ICogcmF0aGVyIHRoYW4gYXQgdGhlIGJyYW5jaC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmF1bHRfcmlwICE9IEtFUk5FTF9BRERSKSB7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCYjMzQ7dGhlIGZldGNoIGZhdWx0ZWQgYXQgUklQIDB4JWx4IGluc3RlYWQgb2YgMHglbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgZmF1bHRfcmlwLCAodW5zaWduZWQgbG9uZylLRVJORUxfQUREUik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXG4mIzQzO1x0XHRcdCBcJiMzNDt0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBUT1RBTF9URVNUUyAzXG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpc19sYXNzX2FjdGl2ZSgpKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TEFTUyBpcyBub3QgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oVE9UQUxfVEVTVFMpO1xuJiM0MztcbiYjNDM7XHRzZXRoYW5kbGVyKFNJR1NFR1YsIGZhdWx0X2hhbmRsZXIsIDApO1xuJiM0MztcdC8qIE9ubHkgdG8gcmVwb3J0IGEgI1NTOyBMQVNTIHNob3VsZG4mIzM5O3QgY2F1c2Ugb25lIGhlcmUuICovXG4mIzQzO1x0c2V0aGFuZGxlcihTSUdCVVMsIGZhdWx0X2hhbmRsZXIsIDApO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBY2Nlc3NpbmcgdGhlIGtlcm5lbCBhZGRyZXNzIDB4JWx4IGZyb20gdXNlcnNwYWNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgICh1bnNpZ25lZCBsb25nKUtFUk5FTF9BRERSKTtcbiYjNDM7XHR0ZXN0X2tlcm5lbF9yZWFkKCk7XG4mIzQzO1x0dGVzdF9rZXJuZWxfd3JpdGUoKTtcbiYjNDM7XHR0ZXN0X2tlcm5lbF9mZXRjaCgpO1xuJiM0MztcbiYjNDM7XHRjbGVhcmhhbmRsZXIoU0lHQlVTKTtcbiYjNDM7XHRjbGVhcmhhbmRsZXIoU0lHU0VHVik7XG4mIzQzO1xuJiM0MztcdGtzZnRfZmluaXNoZWQoKTtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O1g4Nl9TR1gmIzM0OywKICAgICYjMzQ7WDg2X1NHWF9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bXhfaXNfbGFzc192aW9sYXRpb24mIzM0OywKICAgICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX2ludnBjaWQmIzM0OywKICAgICYjMzQ7dm14X2dldF91bnRhZ2dlZF9hZGRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNGIxODVkNzA5YTA2YWY3ODhmZDdkYTgxZjhmNjhkYjMzNjg4NjA2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwMjoxNTozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IGUyMTNjOWFlM2UzMDEuLmE4MmIyMDI4MWYzMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaApAQCAtMTQ2LDYgJiM0MzsxNDYsNyBAQCBLVk1fWDg2X09QKGNvbXBsZXRlX2VtdWxhdGVkX21zcikKIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7CiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChpc19sYXNzX3Zpb2xhdGlvbikKIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYWtlX3ByaXZhdGUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyODM4NDc2MTlmZjg4Li5kMjE4MWE4MDVhY2U0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE3MjcsNiAmIzQzOzE3MjcsOCBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCXVuc2lnbmVkIGxvbmcgKCp2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIAlndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJYm9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAl2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVAogCWludCAoKmdtZW1fbWFrZV9wcml2YXRlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKaW5kZXggOWU5Y2Y2NTM4YTk2ZS4uYzRkYmQwMGY1ZTRlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKQEAgLTEwMjksNiAmIzQzOzEwMjksNyBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpCiAJCUYoU000KSwKIAkJRihBVlhfVk5OSSksCiAJCUYoQVZYNTEyX0JGMTYpLAomIzQzOwkJWDg2XzY0X0YoTEFTUyksCiAJCUYoQ01QQ0NYQUREKSwKIAkJRihGWlJNKSwKIAkJRihGU1JTKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCmluZGV4IDgwNzFiMzcyZDIzM2UuLjljYmZkZTY0OTA2NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpAQCAtNjcyLDcgJiM0Mzs2NzIsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJICAgIChmbGFncyAmYW1wOyBYODZFTVVMX0ZfV1JJVEUpKQogCQkJZ290byBiYWQ7CiAJCS8qIHVucmVhZGFibGUgY29kZSBzZWdtZW50ICovCi0JCWlmICghKGZsYWdzICZhbXA7IFg4NkVNVUxfRl9GRVRDSCkgJmFtcDsmYW1wOyAoZGVzYy50eXBlICZhbXA7IDgpICZhbXA7JmFtcDsgIShkZXNjLnR5cGUgJmFtcDsgMikpCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0JSQU5DSCkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZGVzYy50eXBlICZhbXA7IDgpICZhbXA7JmFtcDsgIShkZXNjLnR5cGUgJmFtcDsgMikpCiAJCQlnb3RvIGJhZDsKIAkJbGltID0gZGVzY19saW1pdF9zY2FsZWQoJmFtcDtkZXNjKTsKIAkJaWYgKCEoZGVzYy50eXBlICZhbXA7IDgpICZhbXA7JmFtcDsgKGRlc2MudHlwZSAmYW1wOyA0KSkgewpAQCAtNjkyLDYgJiM0Mzs2OTMsMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19saW5lYXJpemUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCX0KIAkJYnJlYWs7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBMQVNTIGFuZCBjYW5vbmljYWxpdHkgY2hlY2tzIGdlbmVyYXRlIHRoZSBzYW1lIGZhdWx0IGFuZAomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBvcmRlciBpcyBub3QgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQuIEFsc28sCiYjNDM7CSAqIHRoZSBTRE0gZG9lc24mIzM5O3QgcHJpb3JpdGl6ZSBMQVNTIHZpb2xhdGlvbnMgYWdhaW5zdAomIzQzOwkgKiBhbGlnbm1lbnQtY2hlY2sgZmF1bHRzLCBzbyBhbnkgb3JkZXIgaXMgbGVnYWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4dC0mZ3Q7b3BzLSZndDtpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsYSwgc2l6ZSwgZmxhZ3MpKQomIzQzOwkJZ290byBiYWQ7CiYjNDM7CiAJaWYgKGxhICZhbXA7IChpbnNuX2FsaWdubWVudChjdHh0LCBzaXplKSAtIDEpKQogCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKQEAgLTcyMyw3ICYjNDM7NzM0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXNzaWduX2VpcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdWxvbmcgZHN0KQogCWlmIChjdHh0LSZndDtvcF9ieXRlcyAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpCiAJCWFkZHIuZWEgPSBkc3QgJmFtcDsgKCgxVUwgJmx0OyZsdDsgKGN0eHQtJmd0O29wX2J5dGVzICZsdDsmbHQ7IDMpKSAtIDEpOwogCXJjID0gX19saW5lYXJpemUoY3R4dCwgYWRkciwgJmFtcDttYXhfc2l6ZSwgMSwgY3R4dC0mZ3Q7bW9kZSwgJmFtcDtsaW5lYXIsCi0JCQkgWDg2RU1VTF9GX0ZFVENIKTsKJiM0MzsJCQkgWDg2RU1VTF9GX0JSQU5DSCk7CiAJaWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpCiAJCWN0eHQtJmd0O19laXAgPSBhZGRyLmVhOwogCXJldHVybiByYzsKQEAgLTc5OCw2ICYjNDM7ODA5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgam1wX3JlbChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHJlbCkKIHN0YXRpYyBpbnQgbGluZWFyX3JlYWRfc3lzdGVtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCB1bG9uZyBsaW5lYXIsCiAJCQkgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXplKQogewomIzQzOwlpZiAoY3R4dC0mZ3Q7b3BzLSZndDtpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsIFg4NkVNVUxfRl9JTVBMSUNJVCkpCiYjNDM7CQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKJiM0MzsKIAlyZXR1cm4gY3R4dC0mZ3Q7b3BzLSZndDtyZWFkX3N0ZChjdHh0LCBsaW5lYXIsIGRhdGEsIHNpemUsICZhbXA7Y3R4dC0mZ3Q7ZXhjZXB0aW9uLCB0cnVlKTsKIH0KIApAQCAtODA1LDYgJiM0Mzs4MTksMTAgQEAgc3RhdGljIGludCBsaW5lYXJfd3JpdGVfc3lzdGVtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJICAgICAgIHVsb25nIGxpbmVhciwgdm9pZCAqZGF0YSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKJiM0MzsJaWYgKGN0eHQtJmd0O29wcy0mZ3Q7aXNfbGFzc192aW9sYXRpb24oY3R4dCwgbGluZWFyLCBzaXplLAomIzQzOwkJCQkJIFg4NkVNVUxfRl9JTVBMSUNJVCB8IFg4NkVNVUxfRl9XUklURSkpCiYjNDM7CQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKJiM0MzsKIAlyZXR1cm4gY3R4dC0mZ3Q7b3BzLSZndDt3cml0ZV9zdGQoY3R4dCwgbGluZWFyLCBkYXRhLCBzaXplLCAmYW1wO2N0eHQtJmd0O2V4Y2VwdGlvbiwgdHJ1ZSk7CiB9CiAKQEAgLTI1NzIsMTIgJiM0MzsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWJhc2UgfD0gKCh1NjQpYmFzZTMpICZsdDsmbHQ7IDMyOwogI2VuZGlmCi0JciA9IG9wcy0mZ3Q7cmVhZF9zdGQoY3R4dCwgYmFzZSAmIzQzOyAxMDIsICZhbXA7aW9fYml0bWFwX3B0ciwgMiwgTlVMTCwgdHJ1ZSk7CiYjNDM7CXIgPSBsaW5lYXJfcmVhZF9zeXN0ZW0oY3R4dCwgYmFzZSAmIzQzOyAxMDIsICZhbXA7aW9fYml0bWFwX3B0ciwgMik7CiAJaWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIGZhbHNlOwotCWlmIChpb19iaXRtYXBfcHRyICYjNDM7IHBvcnQvOCAmZ3Q7IGRlc2NfbGltaXRfc2NhbGVkKCZhbXA7dHJfc2VnKSkKJiM0MzsJaWYgKGlvX2JpdG1hcF9wdHIgJiM0MzsgcG9ydC84ICYjNDM7IDEgJmd0OyBkZXNjX2xpbWl0X3NjYWxlZCgmYW1wO3RyX3NlZykpCiAJCXJldHVybiBmYWxzZTsKLQlyID0gb3BzLSZndDtyZWFkX3N0ZChjdHh0LCBiYXNlICYjNDM7IGlvX2JpdG1hcF9wdHIgJiM0MzsgcG9ydC84LCAmYW1wO3Blcm0sIDIsIE5VTEwsIHRydWUpOwomIzQzOwlyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgJiM0MzsgaW9fYml0bWFwX3B0ciAmIzQzOyBwb3J0LzgsICZhbXA7cGVybSwgMik7CiAJaWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIGZhbHNlOwogCWlmICgocGVybSAmZ3Q7Jmd0OyBiaXRfaWR4KSAmYW1wOyBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li5mMTM2ZDNkMGJhNDIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMTA1LDYgJiM0MzsxMDUsNyBAQCBzdHJ1Y3QgeDg2X2luc3RydWN0aW9uX2luZm8gewogI2RlZmluZSBYODZFTVVMX0ZfSU5WTFBHCQlCSVQoMykKICNkZWZpbmUgWDg2RU1VTF9GX01TUgkJCUJJVCg0KQogI2RlZmluZSBYODZFTVVMX0ZfRFRfTE9BRAkJQklUKDUpCiYjNDM7I2RlZmluZSBYODZFTVVMX0ZfQlJBTkNICQlCSVQoNikKIAogc3RydWN0IHg4Nl9lbXVsYXRlX29wcyB7CiAJdm9pZCAoKnZtX2J1Z2dlZCkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpOwpAQCAtMjQ4LDcgJiM0MzsyNDksOCBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHsKIAogCWd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLAogCQkJCSAgIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KJiM0MzsJYm9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgZ3ZhX3QgYWRkciwKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAlib29sICgqaXNfY2Fub25pY2FsX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLAogCQkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmgKaW5kZXggNDQ3ZjBlYzNlNjNlNC4uYmU4NjIxNjk1YzQxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmVncy5oCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBzdGF0aWNfYXNzZXJ0KCEoS1ZNX1BPU1NJQkxFX0NSMF9HVUVTVF9CSVRTICZhbXA7IFg4Nl9DUjBfUERQVFJfQklUUykpOwogCQkJICB8IFg4Nl9DUjRfT1NYU0FWRSB8IFg4Nl9DUjRfU01FUCB8IFg4Nl9DUjRfRlNHU0JBU0UgXAogCQkJICB8IFg4Nl9DUjRfT1NYTU1FWENQVCB8IFg4Nl9DUjRfTEE1NyB8IFg4Nl9DUjRfVk1YRSBcCiAJCQkgIHwgWDg2X0NSNF9TTUFQIHwgWDg2X0NSNF9QS0UgfCBYODZfQ1I0X1VNSVAgXAotCQkJICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUKSkKJiM0MzsJCQkgIHwgWDg2X0NSNF9MQU1fU1VQIHwgWDg2X0NSNF9DRVQgfCBYODZfQ1I0X0xBU1MpKQogCiAjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpCiAKQEAgLTQwNSw2ICYjNDM7NDA1LDggQEAgc3RhdGljIGlubGluZSBib29sIF9fa3ZtX2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQogCQlfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9QQ0lERTsgICAgICAgXAogCWlmICghX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfTEFNKSkgICAgICAgICAgIFwKIAkJX19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFNX1NVUDsgICAgIFwKJiM0MzsJaWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQVNTKSkgICAgICAgICAgXAomIzQzOwkJX19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFTUzsgICAgICAgIFwKIAlpZiAoIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX1NIU1RLKSAmYW1wOyZhbXA7ICAgICAgIFwKIAkgICAgIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0lCVCkpICAgICAgICAgICBcCiAJCV9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0NFVDsgICAgICAgICBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCmluZGV4IDBmZjMyMzBmZDk1ZTguLjM1ODBhYWRhOGQyYzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC0xMDMxLDYgJiM0MzsxMDMxLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkudmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yID0ga3ZtX3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvciwKIAogCS5nZXRfdW50YWdnZWRfYWRkciA9IHZteF9nZXRfdW50YWdnZWRfYWRkciwKJiM0MzsJLmlzX2xhc3NfdmlvbGF0aW9uID0gdm14X2lzX2xhc3NfdmlvbGF0aW9uLAogCiAJLm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSwKIAkudmNwdV9tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX2lvY3RsKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNTI5OSwxMSAmIzQzOzUyOTksMTIgQEAgaW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiwKIAkJCSpyZXQgPSBvZmY7CiAKIAkJKnJldCA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqcmV0LCAwKTsKLQkJLyogTG9uZyBtb2RlOiAjR1AoMCkvI1NTKDApIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiBhCi0JCSAqIG5vbi1jYW5vbmljYWwgZm9ybS4gVGhpcyBpcyB0aGUgb25seSBjaGVjayBvbiB0aGUgbWVtb3J5Ci0JCSAqIGRlc3RpbmF0aW9uIGZvciBsb25nIG1vZGUhCiYjNDM7CQkvKgomIzQzOwkJICogTG9uZyBtb2RlOiAjR1AoMCkvI1NTKDApIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiBhCiYjNDM7CQkgKiBub24tY2Fub25pY2FsIGZvcm0sIG9yIGlmIHRoZSBhY2Nlc3MgdmlvbGF0ZXMgTEFTUy4KIAkJICovCi0JCWV4biA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpyZXQsIHZjcHUsIDApOwomIzQzOwkJZXhuID0gaXNfbm9uY2Fub25pY2FsX2FkZHJlc3MoKnJldCwgdmNwdSwgMCkgfHwKJiM0MzsJCSAgICAgIHZteF9pc19sYXNzX3Zpb2xhdGlvbih2Y3B1LCAqcmV0LCBsZW4sIDApOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFdoZW4gbm90IGluIGxvbmcgbW9kZSwgdGhlIHZpcnR1YWwvbGluZWFyIGFkZHJlc3MgaXMKQEAgLTYxMDgsNyAmIzQzOzYxMDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodHlwZSAhPSBWTVhfVlBJRF9FWFRFTlRfQUxMX0NPTlRFWFQgJmFtcDsmYW1wOyAhb3BlcmFuZC52cGlkKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9JTlZBTElEX09QRVJBTkRfVE9fSU5WRVBUX0lOVlZQSUQpOwogCi0JLyogTEFNIGRvZXNuJiMzOTt0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCIGludmFsaWRhdGlvbi4gKi8KJiM0MzsJLyogTEFNIGFuZCBMQVNTIGRvbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovCiAJaWYgKHR5cGUgPT0gVk1YX1ZQSURfRVhURU5UX0lORElWSURVQUxfQUREUiAmYW1wOyZhbXA7CiAJICAgIGlzX25vbmNhbm9uaWNhbF9pbnZscGdfYWRkcmVzcyhvcGVyYW5kLmdsYSwgdmNwdSkpCiAJCXJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guYwppbmRleCA3NzFjNzVhNTgzNDM2Li40YWMzMDVlZDZkZWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvc2d4LmMKQEAgLTM5LDcgJiM0MzszOSw4IEBAIHN0YXRpYyBpbnQgc2d4X2dldF9lbmNsc19ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJZmF1bHQgPSB0cnVlOwogCX0gZWxzZSBpZiAobGlrZWx5KGlzXzY0X2JpdF9tb2RlKHZjcHUpKSkgewogCQkqZ3ZhID0gdm14X2dldF91bnRhZ2dlZF9hZGRyKHZjcHUsICpndmEsIDApOwotCQlmYXVsdCA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpndmEsIHZjcHUsIDApOwomIzQzOwkJZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fAomIzQzOwkJCXZteF9pc19sYXNzX3Zpb2xhdGlvbih2Y3B1LCAqZ3ZhLCBzaXplLCAwKTsKIAl9IGVsc2UgewogCQkqZ3ZhICZhbXA7PSAweGZmZmZmZmZmOwogCQlmYXVsdCA9IChzLnVudXNhYmxlKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggZTNiZmU2YWNhMWEwZS4uMzA4MjE5NTkwNmRhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC03ODg1LDYgJiM0Mzs3ODg1LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeV9pbmRleCh2Y3B1LCAweDcsIDEpOwogCWNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFNX1NVUCwgICAgZWF4LCBmZWF0dXJlX2JpdChMQU0pKTsKJiM0MzsJY3I0X2ZpeGVkMV91cGRhdGUoWDg2X0NSNF9MQVNTLCAgICAgICBlYXgsIGZlYXR1cmVfYml0KExBU1MpKTsKIAogI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlCiB9CkBAIC04NTcxLDcgJiM0Mzs4NTcyLDggQEAgZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MKIAlpbnQgbGFtX2JpdDsKIAl1bnNpZ25lZCBsb25nIGNyM19iaXRzOwogCi0JaWYgKGZsYWdzICZhbXA7IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfSU1QTElDSVQgfCBYODZFTVVMX0ZfSU5WTFBHKSkKJiM0MzsJaWYgKGZsYWdzICZhbXA7IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHwKJiM0MzsJCSAgICAgWDg2RU1VTF9GX0lOVkxQRykpCiAJCXJldHVybiBndmE7CiAKIAlpZiAoIWlzXzY0X2JpdF9tb2RlKHZjcHUpKQpAQCAtODYwMyw2ICYjNDM7ODYwNSw1MyBAQCBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncwogCXJldHVybiAoc2lnbl9leHRlbmQ2NChndmEsIGxhbV9iaXQpICZhbXA7IH5CSVRfVUxMKDYzKSkgfCAoZ3ZhICZhbXA7IEJJVF9VTEwoNjMpKTsKIH0KIAomIzQzO2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAomIzQzOwkJCSAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBib29sIGlzX3N1cGVydmlzb3JfYWRkcmVzcyA9ICEhKGd2YSAmYW1wOyBCSVRfVUxMKDYzKSk7CiYjNDM7CWNvbnN0IGJvb2wgaW1wbGljaXRfc3VwZXJ2aXNvciA9ICEhKGZsYWdzICZhbXA7IFg4NkVNVUxfRl9JTVBMSUNJVCk7CiYjNDM7CWNvbnN0IGJvb2wgZmV0Y2ggPSAhIShmbGFncyAmYW1wOyBYODZFTVVMX0ZfRkVUQ0gpOwomIzQzOwomIzQzOwlpZiAoIWt2bV9pc19jcjRfYml0X3NldCh2Y3B1LCBYODZfQ1I0X0xBU1MpIHx8ICFpc19sb25nX21vZGUodmNwdSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElOVkxQRyBpc24mIzM5O3Qgc3ViamVjdCB0byBMQVNTLCBlLmcuIHRvIGFsbG93IGludmFsaWRhdGluZyB1c2Vyc3BhY2UKJiM0MzsJICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbiYjMzk7dCBzdWJqZWN0CiYjNDM7CSAqIHRvIExBU1MgaW4gb3JkZXIgdG8gc2ltcGxpZnkgZmFyIGNvbnRyb2wgdHJhbnNmZXJzICh0aGUgc3Vic2VxdWVudAomIzQzOwkgKiBmZXRjaCB3aWxsIGVuZm9yY2UgTEFTUyBhcyBhcHByb3ByaWF0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgKFg4NkVNVUxfRl9CUkFOQ0ggfCBYODZFTVVMX0ZfSU5WTFBHKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yICZhbXA7JmFtcDsgdm14X2dldF9jcGwodmNwdSkgPT0gMykKJiM0MzsJCXJldHVybiBpc19zdXBlcnZpc29yX2FkZHJlc3M7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIExBU1MgZW5mb3JjZW1lbnQgZm9yIHN1cGVydmlzb3ItbW9kZSBkYXRhIGFjY2Vzc2VzIGRlcGVuZHMgb24gU01BUAomIzQzOwkgKiBiZWluZyBlbmFibGVkLCBhbmQgbGlrZSBTTUFQIGlnbm9yZXMgZXhwbGljaXQgYWNjZXNzZXMgaWYgUkZMQUdTLkFDPTEuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWZldGNoKSB7CiYjNDM7CQlpZiAoIWt2bV9pc19jcjRfYml0X3NldCh2Y3B1LCBYODZfQ1I0X1NNQVApKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmICghaW1wbGljaXRfc3VwZXJ2aXNvciAmYW1wOyZhbXA7IChrdm1fZ2V0X3JmbGFncyh2Y3B1KSAmYW1wOyBYODZfRUZMQUdTX0FDKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGVudGlyZSBhY2Nlc3MgbXVzdCBiZSBpbiB0aGUgYXBwcm9wcmlhdGUgYWRkcmVzcyBzcGFjZS4gIE5vdGUsCiYjNDM7CSAqIGlmIExBTSBpcyBzdXBwb3J0ZWQsIEBndmEgaGFzIGFscmVhZHkgYmVlbiB1bnRhZ2dlZCwgc28gYmFycmluZyBhCiYjNDM7CSAqIG1hc3NpdmUgYXJjaGl0ZWN0dXJlIGNoYW5nZSB0byBleHBhbmQgdGhlIGNhbm9uaWNhbCBhZGRyZXNzIHJhbmdlLAomIzQzOwkgKiBpdCYjMzk7cyBpbXBvc3NpYmxlIGZvciBhIHVzZXIgYWNjZXNzIHRvIHN0cmFkZGxlIHVzZXIgYW5kIHN1cGVydmlzb3IKJiM0MzsJICogYWRkcmVzcyBzcGFjZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2l6ZSAmYW1wOyZhbXA7ICEoKGd2YSAmIzQzOyBzaXplIC0gMSkgJmFtcDsgQklUX1VMTCg2MykpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAhaXNfc3VwZXJ2aXNvcl9hZGRyZXNzOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm14X2hhbmRsZV9pbnRlbF9wdF9pbnRyKHZvaWQpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCmluZGV4IGRjODUxN2YxNWJjNDYuLjQzZGY3MjVhNzdmMGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaApAQCAtMzk3LDYgJiM0MzszOTcsOSBAQCB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7CiAKJiM0Mztib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsKIHZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBkOTRiNTkxNDBjNDUyLi5hNmVhNzM2ZmQ0OGZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC01ODAwLDYgJiM0Mzs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJCQkJICAgICAgIGFkZHIsIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm1feDg2X2NhbGwoaXNfbGFzc192aW9sYXRpb24pKGVtdWxfdG9fdmNwdShjdHh0KSwgYWRkciwgc2l6ZSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGVtdWxhdG9yX2lzX2Nhbm9uaWNhbF9hZGRyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJCSAgICAgICBndmFfdCBhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC01ODU5LDYgJiM0Mzs1ODY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7CiAJLmdldF94Y3IgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfeGNyLAogCS5zZXRfeGNyICAgICAgICAgICAgID0gZW11bGF0b3Jfc2V0X3hjciwKIAkuZ2V0X3VudGFnZ2VkX2FkZHIgICA9IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyLAomIzQzOwkuaXNfbGFzc192aW9sYXRpb24gICA9IGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uLAogCS5pc19jYW5vbmljYWxfYWRkciAgID0gZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIsCiAJLnBhZ2VfYWRkcmVzc192YWxpZCAgPSBlbXVsYXRvcl9wYWdlX2FkZHJlc3NfdmFsaWQsCiB9OwpAQCAtMTA3NDUsNyAmIzQzOzEwNzUyLDcgQEAgaW50IGt2bV9oYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgZ3ZhX3QgZ3ZhKQogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6CiAJCS8qCi0JCSAqIExBTSBkb2VzbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQgomIzQzOwkJICogTEFNIGFuZCBMQVNTIGRvbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQgogCQkgKiBpbnZhbGlkYXRpb24uCiAJCSAqLwogCQlpZiAoKCFwY2lkX2VuYWJsZWQgJmFtcDsmYW1wOyAob3BlcmFuZC5wY2lkICE9IDApKSB8fApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggMDAxMjMxNjlhMTkwYS4uODZmYTkzZTBmNmMwOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC05MSw2ICYjNDM7OTEsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fY2xvY2tfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9idXNsb2NrX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9sYXNzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L21vbml0b3JfbXdhaXRfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvbXNyc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAppbmRleCA2ZTZmNzAwMzU1MDhhLi5mNDI1MTY2MTc0ZjlmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCkBAIC03OSw2ICYjNDM7NzksNyBAQCBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3Rvcik7CiAjZGVmaW5lIFg4Nl9DUjRfU01FUAkJKDF1bCAmbHQ7Jmx0OyAyMCkKICNkZWZpbmUgWDg2X0NSNF9TTUFQCQkoMXVsICZsdDsmbHQ7IDIxKQogI2RlZmluZSBYODZfQ1I0X1BLRQkJKDF1bCAmbHQ7Jmx0OyAyMikKJiM0MzsjZGVmaW5lIFg4Nl9DUjRfTEFTUwkJKDF1bCAmbHQ7Jmx0OyAyNykKIAogc3RydWN0IHhzdGF0ZV9oZWFkZXIgewogCXU2NAkJCQl4c3RhdGVfYnY7CkBAIC0xOTUsNiAmIzQzOzE5Niw3IEBAIHN0cnVjdCBrdm1feDg2X2NwdV9mZWF0dXJlIHsKICNkZWZpbmUJWDg2X0ZFQVRVUkVfU1BFQ19DVFJMCQlLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyNikKICNkZWZpbmUJWDg2X0ZFQVRVUkVfQVJDSF9DQVBBQklMSVRJRVMJS1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVEWCwgMjkpCiAjZGVmaW5lCVg4Nl9GRUFUVVJFX1BLUwkJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHg3LCAwLCBFQ1gsIDMxKQomIzQzOyNkZWZpbmUJWDg2X0ZFQVRVUkVfTEFTUwkJS1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDEsIEVBWCwgNikKICNkZWZpbmUJWDg2X0ZFQVRVUkVfWFRJTEVDRkcJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE3KQogI2RlZmluZQlYODZfRkVBVFVSRV9YVElMRURBVEEJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE4KQogI2RlZmluZQlYODZfRkVBVFVSRV9YU0FWRVMJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAxLCBFQVgsIDMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2xhc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43YzVjZmEyNGMyYmRkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSw1NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSB0ZXN0CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogT25seSB0ZXN0IHRoYXQgdGhlIGd1ZXN0IGNhbiYjMzk7dCBzZXQgQ1I0LkxBU1Mgd2hlbiBMQVNTIGlzbiYjMzk7dAomIzQzOyAqIGVudW1lcmF0ZWQgaW4gdGhlIGd1ZXN0JiMzOTtzIENQVUlELiAgS1ZNJiMzOTtzIGhhbmRsaW5nIG9mIENSNC5MQVNTIHZpYQomIzQzOyAqIEtWTV9TRVRfU1JFR1MgaXMgY292ZXJlZCBieSBzZXRfc3JlZ3NfdGVzdC4KJiM0MzsgKgomIzQzOyAqIFRlc3RpbmcgTEFTUyBlbmZvcmNlbWVudCByZXF1aXJlcyBydW5uaW5nIHN1cGVydmlzb3IgY29kZSBpbiB0aGUKJiM0MzsgKiB1cHBlciBoYWxmIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCB3aGljaCB0aGUgS1ZNIHNlbGZ0ZXN0cyBmcmFtZXdvcmsKJiM0MzsgKiBkb2VzbiYjMzk7dCBzdXBwb3J0LiBFbmFibGluZyBDUjQuTEFTUyBpbiB0aGUgY3VycmVudCBmcmFtZXdvcmsgd291bGQKJiM0MzsgKiBtYWtlIHRoZSBuZXh0IGluc3RydWN0aW9uIGZldGNoIGEgdmlvbGF0aW9uIGFuZCB0cmlwbGUtZmF1bHQgdGhlCiYjNDM7ICogZ3Vlc3QuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdpdGhvdXQgTEFTUyBpbiBDUFVJRCwgYSBndWVzdCB3cml0ZSBtdXN0IGdlbmVyYXRlICNHUCB3aXRob3V0CiYjNDM7ICogY2hhbmdpbmcgQ1I0LiBSZXNlcnZlZCBiaXRzIGFyZSBvd25lZCBieSBLVk0gc28gdGhlIHdyaXRlIGlzCiYjNDM7ICogZ3VhcmFudGVlZCB0byBleGl0IHRvIEtWTS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpCiYjNDM7ewomIzQzOwl1OCB2ZWN0b3I7CiYjNDM7CiYjNDM7CUdVRVNUX0FTU0VSVCghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTsKJiM0MzsKJiM0MzsJdmVjdG9yID0ga3ZtX2FzbV9zYWZlKCYjMzQ7bW92ICVbY3I0XSwgJSVjcjQmIzM0OywKJiM0MzsJCQkgICAgICBbY3I0XSAmIzM0O3ImIzM0OyhnZXRfY3I0KCkgfCBYODZfQ1I0X0xBU1MpKTsKJiM0MzsJX19HVUVTVF9BU1NFUlQodmVjdG9yID09IEdQX1ZFQ1RPUiwKJiM0MzsJCSAgICAgICAmIzM0O1dhbnRlZCAjR1Agb24gQ1I0LkxBU1MsIGdvdCAlcyYjMzQ7LCBleF9zdHIodmVjdG9yKSk7CiYjNDM7CUdVRVNUX0FTU0VSVCghKGdldF9jcjQoKSAmYW1wOyBYODZfQ1I0X0xBU1MpKTsKJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X2NvZGUpOwomIzQzOwl2Y3B1X2NsZWFyX2NwdWlkX2ZlYXR1cmUodmNwdSwgWDg2X0ZFQVRVUkVfTEFTUyk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwomIzQzOwlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYwppbmRleCA2MDMyMjZmZmU0Mzc0Li44YjM3NWZlYTg0ZDAzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBzdGF0aWMgdTY0IGNhbGNfc3VwcG9ydGVkX2NyNF9mZWF0dXJlX2JpdHModm9pZCkKIAkJY3I0IHw9IFg4Nl9DUjRfU01BUDsKIAlpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEtVKSkKIAkJY3I0IHw9IFg4Nl9DUjRfUEtFOwomIzQzOwlpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpCiYjNDM7CQljcjQgfD0gWDg2X0NSNF9MQVNTOwogCiAJcmV0dXJuIGNyNDsKIH0KQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNCkKIAlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9TTUVQKTsKIAlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9TTUFQKTsKIAlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9QS0UpOwomIzQzOwlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9MQVNTKTsKIAogCWZvciAoaSA9IDMyOyBpICZsdDsgNjQ7IGkmIzQzOyYjNDM7KQogCQlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgQklUKGkpKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZQppbmRleCA0MzQwNjUyMTVkMTI3Li4yNTJkNzU3ZmMxYjJkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlCkBAIC0xOSw3ICYjNDM7MTksOCBAQCBUQVJHRVRTX0NfMzJCSVRfT05MWSA6PSBlbnRyeV9mcm9tX3ZtODYgdGVzdF9zeXNjYWxsX3Zkc28gdW53aW5kX3Zkc28gXAogCQkJdGVzdF9GQ01PViB0ZXN0X0ZDT01JIHRlc3RfRklTVFRQIFwKIAkJCXZkc29fcmVzdG9yZXIKIFRBUkdFVFNfQ182NEJJVF9PTkxZIDo9IGZzZ3NiYXNlIHN5c3JldF9yaXAgc3lzY2FsbF9udW1iZXJpbmcgXAotCQkJY29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweAomIzQzOwkJCWNvcnJ1cHRfeHN0YXRlX2hlYWRlciBhbXggbGFtIHRlc3Rfc2hhZG93X3N0YWNrIGF2eCBhcHggXAomIzQzOwkJCWxhc3MKICMgU29tZSBzZWxmdGVzdHMgcmVxdWlyZSAzMmJpdCBzdXBwb3J0IGVuYWJsZWQgYWxzbyBvbiA2NGJpdCBzeXN0ZW1zCiBUQVJHRVRTX0NfMzJCSVRfTkVFREVEIDo9IGxkdF9nZHQgcHRyYWNlX3N5c2NhbGwKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RkM2RjOGU0MWQxZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMKQEAgLTAsMCAmIzQzOzEsMTk2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIGxhc3MuYyAtIFRlc3QgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgZW5mb3JjZW1lbnQKJiM0MzsgKgomIzQzOyAqIFdpdGggTEFTUyBlbmFibGVkLCBhIHVzZXItbW9kZSByZWFkLCB3cml0ZSBvciBpbnN0cnVjdGlvbiBmZXRjaCBhdCBhCiYjNDM7ICoga2VybmVsIGFkZHJlc3MgcmFpc2VzIGEgI0dQIGluc3RlYWQgb2YgdGhlICNQRiB0aGF0IFNNQVAvU01FUCB3b3VsZAomIzQzOyAqIHByb2R1Y2UuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtzZXRqbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91Y29udGV4dC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGVscGVycy5oJiMzNDsKJiM0MzsKJiM0MzsjaWZuZGVmIF9feDg2XzY0X18KJiM0MzsjIGVycm9yIFRoaXMgdGVzdCBpcyA2NC1iaXQgb25seQomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qCiYjNDM7ICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsCiYjNDM7ICogYWRkcmVzcyByYWlzZXMgdGhlIHZlcnkgc2FtZSAjR1AgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiwgc28gdGhlCiYjNDM7ICogYWRkcmVzcyBoYXMgdG8gYmUgY2Fub25pY2FsIHRvIGF0dHJpYnV0ZSB0aGUgZmF1bHQgdG8gTEFTUy4KJiM0MzsgKgomIzQzOyAqIEJpdHMgNjM6NDcgYXJlIGFsbCBzZXQgaGVyZSwgd2hpY2ggaXMgY2Fub25pY2FsIHdpdGggNC1sZXZlbCBwYWdpbmcKJiM0MzsgKiBhcyB3ZWxsIGFzIDUtbGV2ZWwgcGFnaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS0VSTkVMX0FERFIJMHhmZmZmODAwMDAwMDAwMDAwVUwKJiM0MzsKJiM0MztzdGF0aWMgc2lnam1wX2J1ZiBqbXBidWY7CiYjNDM7CiYjNDM7c3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIsIGZhdWx0X3JpcDsKJiM0MzsKJiM0MzsvKiBIYW5kbGUgU0lHU0VHViAoI0dQIGFuZCAjUEYpIGFzIHdlbGwgYXMgU0lHQlVTICgjU1MpICovCiYjNDM7c3RhdGljIHZvaWQgZmF1bHRfaGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QgKmluZm8sIHZvaWQgKmN0eF92b2lkKQomIzQzO3sKJiM0MzsJdWNvbnRleHRfdCAqY3R4ID0gKHVjb250ZXh0X3QgKiljdHhfdm9pZDsKJiM0MzsKJiM0MzsJZmF1bHRfdHJhcG5vID0gY3R4LSZndDt1Y19tY29udGV4dC5ncmVnc1tSRUdfVFJBUE5PXTsKJiM0MzsJZmF1bHRfZXJyID0gY3R4LSZndDt1Y19tY29udGV4dC5ncmVnc1tSRUdfRVJSXTsKJiM0MzsJZmF1bHRfcmlwID0gY3R4LSZndDt1Y19tY29udGV4dC5ncmVnc1tSRUdfUklQXTsKJiM0MzsJc2lnbG9uZ2ptcChqbXBidWYsIDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgZGVsaW1zW10gPSAmIzM0OyBcbiYjMzQ7OwomIzQzOwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CWNoYXIgbGluZVs0MDk2XTsKJiM0MzsJRklMRSAqY3B1aW5mbzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25seSB0aGUgY3B1aW5mbyBmbGFnIHJlZmxlY3RzIHdoZXRoZXIgdGhlIGtlcm5lbCBhY3R1YWxseQomIzQzOwkgKiBlbmFibGVkIExBU1MuCiYjNDM7CSAqLwomIzQzOwljcHVpbmZvID0gZm9wZW4oJiMzNDsvcHJvYy9jcHVpbmZvJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFjcHVpbmZvKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7ZmFpbGVkIHRvIG9wZW4gL3Byb2MvY3B1aW5mb1xuJiMzNDspOwomIzQzOwomIzQzOwl3aGlsZSAoIWZvdW5kICZhbXA7JmFtcDsgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBjcHVpbmZvKSkgewomIzQzOwkJY2hhciAqZmxhZzsKJiM0MzsKJiM0MzsJCWlmIChzdHJuY21wKGxpbmUsICYjMzQ7ZmxhZ3MmIzM0OywgNSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBNYXRjaCB3aG9sZSB3b3JkcyBvbmx5LCBub3QgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBmbGFnLiAqLwomIzQzOwkJZm9yIChmbGFnID0gc3RydG9rKGxpbmUsIGRlbGltcyk7IGZsYWc7IGZsYWcgPSBzdHJ0b2soTlVMTCwgZGVsaW1zKSkgewomIzQzOwkJCWlmICghc3RyY21wKGZsYWcsICYjMzQ7bGFzcyYjMzQ7KSkgewomIzQzOwkJCQlmb3VuZCA9IHRydWU7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmY2xvc2UoY3B1aW5mbyk7CiYjNDM7CiYjNDM7CWlmIChmb3VuZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBDaGVjayBDUFVJRC4oRUFYPTA3SCxFQ1g9MSk6RUFYLkxBU1NbYml0IDZdICovCiYjNDM7CV9fY3B1aWRfY291bnQoMHg3LCAweDEsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CiYjNDM7CWlmIChlYXggJmFtcDsgKDEgJmx0OyZsdDsgNikpCiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0xBU1MgaXMgc3VwcG9ydGVkIGJ5IHRoZSBDUFUgYnV0IG5vdCBlbmFibGVkIGJ5IHRoZSBrZXJuZWxcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHZW5lcmFsIFByb3RlY3Rpb24gRmF1bHQgKHRyYXBuci5oIGlzIG5vdCBleHBvcnRlZCB0byB1YXBpKSAqLwomIzQzOyNkZWZpbmUgWDg2X1RSQVBfR1AJMTMKJiM0MzsKJiM0MzsvKiBBIExBU1MgdmlvbGF0aW9uIHJhaXNlcyBhICNHUCB3aXRoIGEgbnVsbCBlcnJvciBjb2RlLiAqLwomIzQzO3N0YXRpYyBib29sIGlzX2xhc3NfdmlvbGF0aW9uKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmF1bHRfdHJhcG5vID09IFg4Nl9UUkFQX0dQICZhbXA7JmFtcDsgIWZhdWx0X2VycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfcmVhZCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHsKJiM0MzsJCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUtFUk5FTF9BRERSOwomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7dGhlIHJlYWQgZGlkIG5vdCBmYXVsdFxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSwKJiM0MzsJCQkgJiMzNDt0aGUgcmVhZCBmYXVsdGVkIHdpdGggdHJhcD0lbGQsIGVycm9yPTB4JWx4XG4mIzM0OywKJiM0MzsJCQkgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF93cml0ZSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHsKJiM0MzsJCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUtFUk5FTF9BRERSID0gMHgxYTU1OwomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7dGhlIHdyaXRlIGRpZCBub3QgZmF1bHRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksCiYjNDM7CQkJICYjMzQ7dGhlIHdyaXRlIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcbiYjMzQ7LAomIzQzOwkJCSBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVXNlIGlubGluZSBhc20gcmF0aGVyIHRoYW4gYSBjYWxsIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyOiBhIGRpcmVjdAomIzQzOyAqICYjMzk7Y2FsbCByZWwzMiYjMzk7IGNhbm5vdCByZWFjaCBhIGtlcm5lbCBhZGRyZXNzLCBhbmQgbGV0dGluZyB0aGUgY29tcGlsZXIgbG93ZXIKJiM0MzsgKiB0aGUgaW5kaXJlY3QgYnJhbmNoIHJpc2tzIHJvdXRpbmcgaXQgdGhyb3VnaCBhIHRodW5rLCBvciBlbGlkaW5nIGl0CiYjNDM7ICogYWx0b2dldGhlciwgZWl0aGVyIG9mIHdoaWNoIHdvdWxkIHN0b3AgdGVzdGluZyB0aGUgZmV0Y2guCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZG9fZmV0Y2godW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0O2NhbGwgKiVbZm5dJiMzNDsKJiM0MzsJCSAgICAgIDogOiBbZm5dICYjMzQ7ciYjMzQ7IChhZGRyKQomIzQzOwkJICAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmF4JiMzNDssICYjMzQ7cmN4JiMzNDssICYjMzQ7cmR4JiMzNDssICYjMzQ7cnNpJiMzNDssICYjMzQ7cmRpJiMzNDssCiYjNDM7CQkJJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssICYjMzQ7cjExJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF9mZXRjaCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHsKJiM0MzsJCWRvX2ZldGNoKEtFUk5FTF9BRERSKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFeGVjdXRpb24gcmVzdW1lZCBhdCBhbiB1bmtub3duIHBvaW50IHdpdGggYW4gdW5kZWZpbmVkCiYjNDM7CQkgKiByZWdpc3RlciBzdGF0ZSwgc28gZG9uJiMzOTt0IHRyeSB0byBydW4gdGhlIHJlc3Qgb2YgdGhlIHRlc3RzLgomIzQzOwkJICovCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDt0aGUgZmV0Y2ggcmV0dXJuZWQgd2l0aG91dCBmYXVsdGluZ1xuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJyYW5jaCBpbnN0cnVjdGlvbnMgZG8gbm90IGNoZWNrIHRoZWlyIHRhcmdldCBhZ2FpbnN0IExBU1MuIFRoZQomIzQzOwkgKiB2aW9sYXRpb24gaGFwcGVucyB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBpcyB1c2VkIHRvIGZldGNoIHRoZQomIzQzOwkgKiBuZXh0IGluc3RydWN0aW9uLCBzbyB0aGUgZmF1bHQgbXVzdCBiZSByZXBvcnRlZCBhdCB0aGUgdGFyZ2V0CiYjNDM7CSAqIHJhdGhlciB0aGFuIGF0IHRoZSBicmFuY2guCiYjNDM7CSAqLwomIzQzOwlpZiAoZmF1bHRfcmlwICE9IEtFUk5FTF9BRERSKSB7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDt0aGUgZmV0Y2ggZmF1bHRlZCBhdCBSSVAgMHglbHggaW5zdGVhZCBvZiAweCVseFxuJiMzNDssCiYjNDM7CQkJCSAgICAgIGZhdWx0X3JpcCwgKHVuc2lnbmVkIGxvbmcpS0VSTkVMX0FERFIpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSwKJiM0MzsJCQkgJiMzNDt0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxuJiMzNDssCiYjNDM7CQkJIGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBUT1RBTF9URVNUUyAzCiYjNDM7CiYjNDM7aW50IG1haW4odm9pZCkKJiM0Mzt7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CiYjNDM7CWlmICghaXNfbGFzc19hY3RpdmUoKSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TEFTUyBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlrc2Z0X3NldF9wbGFuKFRPVEFMX1RFU1RTKTsKJiM0MzsKJiM0MzsJc2V0aGFuZGxlcihTSUdTRUdWLCBmYXVsdF9oYW5kbGVyLCAwKTsKJiM0MzsJLyogT25seSB0byByZXBvcnQgYSAjU1M7IExBU1Mgc2hvdWxkbiYjMzk7dCBjYXVzZSBvbmUgaGVyZS4gKi8KJiM0MzsJc2V0aGFuZGxlcihTSUdCVVMsIGZhdWx0X2hhbmRsZXIsIDApOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O0FjY2Vzc2luZyB0aGUga2VybmVsIGFkZHJlc3MgMHglbHggZnJvbSB1c2Vyc3BhY2VcbiYjMzQ7LAomIzQzOwkJICAgICAgICh1bnNpZ25lZCBsb25nKUtFUk5FTF9BRERSKTsKJiM0MzsJdGVzdF9rZXJuZWxfcmVhZCgpOwomIzQzOwl0ZXN0X2tlcm5lbF93cml0ZSgpOwomIzQzOwl0ZXN0X2tlcm5lbF9mZXRjaCgpOwomIzQzOwomIzQzOwljbGVhcmhhbmRsZXIoU0lHQlVTKTsKJiM0MzsJY2xlYXJoYW5kbGVyKFNJR1NFR1YpOwomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMQVNTIFN1cHBvcnQgaW4gS1ZNOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGJyaW5naW5nIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIHN1cHBvcnQgaW50byBLVk0gb24geDg2LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IEtWTSBoYW5kbGVzIGFkZHJlc3Mgc3BhY2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIHNwcmF3bGluZyBhY3Jvc3MgYSBwcmV0dHkgZXh0ZW5zaXZlIHJhbmdlIG9mIGZpbGVzLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gbG9naWMuIFdlJiMzOTtyZSB0YWxraW5nIGhlYWRlciBmaWxlcywgdGhlIENQVUlEIGhhbmRsaW5nLCB0aGUgZW11bGF0b3IsIHJlZ2lzdGVyIGhhbmRsaW5nLCBhbmQgVk1YLXNwZWNpZmljIGNvZGUg4oCTIGV2ZW4gdGhlIHNlbGZ0ZXN0cyBhcmUgaW52b2x2ZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgYWRkZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExBU1MgZmVhdHVyZSBpcyBiZWluZyBpbnRyb2R1Y2VkIGFuZCB3aGF0IHRoZSBlbXVsYXRvciBkb2VzIHdoZW4gdGhlcmUmIzM5O3MgYW4gTEFTUyB2aW9sYXRpb24uIEl0IGxvb2tzIGxpa2UgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYCBpcyBhZGRpbmcgdGhlIGBYODZfNjRfRihMQVNTKWAgQ1BVIGZlYXR1cmUgZmxhZywgd2hpY2ggaXMgdGhlIGJhc2VsaW5lLiAKCkkmIzM5O20gemVyb2luZyBpbiBvbiBmdW5jdGlvbnMgbGlrZSBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYCwgYF9fa3ZtX2lzX3ZhbGlkX2NyNGAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGhhbmRsZV9pbnZ2cGlkYCwgYHNneF9nZXRfZW5jbHNfZ3ZhYCwgYG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlYCwgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAsIGFuZCB0aGUgbmV3IGZ1bmN0aW9ucyBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBhbmQgYGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uYCBhcyB0aGUga2V5IGFyZWFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBhbmQgYWxzbyB3aGF0IGBrdm1faGFuZGxlX2ludnBjaWRgIGRvZXMgaGVyZS4KClRoZSBrZXkgcXVlc3Rpb25zIGhlcmUgYXJlOgoKMS4gIEhvdyBpcyB0aGUgTEFTUyBmZWF0dXJlIGV4cG9zZWQgdG8gdGhlIGd1ZXN0PwoyLiAgSG93IGFyZSBMQVNTIHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYW5kIGhhbmRsZWQ/CjMuICBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZW11bGF0b3IgYW5kIHRoZSBWTVggY29kZSBpbiBkZWFsaW5nIHdpdGggTEFTUyBpc3N1ZXM/CjQuICBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIFNHWD8KCkl0IGxvb2tzIGxpa2UgdGhlIGBjdHh0LSZndDtvcHMtJmd0O2lzX2xhc3NfdmlvbGF0aW9uYCBmbGFnIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgZW11bGF0aW9uIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgc3RydWN0dXJlLCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhlIGJ1aWxkIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcy4gVGhlIGZpbGUgbG9jYXRpb25zIGluZGljYXRlIHRoYXQgYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgbmVlZGVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHRoZSBvbmx5IGNyaXRpY2FsIGRlcGVuZGVuY3ksIG9yIGlmIG1vcmUgZ3JhbnVsYXIgS1ZNIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHNob3VsZCBjb25maXJtIHRoYXQsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZ2V0IGFsbCB0aGUgcGllY2VzIGZvciBpdCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLCBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AsIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9zZ3guY2AuIEdpdmVuIHRoYXQgdGhlc2UgZmlsZXMgbGl2ZSB3aXRoaW4gdGhlIGB2bXhgIGRpcmVjdG9yeSwgdGhhdCBzY3JlYW1zIEludGVsIFZNWCBtb2RpZmljYXRpb25zLCByaWdodD8gVGhlcmVmb3JlLCBgS1ZNX0lOVEVMYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBBbmQgc2luY2UgYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgIGlzIGluY2x1ZGVkLCBJJiMzOTtkIHdhZ2VyIGBYODZfU0dYX0tWTWAgd2lsbCBiZSBuZWVkZWQgdG9vLiBCdXQgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGJ5IGV4YW1pbmluZyBgYXJjaC94ODYva3ZtL3ZteC9zZ3guY2AgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWDg2X1NHWF9LVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk0vVk1YL1NHWCBJbnRlZ3JhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIEtWTS9WTVgvU0dYIGludGVncmF0aW9uIHNwZWNpZmljYWxseS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBwcmFjdGljYWwgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGZpbGVzIGFyZSBidWlsdCBhbmQgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGFyY2gveDg2L2t2bS92bXhgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyBgc2d4LmNgIGlzIGhhbmRsZWQgaW4gdGhhdCBtYWtlIGZpbGUuIEtub3dpbmcgaG93IHRoZSBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIHRoYXQgZmlsZSBpcyBsaWtlbHkgdG8gcmV2ZWFsIGEgbG90IGFib3V0IGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZNWCBjb21wb25lbnRzIGFuZCB0aGUgb3ZlcmFsbCBrZXJuZWwgYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NneFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlPTE3PWt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTE5LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIwOmt2bS1pbnRlbC0kKENPTkZJR19YODZfU0dYX0tWTSlcdCYjNDM7PSB2bXgvc2d4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMS1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLgoKKipEaXZpbmcgaW50byB0aGUgWDg2X1NHWF9LVk0gQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIHRvIGNvbXBpbGUgYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgLCBJIGRlZmluaXRlbHkgbmVlZCB0aGUgYFg4Nl9TR1hfS1ZNYCBkZWZpbmUuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIHdoZXJlIGVsc2UgbWlnaHQgdGhpcyBjb21lIGludG8gcGxheT8gV2hlcmUgaXMgaXQgdXNlZCBvciByZWxhdGVkPyBMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoYXQgZmlsZSBvZnRlbiBoYW5kbGVzIHRoZSBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHNvIGl0IG1pZ2h0IGdpdmUgbWUgc29tZSBjbHVlcyBhcyB0byB0aGUgY29udGV4dCBhbmQgZmxvdyBhcm91bmQgdGhlc2UgU0dYIGludGVyYWN0aW9ucy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgcmVsYXRlZCBlbXVsYXRpb24gbG9naWMsIG9yIHBlcmhhcHMgY2hlY2tzIHRoYXQgYXJlIGdvdmVybmVkIGJ5IHRoYXQgZGVmaW5lLiBJdCYjMzk7cyBhIHNlbnNpYmxlIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT02PWluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS03LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjg6a3ZtLXlcdFx0XHQmIzQzOz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtOS1cdFx0XHQgICBtdHJyLm8gZGVidWdmcy5vIG1tdS9tbXUubyBtbXUvcGFnZV90cmFjay5vIG1tdS9zcHRlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBDb3JlIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgYXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmxhZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCYjMzk7cyBzZWUsIHdoaWNoIG9uZXMgc3RhbmQgb3V0IGFzIGNydWNpYWw/IEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBsaXN0OgoKKiAgIGBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwc2Ag4oCTIFRoaXMgc291bmRzIGNyaXRpY2FsIGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudC4KKiAgIFRoZW4gYSBidW5jaCBvZiAqc3RhdGljKiBmdW5jdGlvbnMsIHRob3NlIHRoYXQgc2VlbSBpbnRlcm5hbGx5LXNjb3BlZCwgbGlrZTogYF9fbGluZWFyaXplYCwgYGFzc2lnbl9laXBgLCBgbGluZWFyX3JlYWRfc3lzdGVtYCwgYGxpbmVhcl93cml0ZV9zeXN0ZW1gLCBgZW11bGF0b3JfaW9fcG9ydF9hY2Nlc3NfYWxsb3dlZGAsIGBfX2t2bV9pc192YWxpZF9jcjRgLCBgaGFuZGxlX2ludnZwaWRgLCBgc2d4X2dldF9lbmNsc19ndmFgLCBgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGVgIGFuZCBgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25gLgoqICAgQW5kIHRoZW4gc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvbmVzIHRvbywgbGlrZSBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCwgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBrdm1faGFuZGxlX2ludnBjaWRgCgpOb3csIGxldCYjMzk7cyBmaWx0ZXIgb3V0IGFsbCB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCBsZWF2ZXMgbWUgd2l0aCB0aGUgZm9sbG93aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGNhbGxlZCBmcm9tIGVsc2V3aGVyZToKCiogICBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgCiogICBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AKKiAgIGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgCiogICBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYAoqICAgYGt2bV9oYW5kbGVfaW52cGNpZGAKCk9rYXksIEkgdGhpbmsgYGdldF92bXhfbWVtX2FkZHJlc3NgIGlzIHdvcnRoIGZvY3VzaW5nIG9uLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgaXQgaW4gdGhlIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MjIzPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfdHJpcGxlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyMzQtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUyMzU6aW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTIzNi1cdFx0XHR1MzIgdm14X2luc3RydWN0aW9uX2luZm8sIGJvb2wgd3IsIGludCBsZW4sIGd2YV90ICpyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MzYxPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTM2ODpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MzY5LVx0XHRcdFx0dm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3MjUtXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU3MjY6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNy1cdFx0XHRcdFx0aW5zdHJfaW5mbywgdHJ1ZSwgbGVuLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTc2Mj1zdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3OTktXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4MDA6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTgwMS1cdFx0XHRcdFx0aW5zdHJfaW5mbywgZmFsc2UsIGxlbiwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NTM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY3LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTY4Olx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY5LVx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5ODE9c3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwMTUtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjAxNjpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE3LVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjA2MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwOTgtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjA5OTpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTAwLVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU2MQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiB0aGUgVk1YIE1lbW9yeSBBZGRyZXNzKioKCk9rYXksIHNvIGBnZXRfdm14X21lbV9hZGRyZXNzYCBzZWVtcyBsaWtlIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS4gVGhhdCYjMzk7cyBhIHNvbGlkIGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIE5vdywgd2hlcmUgZG9lcyBpdCBmaXQgd2l0aGluIHRoZSBicm9hZGVyIFZNWCBjb250ZXh0PyBSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBmdW5jdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSYjMzk7cyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHBvdGVudGlhbCBtZW1vcnkgYWRkcmVzcyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9pc19sYXNzX3Zpb2xhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTcwPWd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwNy1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODYwODpib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwOS1cdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk5MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgS1ZNIEludnBjaWQgSXNzdWVzKioKCk9rYXksIHNvIGB2bXhfaXNfbGFzc192aW9sYXRpb25gIGlzIG9uIG15IHJhZGFyIGFzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiDigJMgdGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE5vdywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRpdmUgaW50byBga3ZtX2hhbmRsZV9pbnZwY2lkYCBiZWNhdXNlIGl0JiMzOTtzIHRoZSB1c3VhbCBzdXNwZWN0IGludm9sdmVkIGluIG1hbmFnaW5nIHRoZSBJbnZhbGlkYXRlIFByb2Nlc3MtQ29udGV4dCBJZGVudGlmaWVyIChJTlZQQ0lEKSBpbnN0cnVjdGlvbiB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIHN1YnRsZSwgZXhwbG9pdGFibGUgZmxhdy4gV2UgbmVlZCB0byBjaGVjayBldmVyeXRoaW5nOiB0aGUgaGFuZGxpbmcgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWTVggY29kZSwgYW55IHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyBpbnZhbGlkIG9yIG1hbGljaW91cyBpbnB1dCBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX2ludnBjaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTEwNzI2PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faGFuZGxlX21lbW9yeV9mYWlsdXJlKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyNy1cbmFyY2gveDg2L2t2bS94ODYuYzoxMDcyODppbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3Mjkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDgwNC19XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA4MDU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfaW52cGNpZCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTA3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk0mIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gS1ZNLiBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nIGBrdm1faGFuZGxlX2ludnBjaWRgLCBhbmQgSSB0aGluayB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHRvIGV4cGxvcmUgZnVydGhlci4gSXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgVExCIGludmFsaWRhdGlvbiwgYW5kLCBieSBleHRlbnNpb24sIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHNlZSB3aGF0IGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgIGlzIGFsbCBhYm91dC4gVW5kZXJzdGFuZGluZyBob3cgYWRkcmVzc2VzIGFyZSBoYW5kbGVkLCBhbmQgcGFydGljdWxhcmx5IHRoZSB1bnRhZ2dlZCBvbmVzLCBpcyBsaWtlbHkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZWVwZXIgd29ya2luZ3Mgb2YgdGhlIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ3kuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9nZXRfdW50YWdnZWRfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTU2PXZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU2OS0gKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODU3MDpndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncylcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlRoaW5raW5nIFRocm91Z2ggS1ZNIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IEtWTSBpbml0aWFsaXphdGlvbiwgYW5kIGEga2V5IGFyZWEgaXMgaG93IHdlIGhhbmRsZSBtZW1vcnkgYWRkcmVzc2VzLiBJJiMzOTt2ZSBiZWVuIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25zIGludm9sdmVkLiBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNhbmRpZGF0ZSBpbiB0aGlzIGFyZWE7IGl0JiMzOTtzIGdvdCBhIHNvbGlkIHJlcHV0YXRpb24uIE5vdywgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjYXBhYmlsaXRpZXMgd2UmIzM5O3JlIHNldHRpbmcgdXAgZm9yIHRoZSB2aXJ0dWFsIENQVXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgdGllcyBpbnRvIGNyaXRpY2FsIGFzcGVjdHMgb2YgZ3Vlc3QtaG9zdCBpbnRlcmFjdGlvbnMgYW5kIHBlcmZvcm1hbmNlLiBOZWVkIHRvIGVuc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyB0aG9zZSBDUFUgY2FwYWJpbGl0aWVzIHNldCBjb3JyZWN0bHkgZnJvbSB0aGUgZ2V0IGdvISBJJiMzOTtsbCBkaXZlIGludG8gYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYCBhbmQgc2VlIHdoYXQgaXQgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2luaXRpYWxpemVfY3B1X2NhcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vY3B1aWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vY3B1aWQuYz03MzM9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtODM1LVxuYXJjaC94ODYva3ZtL2NwdWlkLmM6ODM2OnZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTgzNy17XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTMxMy19XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxMzE0OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwcyk7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xMzE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBGdXp6aW5nIFRhcmdldHMqKgoKUmlnaHQsIHNvIGBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwc2AgaXMgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIHBoYXNlLiBUaGF0IG1lYW5zIGl04oCZcyBwcmV0dHkgbXVjaCBhIG9uZS1zaG90IGRlYWwuIERvZXNuJiMzOTt0IHNlZW0gbGlrZSB0aGUgYmVzdCBwbGFjZSB0byBzaW5rIHJlc291cmNlcyBpbnRvIGZ1enppbmcuIEEgc2luZ2xlIGNhbGwgZHVyaW5nIGluaXRpYWxpemF0aW9uIHVzdWFsbHkgaXNuJiMzOTt0IGZydWl0ZnVsIGZvciB0aGUgdHlwZSBvZiBpdGVyYXRpdmUgdGVzdGluZyBJJiMzOTttIGFmdGVyLCB3aGVyZSBJIGNhbiByZXBlYXRlZGx5IGhhbW1lciB0aGUgZnVuY3Rpb24gd2l0aCBkaWZmZXJlbnQgaW5wdXRzIGFuZCBzZWUgaG93IGl0IHJlc3BvbmRzLgoKSW5zdGVhZCwgbGV0JiMzOTtzIHBpdm90IGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWV0aGluZyBlbHNlLiBOb3csIHdoZXJlIHRvIGxvb2s/IEFscmlnaHQsIEkmIzM5O3ZlIGdvdCBpdC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBzb3VuZHMgYSBiaXQgbW9yZSBwcm9taXNpbmcgZm9yIGEgcG90ZW50aWFsIGZ1enppbmcgY2FtcGFpZ24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uJiMzOTtzIGRvaW5nIGFuZCBpZiBpdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IGNoYXJhY3RlcmlzdGljcyB0byBiZW5lZml0IGZyb20gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTU3OTM9c3RhdGljIGd2YV90IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODAyLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4MDM6c3RhdGljIGJvb2wgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTgwNC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODY3LVx0LmdldF91bnRhZ2dlZF9hZGRyICAgPSBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcixcbmFyY2gveDg2L2t2bS94ODYuYzo1ODY4Olx0LmlzX2xhc3NfdmlvbGF0aW9uICAgPSBlbXVsYXRvcl9pc19sYXNzX3Zpb2xhdGlvbixcbmFyY2gveDg2L2t2bS94ODYuYy01ODY5LVx0LmlzX2Nhbm9uaWNhbF9hZGRyICAgPSBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBTdGF0aWMgTGFuZHNjYXBlKioKCk9rYXksIHRoaXMgZmVlbHMgc3RhdGljLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2bXhfaXNfbGFzc192aW9sYXRpb25gLCBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AsIGBrdm1faGFuZGxlX2ludnBjaWRgLCBhbmQgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAuIFRoZXkgYXJlIHRoZSBsaWtlbHkgY3VscHJpdHMuCgpCZWZvcmUgSSBkaWcgaW50byB0aG9zZSBkZWVwbHksIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhlIGJyb2FkZXIgY29udGV4dC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIHNlZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgWDg2X1NHWF9LVk1gIGZsYWdnZWQuIEludGVyZXN0aW5nLiBCZXlvbmQgdGhvc2UsIGFyZSB0aGVyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcz8gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoZSBgWDg2X1NHWF9LVk1gIGRlcGVuZGVuY2llcyBpbW1lZGlhdGVseS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWDg2X1NHWF9LVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ1MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYFg4Nl9TR1hfS1ZNYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgYFg4Nl9TR1hfS1ZNYCBjb25jZXB0LiBNeSB1bmRlcnN0YW5kaW5nLCBiYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgdGVsbHMgbWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIGZhc2NpbmF0aW5nIGludGVyc2VjdGlvbi4gSSBpbW1lZGlhdGVseSBzdGFydCBwaWN0dXJpbmcgdGhlIGNvbXBsZXhpdGllcyBvZiBTZWN1cmUgZW5jbGF2ZXMgKFNHWCkgcnVubmluZyB3aXRoaW4gYSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGVudmlyb25tZW50LCBvbiBhbiB4ODYgYXJjaGl0ZWN0dXJlLiBUaGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBpbW1lbnNlLCBhbmQgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgYXJlIGVxdWFsbHkgaW50ZXJlc3RpbmcuIEkgaW1hZ2luZSB0aGVyZSYjMzk7cyBhIGRlbGljYXRlIGRhbmNlIGhhcHBlbmluZyBiZXR3ZWVuIGhhcmR3YXJlLWxldmVsIHNlY3VyaXR5IGZlYXR1cmVzIGFuZCB0aGUgdmlydHVhbGl6YXRpb24gbGF5ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZW5jbGF2ZXMgYXJlIGlzb2xhdGVkLCBob3cgdGhleSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBWTSwgYW5kIHdoYXQgdGhlIGF0dGFjayBzdXJmYWNlIGxvb2tzIGxpa2UgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXN0ZWQgdmlydHVhbGl6YXRpb24/IE9yIGEgbW9yZSBpbnRlZ3JhdGVkIGFwcHJvYWNoPyBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3MgdGhleSYjMzk7cmUgbGlrZWx5IGZvY3VzaW5nIG9uPyBMYXRlbmN5LCB0aHJvdWdocHV0LCBlbmNsYXZlIHN3aXRjaGluZyBvdmVyaGVhZC4uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZGVlcCBkaXZlLiBJJiMzOTttIGV4Y2l0ZWQgdG8gc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgWDg2X1NHWF9LVk1cbiAxMjM6XHRcdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuIDEyNDpcdFx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbiAxMjU6XHRcdGhlbHBcbiAxMjY6XHRcbiAxMjc6XHRcdCAgRW5hYmxlcyBLVk0gZ3Vlc3RzIHRvIGNyZWF0ZSBTR1ggZW5jbGF2ZXMuXG4gMTI4Olx0XG4gMTI5Olx0XHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXCYjMzQ7cmF3XCYjMzQ7IHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFkZGluZyBBbm90aGVyIFBpZWNlIHRvIHRoZSBQdXp6bGU6IFg4Nl9TR1gqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSByZXF1aXJlbWVudHMsIHRoZSBhcmNoaXRlY3R1cmUuLi4gYW5kIGl0JiMzOTtzIGJlY29taW5nIGNsZWFyIHRoYXQgYFg4Nl9TR1hgIGlzIGFsc28gYSBjcml0aWNhbCBjb21wb25lbnQgaGVyZS4gSSYjMzk7dmUgYmVlbiB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGN1cnJlbnQgZGVzaWduIGFuZCBpdCYjMzk7cyBhcHBhcmVudCB0aGF0IHdlIGNhbiYjMzk7dCBpZ25vcmUgdGhlIG5lZWQgZm9yIHNlY3VyZSBlbmNsYXZlcy4gV2l0aG91dCBgWDg2X1NHWGAsIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgd2UmIzM5O3JlIGxlYXZpbmcgYSBnYXBpbmcgaG9sZSBpbiBvdXIgc2VjdXJpdHkgbW9kZWwuIFdlIG1pZ2h0IGJlIGFibGUgdG8gZmluZCBhIHN1aXRhYmxlIHNvZnR3YXJlLWJhc2VkIGFsdGVybmF0aXZlLCBidXQgdGhhdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uLiBXZSBtdXN0IGhhdmUgYSBoYXJkd2FyZS1lbmZvcmNlZCB0cnVzdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gVGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogaW5jbHVkaW5nIHRoaXMgYXJlIGp1c3QgdG9vIHNpZ25pZmljYW50IHRvIG92ZXJsb29rLiBXZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMsIHRoZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGV4aXN0aW5nIGNvZGUgYmFzZSwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgd2l0aCB0aGlzIGluIG1pbmQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbmljZS10by1oYXZlOyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGZvciB0aGUga2luZCBvZiByb2J1c3Qgc2VjdXJpdHkgZ3VhcmFudGVlcyB3ZSYjMzk7cmUgYWltaW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFg4Nl9TR1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTgyNT1lbmRjaG9pY2VcbmFyY2gveDg2L0tjb25maWctMTgyNi1cbmFyY2gveDg2L0tjb25maWc6MTgyNzpjb25maWcgWDg2X1NHWFxuYXJjaC94ODYvS2NvbmZpZy0xODI4LVx0Ym9vbCBcJiMzNDtTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGBYODZfU0dYYCBkZXBlbmRlbmNpZXM6CgoqKk15IE1lbnRhbCBDaGVja2xpc3QgZm9yIHg4Nl9TR1ggRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bnBhY2sgdGhlIHdvcmxkIG9mIGRlcGVuZGVuY2llcyBmb3IgYFg4Nl9TR1hgLiBGaXJzdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgaGFyZHdhcmUgbGV2ZWwuIFdlJiMzOTtyZSB0YWxraW5nIEludGVsJiMzOTtzIGFyY2hpdGVjdHVyZSBoZXJlLCBzbyB0aGUgZmlyc3QgdGhvdWdodCBpcyB0aGUgKkNQVSBzdXBwb3J0IGl0c2VsZiouIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IGhhdmluZyBhbiB4ODYgcHJvY2Vzc29yOyBpdCBuZWVkcyB0byBiZSAqc3BlY2lmaWMqIHg4NiB3aXRoIFNHWCBlbmFibGVkLiBUaGF0IGltcGxpZXMgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwcm9jZXNzb3ImIzM5O3MgZ2VuZXJhdGlvbiBhbmQgbWljcm9hcmNoaXRlY3R1cmUgYXMgZnVuZGFtZW50YWwuIEkgc2hvdWxkIGJlIG5vdGluZyB0aGUgc3BlY2lmaWMgQ1BVIG1vZGVscyBzdXBwb3J0ZWQgYW5kIGFueSBrbm93biBsaW1pdGF0aW9ucyBvZiBlYWNoLgoKTmV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgKlNESyosIGFuZCB0aGUgYXNzb2NpYXRlZCBkcml2ZXJzIGFuZCBsaWJyYXJpZXMuIEl0JiMzOTtzIG5vdCBqdXN0IHRoZSBTREsmIzM5O3MgcHJlc2VuY2UsIGJ1dCBpdHMgdmVyc2lvbi4gSG93IGRvZXMgdGhpcyBwYXJ0aWN1bGFyIHZlcnNpb24gaW50ZXJhY3Qgd2l0aCBkaWZmZXJlbnQgT1Nlcz8gV2hhdCBhYm91dCB0aGUgc3BlY2lmaWMgY29tcGlsZXIgdmVyc2lvbnMgaXQmIzM5O3MgY29tcGF0aWJsZSB3aXRoPyBJIG5lZWQgdG8ga25vdyB3aGljaCBJbnRlbCBTREsgdmVyc2lvbnMgYXJlIGFjdGl2ZWx5IG1haW50YWluZWQgYW5kIHdoaWNoIGFyZSBkZXByZWNhdGVkLiBBcmUgdGhlcmUgZGlmZmVyZW50IFNES3MgZm9yIFdpbmRvd3MsIExpbnV4LCBldGMuPyBIb3cgZG8gdGhleSBoYW5kbGUgZGlmZmVyZW5jZXMgaW4gc3lzdGVtIGNhbGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudD8KClRoZW4gdGhlICpvcGVyYXRpbmcgc3lzdGVtKiBjb21lcyBpbnRvIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIE9TZXMgdGhlIFNESyBzdXBwb3J0cyBvZmZpY2lhbGx5LCBhbmQgaG93IHRoZWlyIGtlcm5lbCB2ZXJzaW9ucyBpbXBhY3QgU0dYIGZ1bmN0aW9uYWxpdHkuIERvZXMgdGhlIE9TIHByb3ZpZGUgbmF0aXZlIHN1cHBvcnQgdGhyb3VnaCBkcml2ZXJzIG9yIGxpYnJhcmllcywgb3IgZG9lcyB0aGUgU0RLIG1hbmFnZSBhbGwgb2YgdGhhdD8gV2hhdCBhYm91dCB0aGUgKmh5cGVydmlzb3IqIGlmIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBzcGVjaWZpYyBoeXBlcnZpc29yIHZlcnNpb25zIHRoYXQgYXJlIGNvbXBhdGlibGUsIG9yIGV2ZW4gcHJlZmVycmVkLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zIHRoZXJlPwoKQW5kIHNwZWFraW5nIG9mIE9TZXMsIHRoZXJlJiMzOTtzIHRoZSAqc2VjdXJlIGVuY2xhdmUgaW5mcmFzdHJ1Y3R1cmUqIGl0c2VsZi4gVGhlIE9TLXNwZWNpZmljIGNhbGxzIHRvIGludm9rZSB0aGUgZW5jbGF2ZXMsIHRvIG1hbmFnZSB0aGVpciBtZW1vcnksIGV0Yy4gSG93IGRvZXMgdGhpcyB2YXJ5IGJldHdlZW4sIHNheSwgTGludXggYW5kIFdpbmRvd3M/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiBTRUxpbnV4IG9yIEFwcEFybW9yIG9uIExpbnV4PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgYXBwbGljYXRpb24gc2VjdXJpdHkgaW4gZWFjaCBlbnZpcm9ubWVudD8KCkJleW9uZCB0aG9zZSBjb3JlIGNvbXBvbmVudHMsIEkgbmVlZCB0byBjb25zaWRlciAqc29mdHdhcmUgZGVwZW5kZW5jaWVzKi4gV2hhdCBhcmUgdGhlIGxpYnJhcmllcyB0aGF0IGFwcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGVuY2xhdmVzIHdpbGwgbmVlZD8gV2lsbCB0aGV5IGJlIGFibGUgdG8gcmVseSBvbiBzdGFuZGFyZCBsaWJyYXJpZXMsIG9yIGRvIHRoZXkgbmVlZCBzcGVjaWFsIFNHWC1hd2FyZSB2ZXJzaW9ucz8gQXJlIHRoZXJlIHRoaXJkLXBhcnR5IGxpYnJhcmllcyB0aGF0IGhhdmUgYmVlbiBoYXJkZW5lZCBmb3IgU0dYPyBXaGF0JiMzOTtzIHRoZSBlY29zeXN0ZW0gbGlrZSBmb3IgY3J5cHRvZ3JhcGhpYyBsaWJyYXJpZXMgY29tcGF0aWJsZSB3aXRoIFNHWD8gV2hhdCBhYm91dCB0aGluZ3MgbGlrZSBuZXR3b3JraW5nIG9yIGZpbGUgc3lzdGVtIGFjY2VzcyAqZnJvbSB3aXRoaW4qIHRoZSBlbmNsYXZlPyBXaGF0IGFyZSB0aGUgbGltaXRhdGlvbnM/CgpBbmQgZmluYWxseSwgKnNlY3VyaXR5Ki4gV2hhdCBhcmUgdGhlIGtub3duIHZ1bG5lcmFiaWxpdGllcyBhbmQgbWl0aWdhdGlvbnMgZm9yIHRoZXNlIGRlcGVuZGVuY2llcz8gSG93IGFyZSB1cGRhdGVzIGhhbmRsZWQgYW5kIGRpc3RyaWJ1dGVkPyBIb3cgZG9lcyB0aGUgU0dYIGF0dGVzdGF0aW9uIHByb2Nlc3MgcmVsYXRlIHRvIHRoZXNlIGRlcGVuZGVuY2llcz8gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHN5c3RlbSBhbmQgcHJvdGVjdGluZyBhZ2FpbnN0IGF0dGFja3MuIEkgbXVzdCBrbm93IHRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBhbmQgd2hhdCBtZXRob2RzIGFyZSBpbiBwbGFjZSB0byBjb3VudGVyYWN0IHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgyNTpcdGVuZGNob2ljZVxuMTgyNjpcdFxuMTgyNzpcdGNvbmZpZyBYODZfU0dYXG4xODI4Olx0XHRib29sIFwmIzM0O1NvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWClcJiMzNDtcbjE4Mjk6XHRcdGRlcGVuZHMgb24gWDg2XzY0IFx1MDAyNlx1MDAyNiBDUFVfU1VQX0lOVEVMIFx1MDAyNlx1MDAyNiBYODZfWDJBUElDXG4xODMwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbjE4MzE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbjE4MzI6XHRcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG4xODMzOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xODM0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzY2VuYXJpby4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uIEkgc2VlIGBYODZfNjRgLCBgQ1BVX1NVUF9JTlRFTGAsIGFuZCBgWDg2X1gyQVBJQ2AgbWVudGlvbmVkIGFzIHJlcXVpcmVtZW50cy4gQnV0IHdhaXQgYSBtaW51dGUsIGBYODZfNjRgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gZm9yIHN5emthbGxlciwgYW5kIGBDUFVfU1VQX0lOVEVMYCBhbmQgYFg4Nl9YMkFQSUNgIGFyZSBhbHNvIHByZXR0eSBtdWNoIHN0YW5kYXJkIG5vd2FkYXlzLiBUaGF0IG1lYW5zIHRoYXQgaWYgdGhvc2UgYXJlIGltcGxpZWQsIEkgcmVhbGx5IG9ubHkgbmVlZCB0byBtYWtlIHN1cmUgYFg4Nl9TR1hgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBzeXprYWxsZXIgY29uZmlndXJhdGlvbi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9JTlRFTGAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgbmVjZXNzYXJ5LiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKklBMzJfRkVBVF9DVEw6IE15IE1lbnRhbCBDaGVja2xpc3QqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY3VycmVudCBwcm9qZWN0IGFuZCBJIGltbWVkaWF0ZWx5IGhpdCBvbiBgSUEzMl9GRUFUX0NUTGAuIEl0JiMzOTtzIGEga2V5IHJlZ2lzdGVyLCBhbmQgbXkgbWluZCYjMzk7cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgdGhpbmcuIEkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgZmVhdHVyZXMgaXQgY29udHJvbHMg4oCTIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQsIHBvc3NpYmx5IHNvbWUgc2VjdXJpdHkgZXh0ZW5zaW9ucywgZGVmaW5pdGVseSB0aGluZ3MgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBhbmQgbWF5YmUgc29tZSBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdHMsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgQ1BVLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBhbSBJIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgQ1BVIG1vZGVsIHRvIGV2ZW4gbWFrZSB0aGlzIGEgY29uc2lkZXJhdGlvbj8gSWYgbm90LCB0aGVuIEkmIzM5O3ZlIGdvbmUgZG93biB0aGUgd3JvbmcgcGF0aCwgYW5kIEkgbmVlZCB0byBjaGVjayBteSBDUFVJRCBvdXRwdXQgYmVmb3JlIEkgd2FzdGUgYW55IG1vcmUgdGltZS4gSWYgSSAqYW0qIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgaGFyZHdhcmUsIHRoZW4gSSBuZWVkIHRvIGNhcmVmdWxseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGJpdHMgd2l0aGluIGBJQTMyX0ZFQVRfQ1RMYCBuZWVkIHNwZWNpZmljIG1hbmlwdWxhdGlvbiBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gV2hhdCBmZWF0dXJlcyBhbSBJIHRhcmdldGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgKnRob3NlKiBmZWF0dXJlcz8gV2hhdCYjMzk7cyB0aGUgcmVjb21tZW5kZWQgcG93ZXItb24gZGVmYXVsdCB2YWx1ZSwgYW5kIGlzIHRoYXQgZ29pbmcgdG8gd29yayBmb3IgbXkgcGFydGljdWxhciB1c2FnZSBzY2VuYXJpbz8gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoaXMgY29udHJvbCByZWdpc3RlciBpcyBhcHByb3ByaWF0ZWx5IHNldCB0byBtYXhpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWQgYW55IHVuYW50aWNpcGF0ZWQgYmVoYXZpb3JzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgYW55IGNoYW5nZXMgaGVyZSB3b24mIzM5O3QgY3JlYXRlIGFueSBpbmNvbXBhdGliaWxpdGllcyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLCBsaWtlIHRoZSBoeXBlcnZpc29yIG9yIEJJT1MuIEkgbmVlZCB0byByZXZpZXcgYWxsIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9uZSBtb3JlIHRpbWUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycmF0YSB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIHJlZ2lzdGVyLCBhbmQgdGhlbiBtYWtlIGEgdmVyeSBjYWxjdWxhdGVkIGRlY2lzaW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElBMzJfRkVBVF9DVEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBBcmNoYWVvbG9neTogTG9jYXRpbmcgSUEzMl9GRUFUX0NUTCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgSUEzMl9GRUFUX0NUTGAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpc24mIzM5O3QgZXhhY3RseSBhIGdyb3VuZGJyZWFraW5nIHRhc2ssIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkga25vdyBhIGZhaXIgYml0IGFib3V0IGhvdyB0aGUgS2NvbmZpZyBzeXN0ZW0gaXMgc3RydWN0dXJlZCwgYnV0IHNvbWV0aW1lcyBhIHNwZWNpZmljIHN5bWJvbCBjYW4gYmUgdHJpY2t5IHRvIHRyYWNrIGRvd24gaWYgaXQmIzM5O3MgZGVlcGx5IG5lc3RlZCwgb3IgaGlkZGVuIGJlaGluZCBzb21lIG9ic2N1cmUgZGVwZW5kZW5jeS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gbGV2ZXJhZ2UgdGhlIHBvd2VyIG9mIGBncmVwYCAob3IgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29sKS4gSSYjMzk7bGwgZXhlY3V0ZSBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBLY29uZmlnIGhpZXJhcmNoeS4gSSYjMzk7bSB0aGlua2luZyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgc2ltcGxlIGBncmVwICYjMzQ7SUEzMl9GRUFUX0NUTCYjMzQ7ICpLY29uZmlnKmAgKG9yIHdoYXRldmVyIHRoZSBhY3R1YWwgZmlsZSBleHRlbnNpb24vbmFtaW5nIGNvbnZlbnRpb24gaXMgdXNlZCkuIEkgbWlnaHQgbmVlZCB0byByZWZpbmUgdGhpcyBiYXNlZCBvbiB0aGUgcmVzdWx0cy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGludG8gYW55IGNvbW1vbiBhYmJyZXZpYXRpb25zIG9yIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiB0aGUgdGVybS4KCklmIEkgZG9uJiMzOTt0IGltbWVkaWF0ZWx5IGZpbmQgaXQsIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2guIFBlcmhhcHMgdGhlIHN5bWJvbCBpcyBkZWZpbmVkIGNvbmRpdGlvbmFsbHksIGJhc2VkIG9uIGFub3RoZXIgc3ltYm9sIG9yIGFyY2hpdGVjdHVyZS4gSW4gdGhhdCBjYXNlLCBJIG1pZ2h0IGhhdmUgdG8gZXhwYW5kIG15IHNlYXJjaCB0byBpbmNsdWRlIHJlbGV2YW50IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGxvb2sgZm9yIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMgd2hpY2ggY291bGQgcHJvdmlkZSBoaW50cy4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUgcG9zc2libGUgZGVwZW5kZW5jeSBjaGFpbnMuCgpCZXlvbmQgc2ltcGxlIHN0cmluZyBtYXRjaGluZywgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaGVzIGlmIEkgaGl0IGEgd2FsbC4gVXNpbmcgYSBLY29uZmlnIHBhcnNpbmcgdG9vbCB3b3VsZCBiZSBpZGVhbCB0byBwYXJzZSB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlbiBJIGNhbiB1c2UgdGhlIHRvb2wgdG8gcXVlcnkgdGhlIGNvbmZpZyBzeW1ib2wgZGF0YWJhc2UgYW5kIGZpbmQgaG93IGBJQTMyX0ZFQVRfQ1RMYCBpcyBkZWZpbmVkLiBUaGlzIGxldmVsIG9mIGFuYWx5c2lzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgZG93biB0aGUgc3ltYm9sIGFuZCB1bmRlcnN0YW5kIHdoZXJlIGl0cyBkZWZpbml0aW9uIGxpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUEzMl9GRUFUX0NUTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdT0yODU9Y29uZmlnIFg4Nl9ERUJVR0NUTE1TUlxuLS1cbmFyY2gveDg2L0tjb25maWcuY3B1LTI4OC1cbmFyY2gveDg2L0tjb25maWcuY3B1OjI4OTpjb25maWcgSUEzMl9GRUFUX0NUTFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMjkwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtWTSBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gYGRlZl9ib29sIHlgIG1lYW5zIHRoaXMgZmVhdHVyZSBpcyBhbHdheXMgb24sIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYFg4Nl9TR1hgLCBhbmQgYFg4Nl9TR1hfS1ZNYC4gUmlnaHQsIGdvdCBpdC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhvc2UgZnVuY3Rpb25zIEkgd2FzIGxvb2tpbmcgYXQuCgpJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGVzZTogYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGt2bV9oYW5kbGVfaW52cGNpZGAsIGFuZCBgdm14X2dldF91bnRhZ2dlZF9hZGRyYC4gSSBzaG91bGQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdGhhdCBtaWdodCBiZSBoaWRpbmcuCgpIbW0sIG9rYXksIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gc2VlaW5nIGEgZmV3IG90aGVyIGZ1bmN0aW9ucywgYnV0IHRoZXNlIGFyZSBhbGwgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBleHBvc2VkOiBgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGVgLCBgaGFuZGxlX2ludnZwaWRgLCBgc2d4X2dldF9lbmNsc19ndmFgLCBgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25gLCBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGFuZCBgZW11bGF0b3JfaW9fcG9ydF9hY2Nlc3NfYWxsb3dlZGAuIFRoZXNlIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgY29uY2VybmluZyBmcm9tIGFuIGV4dGVybmFsIGV4cGxvaXQgcGVyc3BlY3RpdmUsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVtLgoKTm93LCBhIGNydWNpYWwgcG9pbnQ6IEkgbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIGlmIGB2bXhfaXNfbGFzc192aW9sYXRpb25gIGlzIGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIG1lcmVseSBub24tc3RhdGljLiBUaGUgZXhwb3J0IHN0YXR1cyBvZiB0aGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiBkZXRlcm1pbmluZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9pc19sYXNzX3Zpb2xhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTcwPWd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwNy1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODYwODpib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwOS1cdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFRhcmdldCBmb3IgT3B0aW1pemF0aW9uKioKClJpZ2h0LCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGFyZWEgaXNuJiMzOTt0IHN0YXRpYyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgd29ydGggaW52ZXN0aWdhdGluZy4gTm9uLXN0YXRpYyBvZnRlbiBpbXBsaWVzIGR5bmFtaWMgYmVoYXZpb3IsIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiwgb3IgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcyBhbmQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbi4gSXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaHVuY2ggYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYGt2bV9oYW5kbGVfaW52cGNpZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZ28gdG8gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIHB1bGwgdXAgdGhhdCBmdW5jdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxpa2VseSBjb2RlIHBhdGhzLCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIEludnBjaWQgaW5zdHJ1Y3Rpb24sIGFuZCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBLVk0uIFRoaXMgc2hvdWxkIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCBndWlkZSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIHRoYXQmIzM5O3MgcHJvZmlsaW5nLCBjb2RlIGFuYWx5c2lzLCBvciB0YXJnZXRlZCBpbnN0cnVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9oYW5kbGVfaW52cGNpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MTA3MjY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzI3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzI4OmludCBrdm1faGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHR5cGUsIGd2YV90IGd2YSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyOS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODA0LX1cbmFyY2gveDg2L2t2bS94ODYuYzoxMDgwNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2hhbmRsZV9pbnZwY2lkKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDgwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MTIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqQ2hlY2tpbmcgS1ZNJiMzOTtzIEludGVybmFsIE1lbW9yeSBBZGRyZXNzaW5nKioKClJpZ2h0LCB0aGlzIGlzIGJlaW5nIHVzZWQgaW50ZXJuYWxseSBieSBLVk0sIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBtZW1vcnkgYWRkcmVzc2luZyBzY2hlbWUgaXMgY29ycmVjdC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gdmVyaWZ5IGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gSXQmIzM5O3MgY3J1Y2lhbCB0aGlzIGZ1bmN0aW9uIGRvZXMgZXhhY3RseSB3aGF0JiMzOTtzIGV4cGVjdGVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBhbnkgZXJyb3JzIGhlcmUgY2FuIGNhdXNlIHNlcmlvdXMgaXNzdWVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MjIzPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfdHJpcGxlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyMzQtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUyMzU6aW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTIzNi1cdFx0XHR1MzIgdm14X2luc3RydWN0aW9uX2luZm8sIGJvb2wgd3IsIGludCBsZW4sIGd2YV90ICpyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MzYxPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTM2ODpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MzY5LVx0XHRcdFx0dm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3MjUtXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU3MjY6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNy1cdFx0XHRcdFx0aW5zdHJfaW5mbywgdHJ1ZSwgbGVuLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTc2Mj1zdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3OTktXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4MDA6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTgwMS1cdFx0XHRcdFx0aW5zdHJfaW5mbywgZmFsc2UsIGxlbiwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NTM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY3LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTY4Olx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY5LVx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5ODE9c3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwMTUtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjAxNjpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE3LVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjA2MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwOTgtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjA5OTpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTAwLVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI2NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipDaGVja2luZyB0aGUgTm9uLVN0YXRpYyBBc3N1bXB0aW9uIGluIHg4NiBLVk0vVk1YKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoYXQgd2hhdGV2ZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpc24mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyBkeW5hbWljLCBjaGFuZ2luZywgKm5vdCogZml4ZWQuIFRoaXMgaXMgY3J1Y2lhbDsgaWYgaXQgd2VyZSBzdGF0aWMsIHdlIGNvdWxkIG1ha2Ugc29tZSBkaWZmZXJlbnQgYXNzdW1wdGlvbnMuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgbmVlZHMgdG8gYmUgY29uZmlybWVkLgoKVG8gcGluIHRoaXMgZG93biwgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHRha2UgYSBsb29rIGF0IGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHRoZSBkeW5hbWljcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QgYnkgdmVyaWZ5aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSBleHBlY3QuIExldCYjMzk7cyBleGFtaW5lIGl0IGFuZCBzZWUgaWYgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9nZXRfdW50YWdnZWRfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTU2PXZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU2OS0gKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODU3MDpndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncylcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzIyCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMQVNTIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIHN1cHBvcnQgd2l0aGluIEtWTSBmb3IgeDg2LiBUaGUgY29yZSBvZiB0aGlzIGlzIG1vZGlmeWluZyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUga2VybmVsIGxvZ2ljIOKAkyB0aGlzIGFic29sdXRlbHkgbmVlZHMgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBrZXkgYXJlYXMgYW5kIGNvbmZpZ3VyYXRpb25zLiAgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBGb2N1c1N5bWJvbHMgdGhhdCBzZWVtIGNyaXRpY2FsOiBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCwgYGdldF92bXhfbWVtX2FkZHJlc3NgLCBga3ZtX2hhbmRsZV9pbnZwY2lkYCwgYW5kIGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgLiBUaGV5IGFyZSB0aGUgZnVuY3Rpb25hbCBlbGVtZW50cyB0aGF0IEkgYmVsaWV2ZSB3aWxsIHdhcnJhbnQgdGhlIG1vc3QgYXR0ZW50aW9uLgoKTm93LCBmb3IgY29uZmlndXJhdGlvbnMuICBJIHNlZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBYODZfU0dYYCwgYW5kIGBYODZfU0dYX0tWTWAgbWVudGlvbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIG1pbmltdW0gY29uZmlndXJhdGlvbiBmb3IgZWZmZWN0aXZlIHRlc3Rpbmcgb2YgdGhpcyBMQVNTIGltcGxlbWVudGF0aW9uLiAgU3BlY2lmaWNhbGx5LCBpcyBgWDg2X1NHWGAgYW5kIGBYODZfU0dYX0tWTWAgc3RyaWN0bHkgcmVxdWlyZWQ/CgpBaCwgbG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBtb2RpZmljYXRpb24gdG8gYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBjaGVjayB3aXRoaW4gYHNneF9nZXRfZW5jbHNfZ3ZhYCwgaXQgaXMgY2xlYXIgdGhhdCB0ZXN0aW5nIHRoaXMgc3BlY2lmaWMgcGF0aCAqZG9lcyogcmVxdWlyZSBgWDg2X1NHWF9LVk1gLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoZSBvdGhlciBjb25maWdzLiBgQ09ORklHX1g4Nl82NGAgaXMgc3RhbmRhcmQuIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fSU5URUxgIGFyZSBhbHNvIHN0YW5kYXJkLiBgQ09ORklHX1g4Nl9TR1hgIGlzIGFsc28gYSBzdGFuZGFyZCBjb25maWcuIFRoZXJlZm9yZSwgdGhlIGVzc2VudGlhbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgYXBwZWFyIHRvIGJlIGBDT05GSUdfWDg2XzY0YCwgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9JTlRFTGAsIGFuZCBgQ09ORklHX1g4Nl9TR1hfS1ZNYC4KCkkmIzM5O3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBpbnZvbHZlZCBhbmQgY2FuIHNldCB1cCB0aGUgZnV6emVyIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtYODZfU0dYJiMzNDssCiAgICAmIzM0O1g4Nl9TR1hfS1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2lzX2xhc3NfdmlvbGF0aW9uJiMzNDssCiAgICAmIzM0O2dldF92bXhfbWVtX2FkZHJlc3MmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9pbnZwY2lkJiMzNDssCiAgICAmIzM0O3ZteF9nZXRfdW50YWdnZWRfYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIGluIEtWTSBvbiB4ODYuIEl0IG1vZGlmaWVzIHRoZSBpbnN0cnVjdGlvbiBlbXVsYXRvciBhbmQgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB0byBlbmZvcmNlIExBU1MgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O1g4Nl9TR1gmIzM0OywKICAgICYjMzQ7WDg2X1NHWF9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bXhfaXNfbGFzc192aW9sYXRpb24mIzM0OywKICAgICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX2ludnBjaWQmIzM0OywKICAgICYjMzQ7dm14X2dldF91bnRhZ2dlZF9hZGRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTozOC40OTc1ODU3MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzEyMTg2NDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiWDg2X1NHWFwiLFxuICAgIFwiWDg2X1NHWF9LVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bXhfaXNfbGFzc192aW9sYXRpb25cIixcbiAgICBcImdldF92bXhfbWVtX2FkZHJlc3NcIixcbiAgICBcImt2bV9oYW5kbGVfaW52cGNpZFwiLFxuICAgIFwidm14X2dldF91bnRhZ2dlZF9hZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBpbiBLVk0gb24geDg2LiBJdCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6MzguNDk3NTkzNDEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2MzQ2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzRiMTg1ZDcwOWEwNmFmNzg4ZmQ3ZGE4MWY4ZjY4ZGIzMzY4ODYwNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjE1OjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggZTIxM2M5YWUzZTMwMS4uYTgyYjIwMjgxZjMxYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC0xNDYsNiArMTQ2LDcgQEAgS1ZNX1g4Nl9PUChjb21wbGV0ZV9lbXVsYXRlZF9tc3IpXFxuIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGlzX2xhc3NfdmlvbGF0aW9uKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21ha2VfcHJpdmF0ZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCAyODM4NDc2MTlmZjg4Li5kMjE4MWE4MDVhY2U0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE3MjcsNiArMTcyNyw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKCp2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBcXHRndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFx0Ym9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gXFx0dm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbiBcXHRpbnQgKCpnbWVtX21ha2VfcHJpdmF0ZSkoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG5pbmRleCA5ZTljZjY1MzhhOTZlLi5jNGRiZDAwZjVlNGU5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG5AQCAtMTAyOSw2ICsxMDI5LDcgQEAgdm9pZCBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwcyh2b2lkKVxcbiBcXHRcXHRGKFNNNCksXFxuIFxcdFxcdEYoQVZYX1ZOTkkpLFxcbiBcXHRcXHRGKEFWWDUxMl9CRjE2KSxcXG4rXFx0XFx0WDg2XzY0X0YoTEFTUyksXFxuIFxcdFxcdEYoQ01QQ0NYQUREKSxcXG4gXFx0XFx0RihGWlJNKSxcXG4gXFx0XFx0RihGU1JTKSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG5pbmRleCA4MDcxYjM3MmQyMzNlLi45Y2JmZGU2NDkwNjQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXFxuQEAgLTY3Miw3ICs2NzIsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0XFx0ICAgIChmbGFncyBcXHUwMDI2IFg4NkVNVUxfRl9XUklURSkpXFxuIFxcdFxcdFxcdGdvdG8gYmFkO1xcbiBcXHRcXHQvKiB1bnJlYWRhYmxlIGNvZGUgc2VnbWVudCAqL1xcbi1cXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IFg4NkVNVUxfRl9GRVRDSCkgXFx1MDAyNlxcdTAwMjYgKGRlc2MudHlwZSBcXHUwMDI2IDgpIFxcdTAwMjZcXHUwMDI2ICEoZGVzYy50eXBlIFxcdTAwMjYgMikpXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgKFg4NkVNVUxfRl9GRVRDSCB8IFg4NkVNVUxfRl9CUkFOQ0gpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGRlc2MudHlwZSBcXHUwMDI2IDgpIFxcdTAwMjZcXHUwMDI2ICEoZGVzYy50eXBlIFxcdTAwMjYgMikpXFxuIFxcdFxcdFxcdGdvdG8gYmFkO1xcbiBcXHRcXHRsaW0gPSBkZXNjX2xpbWl0X3NjYWxlZChcXHUwMDI2ZGVzYyk7XFxuIFxcdFxcdGlmICghKGRlc2MudHlwZSBcXHUwMDI2IDgpIFxcdTAwMjZcXHUwMDI2IChkZXNjLnR5cGUgXFx1MDAyNiA0KSkge1xcbkBAIC02OTIsNiArNjkzLDE2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fbGluZWFyaXplKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBMQVNTIGFuZCBjYW5vbmljYWxpdHkgY2hlY2tzIGdlbmVyYXRlIHRoZSBzYW1lIGZhdWx0IGFuZFxcbitcXHQgKiB0aGVpciByZWxhdGl2ZSBvcmRlciBpcyBub3QgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQuIEFsc28sXFxuK1xcdCAqIHRoZSBTRE0gZG9lc24ndCBwcmlvcml0aXplIExBU1MgdmlvbGF0aW9ucyBhZ2FpbnN0XFxuK1xcdCAqIGFsaWdubWVudC1jaGVjayBmYXVsdHMsIHNvIGFueSBvcmRlciBpcyBsZWdhbC5cXG4rXFx0ICovXFxuK1xcdGlmIChjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZWlzX2xhc3NfdmlvbGF0aW9uKGN0eHQsIGxhLCBzaXplLCBmbGFncykpXFxuK1xcdFxcdGdvdG8gYmFkO1xcbitcXG4gXFx0aWYgKGxhIFxcdTAwMjYgKGluc25fYWxpZ25tZW50KGN0eHQsIHNpemUpIC0gMSkpXFxuIFxcdFxcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xcbiBcXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcXG5AQCAtNzIzLDcgKzczNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFzc2lnbl9laXAoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGRzdClcXG4gXFx0aWYgKGN0eHQtXFx1MDAzZW9wX2J5dGVzICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSlcXG4gXFx0XFx0YWRkci5lYSA9IGRzdCBcXHUwMDI2ICgoMVVMIFxcdTAwM2NcXHUwMDNjIChjdHh0LVxcdTAwM2VvcF9ieXRlcyBcXHUwMDNjXFx1MDAzYyAzKSkgLSAxKTtcXG4gXFx0cmMgPSBfX2xpbmVhcml6ZShjdHh0LCBhZGRyLCBcXHUwMDI2bWF4X3NpemUsIDEsIGN0eHQtXFx1MDAzZW1vZGUsIFxcdTAwMjZsaW5lYXIsXFxuLVxcdFxcdFxcdCBYODZFTVVMX0ZfRkVUQ0gpO1xcbitcXHRcXHRcXHQgWDg2RU1VTF9GX0JSQU5DSCk7XFxuIFxcdGlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKVxcbiBcXHRcXHRjdHh0LVxcdTAwM2VfZWlwID0gYWRkci5lYTtcXG4gXFx0cmV0dXJuIHJjO1xcbkBAIC03OTgsNiArODA5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgam1wX3JlbChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHJlbClcXG4gc3RhdGljIGludCBsaW5lYXJfcmVhZF9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGxpbmVhcixcXG4gXFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6ZSlcXG4ge1xcbitcXHRpZiAoY3R4dC1cXHUwMDNlb3BzLVxcdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsIFg4NkVNVUxfRl9JTVBMSUNJVCkpXFxuK1xcdFxcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xcbitcXG4gXFx0cmV0dXJuIGN0eHQtXFx1MDAzZW9wcy1cXHUwMDNlcmVhZF9zdGQoY3R4dCwgbGluZWFyLCBkYXRhLCBzaXplLCBcXHUwMDI2Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLCB0cnVlKTtcXG4gfVxcbiBcXG5AQCAtODA1LDYgKzgxOSwxMCBAQCBzdGF0aWMgaW50IGxpbmVhcl93cml0ZV9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuIFxcdFxcdFxcdCAgICAgICB1bG9uZyBsaW5lYXIsIHZvaWQgKmRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4ge1xcbitcXHRpZiAoY3R4dC1cXHUwMDNlb3BzLVxcdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCBYODZFTVVMX0ZfSU1QTElDSVQgfCBYODZFTVVMX0ZfV1JJVEUpKVxcbitcXHRcXHRyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTtcXG4rXFxuIFxcdHJldHVybiBjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZXdyaXRlX3N0ZChjdHh0LCBsaW5lYXIsIGRhdGEsIHNpemUsIFxcdTAwMjZjdHh0LVxcdTAwM2VleGNlcHRpb24sIHRydWUpO1xcbiB9XFxuIFxcbkBAIC0yNTcyLDEyICsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIFxcdGJhc2UgfD0gKCh1NjQpYmFzZTMpIFxcdTAwM2NcXHUwMDNjIDMyO1xcbiAjZW5kaWZcXG4tXFx0ciA9IG9wcy1cXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSArIDEwMiwgXFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIsIE5VTEwsIHRydWUpO1xcbitcXHRyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgKyAxMDIsIFxcdTAwMjZpb19iaXRtYXBfcHRyLCAyKTtcXG4gXFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCBcXHUwMDNlIGRlc2NfbGltaXRfc2NhbGVkKFxcdTAwMjZ0cl9zZWcpKVxcbitcXHRpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCArIDEgXFx1MDAzZSBkZXNjX2xpbWl0X3NjYWxlZChcXHUwMDI2dHJfc2VnKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRyID0gb3BzLVxcdTAwM2VyZWFkX3N0ZChjdHh0LCBiYXNlICsgaW9fYml0bWFwX3B0ciArIHBvcnQvOCwgXFx1MDAyNnBlcm0sIDIsIE5VTEwsIHRydWUpO1xcbitcXHRyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgKyBpb19iaXRtYXBfcHRyICsgcG9ydC84LCBcXHUwMDI2cGVybSwgMik7XFxuIFxcdGlmIChyICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKChwZXJtIFxcdTAwM2VcXHUwMDNlIGJpdF9pZHgpIFxcdTAwMjYgbWFzaylcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmYxMzZkM2QwYmE0MjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0xMDUsNiArMTA1LDcgQEAgc3RydWN0IHg4Nl9pbnN0cnVjdGlvbl9pbmZvIHtcXG4gI2RlZmluZSBYODZFTVVMX0ZfSU5WTFBHXFx0XFx0QklUKDMpXFxuICNkZWZpbmUgWDg2RU1VTF9GX01TUlxcdFxcdFxcdEJJVCg0KVxcbiAjZGVmaW5lIFg4NkVNVUxfRl9EVF9MT0FEXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgWDg2RU1VTF9GX0JSQU5DSFxcdFxcdEJJVCg2KVxcbiBcXG4gc3RydWN0IHg4Nl9lbXVsYXRlX29wcyB7XFxuIFxcdHZvaWQgKCp2bV9idWdnZWQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcXG5AQCAtMjQ4LDcgKzI0OSw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMge1xcbiBcXG4gXFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuLVxcbitcXHRib29sICgqaXNfbGFzc192aW9sYXRpb24pKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXHRib29sICgqaXNfY2Fub25pY2FsX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5oIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbmluZGV4IDQ0N2YwZWMzZTYzZTQuLmJlODYyMTY5NWM0MTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9yZWdzLmhcXG5AQCAtMjgsNyArMjgsNyBAQCBzdGF0aWNfYXNzZXJ0KCEoS1ZNX1BPU1NJQkxFX0NSMF9HVUVTVF9CSVRTIFxcdTAwMjYgWDg2X0NSMF9QRFBUUl9CSVRTKSk7XFxuIFxcdFxcdFxcdCAgfCBYODZfQ1I0X09TWFNBVkUgfCBYODZfQ1I0X1NNRVAgfCBYODZfQ1I0X0ZTR1NCQVNFIFxcXFxcXG4gXFx0XFx0XFx0ICB8IFg4Nl9DUjRfT1NYTU1FWENQVCB8IFg4Nl9DUjRfTEE1NyB8IFg4Nl9DUjRfVk1YRSBcXFxcXFxuIFxcdFxcdFxcdCAgfCBYODZfQ1I0X1NNQVAgfCBYODZfQ1I0X1BLRSB8IFg4Nl9DUjRfVU1JUCBcXFxcXFxuLVxcdFxcdFxcdCAgfCBYODZfQ1I0X0xBTV9TVVAgfCBYODZfQ1I0X0NFVCkpXFxuK1xcdFxcdFxcdCAgfCBYODZfQ1I0X0xBTV9TVVAgfCBYODZfQ1I0X0NFVCB8IFg4Nl9DUjRfTEFTUykpXFxuIFxcbiAjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpXFxuIFxcbkBAIC00MDUsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBib29sIF9fa3ZtX2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxcbiBcXHRcXHRfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9QQ0lERTsgICAgICAgXFxcXFxcbiBcXHRpZiAoIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0xBTSkpICAgICAgICAgICBcXFxcXFxuIFxcdFxcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0xBTV9TVVA7ICAgICBcXFxcXFxuK1xcdGlmICghX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfTEFTUykpICAgICAgICAgIFxcXFxcXG4rXFx0XFx0X19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFTUzsgICAgICAgIFxcXFxcXG4gXFx0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9TSFNUSykgXFx1MDAyNlxcdTAwMjYgICAgICAgXFxcXFxcbiBcXHQgICAgIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0lCVCkpICAgICAgICAgICBcXFxcXFxuIFxcdFxcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0NFVDsgICAgICAgICBcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5pbmRleCAwZmYzMjMwZmQ5NWU4Li4zNTgwYWFkYThkMmM4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5AQCAtMTAzMSw2ICsxMDMxLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LnZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvciA9IGt2bV92Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IsXFxuIFxcbiBcXHQuZ2V0X3VudGFnZ2VkX2FkZHIgPSB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIsXFxuK1xcdC5pc19sYXNzX3Zpb2xhdGlvbiA9IHZteF9pc19sYXNzX3Zpb2xhdGlvbixcXG4gXFxuIFxcdC5tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkobWVtX2VuY19pb2N0bCksXFxuIFxcdC52Y3B1X21lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seSh2Y3B1X21lbV9lbmNfaW9jdGwpLFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5AQCAtNTI5OSwxMSArNTI5OSwxMiBAQCBpbnQgZ2V0X3ZteF9tZW1fYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbiBcXHRcXHRcXHQqcmV0ID0gb2ZmO1xcbiBcXG4gXFx0XFx0KnJldCA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqcmV0LCAwKTtcXG4tXFx0XFx0LyogTG9uZyBtb2RlOiAjR1AoMCkvI1NTKDApIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiBhXFxuLVxcdFxcdCAqIG5vbi1jYW5vbmljYWwgZm9ybS4gVGhpcyBpcyB0aGUgb25seSBjaGVjayBvbiB0aGUgbWVtb3J5XFxuLVxcdFxcdCAqIGRlc3RpbmF0aW9uIGZvciBsb25nIG1vZGUhXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIExvbmcgbW9kZTogI0dQKDApLyNTUygwKSBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgaXMgaW4gYVxcbitcXHRcXHQgKiBub24tY2Fub25pY2FsIGZvcm0sIG9yIGlmIHRoZSBhY2Nlc3MgdmlvbGF0ZXMgTEFTUy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGV4biA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpyZXQsIHZjcHUsIDApO1xcbitcXHRcXHRleG4gPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqcmV0LCB2Y3B1LCAwKSB8fFxcbitcXHRcXHQgICAgICB2bXhfaXNfbGFzc192aW9sYXRpb24odmNwdSwgKnJldCwgbGVuLCAwKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2hlbiBub3QgaW4gbG9uZyBtb2RlLCB0aGUgdmlydHVhbC9saW5lYXIgYWRkcmVzcyBpc1xcbkBAIC02MTA4LDcgKzYxMDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHR5cGUgIT0gVk1YX1ZQSURfRVhURU5UX0FMTF9DT05URVhUIFxcdTAwMjZcXHUwMDI2ICFvcGVyYW5kLnZwaWQpXFxuIFxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7XFxuIFxcbi1cXHQvKiBMQU0gZG9lc24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovXFxuK1xcdC8qIExBTSBhbmQgTEFTUyBkb24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovXFxuIFxcdGlmICh0eXBlID09IFZNWF9WUElEX0VYVEVOVF9JTkRJVklEVUFMX0FERFIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGlzX25vbmNhbm9uaWNhbF9pbnZscGdfYWRkcmVzcyhvcGVyYW5kLmdsYSwgdmNwdSkpXFxuIFxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvc2d4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3NneC5jXFxuaW5kZXggNzcxYzc1YTU4MzQzNi4uNGFjMzA1ZWQ2ZGVhMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xcbkBAIC0zOSw3ICszOSw4IEBAIHN0YXRpYyBpbnQgc2d4X2dldF9lbmNsc19ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4gXFx0XFx0ZmF1bHQgPSB0cnVlO1xcbiBcXHR9IGVsc2UgaWYgKGxpa2VseShpc182NF9iaXRfbW9kZSh2Y3B1KSkpIHtcXG4gXFx0XFx0Kmd2YSA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqZ3ZhLCAwKTtcXG4tXFx0XFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKTtcXG4rXFx0XFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fFxcbitcXHRcXHRcXHR2bXhfaXNfbGFzc192aW9sYXRpb24odmNwdSwgKmd2YSwgc2l6ZSwgMCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdCpndmEgXFx1MDAyNj0gMHhmZmZmZmZmZjtcXG4gXFx0XFx0ZmF1bHQgPSAocy51bnVzYWJsZSkgfHxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCBlM2JmZTZhY2ExYTBlLi4zMDgyMTk1OTA2ZGE4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTc4ODUsNiArNzg4NSw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGVudHJ5ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnlfaW5kZXgodmNwdSwgMHg3LCAxKTtcXG4gXFx0Y3I0X2ZpeGVkMV91cGRhdGUoWDg2X0NSNF9MQU1fU1VQLCAgICBlYXgsIGZlYXR1cmVfYml0KExBTSkpO1xcbitcXHRjcjRfZml4ZWQxX3VwZGF0ZShYODZfQ1I0X0xBU1MsICAgICAgIGVheCwgZmVhdHVyZV9iaXQoTEFTUykpO1xcbiBcXG4gI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlXFxuIH1cXG5AQCAtODU3MSw3ICs4NTcyLDggQEAgZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3NcXG4gXFx0aW50IGxhbV9iaXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgY3IzX2JpdHM7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX0lOVkxQRykpXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHxcXG4rXFx0XFx0ICAgICBYODZFTVVMX0ZfSU5WTFBHKSlcXG4gXFx0XFx0cmV0dXJuIGd2YTtcXG4gXFxuIFxcdGlmICghaXNfNjRfYml0X21vZGUodmNwdSkpXFxuQEAgLTg2MDMsNiArODYwNSw1MyBAQCBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFnc1xcbiBcXHRyZXR1cm4gKHNpZ25fZXh0ZW5kNjQoZ3ZhLCBsYW1fYml0KSBcXHUwMDI2IH5CSVRfVUxMKDYzKSkgfCAoZ3ZhIFxcdTAwMjYgQklUX1VMTCg2MykpO1xcbiB9XFxuIFxcbitib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRjb25zdCBib29sIGlzX3N1cGVydmlzb3JfYWRkcmVzcyA9ICEhKGd2YSBcXHUwMDI2IEJJVF9VTEwoNjMpKTtcXG4rXFx0Y29uc3QgYm9vbCBpbXBsaWNpdF9zdXBlcnZpc29yID0gISEoZmxhZ3MgXFx1MDAyNiBYODZFTVVMX0ZfSU1QTElDSVQpO1xcbitcXHRjb25zdCBib29sIGZldGNoID0gISEoZmxhZ3MgXFx1MDAyNiBYODZFTVVMX0ZfRkVUQ0gpO1xcbitcXG4rXFx0aWYgKCFrdm1faXNfY3I0X2JpdF9zZXQodmNwdSwgWDg2X0NSNF9MQVNTKSB8fCAhaXNfbG9uZ19tb2RlKHZjcHUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJTlZMUEcgaXNuJ3Qgc3ViamVjdCB0byBMQVNTLCBlLmcuIHRvIGFsbG93IGludmFsaWRhdGluZyB1c2Vyc3BhY2VcXG4rXFx0ICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbid0IHN1YmplY3RcXG4rXFx0ICogdG8gTEFTUyBpbiBvcmRlciB0byBzaW1wbGlmeSBmYXIgY29udHJvbCB0cmFuc2ZlcnMgKHRoZSBzdWJzZXF1ZW50XFxuK1xcdCAqIGZldGNoIHdpbGwgZW5mb3JjZSBMQVNTIGFzIGFwcHJvcHJpYXRlKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IChYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lOVkxQRykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghaW1wbGljaXRfc3VwZXJ2aXNvciBcXHUwMDI2XFx1MDAyNiB2bXhfZ2V0X2NwbCh2Y3B1KSA9PSAzKVxcbitcXHRcXHRyZXR1cm4gaXNfc3VwZXJ2aXNvcl9hZGRyZXNzO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTEFTUyBlbmZvcmNlbWVudCBmb3Igc3VwZXJ2aXNvci1tb2RlIGRhdGEgYWNjZXNzZXMgZGVwZW5kcyBvbiBTTUFQXFxuK1xcdCAqIGJlaW5nIGVuYWJsZWQsIGFuZCBsaWtlIFNNQVAgaWdub3JlcyBleHBsaWNpdCBhY2Nlc3NlcyBpZiBSRkxBR1MuQUM9MS5cXG4rXFx0ICovXFxuK1xcdGlmICghZmV0Y2gpIHtcXG4rXFx0XFx0aWYgKCFrdm1faXNfY3I0X2JpdF9zZXQodmNwdSwgWDg2X0NSNF9TTUFQKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yIFxcdTAwMjZcXHUwMDI2IChrdm1fZ2V0X3JmbGFncyh2Y3B1KSBcXHUwMDI2IFg4Nl9FRkxBR1NfQUMpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBlbnRpcmUgYWNjZXNzIG11c3QgYmUgaW4gdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3Mgc3BhY2UuICBOb3RlLFxcbitcXHQgKiBpZiBMQU0gaXMgc3VwcG9ydGVkLCBAZ3ZhIGhhcyBhbHJlYWR5IGJlZW4gdW50YWdnZWQsIHNvIGJhcnJpbmcgYVxcbitcXHQgKiBtYXNzaXZlIGFyY2hpdGVjdHVyZSBjaGFuZ2UgdG8gZXhwYW5kIHRoZSBjYW5vbmljYWwgYWRkcmVzcyByYW5nZSxcXG4rXFx0ICogaXQncyBpbXBvc3NpYmxlIGZvciBhIHVzZXIgYWNjZXNzIHRvIHN0cmFkZGxlIHVzZXIgYW5kIHN1cGVydmlzb3JcXG4rXFx0ICogYWRkcmVzcyBzcGFjZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2l6ZSBcXHUwMDI2XFx1MDAyNiAhKChndmEgKyBzaXplIC0gMSkgXFx1MDAyNiBCSVRfVUxMKDYzKSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuICFpc19zdXBlcnZpc29yX2FkZHJlc3M7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm14X2hhbmRsZV9pbnRlbF9wdF9pbnRyKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li40M2RmNzI1YTc3ZjBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTM5Nyw2ICszOTcsOSBAQCB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXG4rYm9vbCB2bXhfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitcXG4gdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggZDk0YjU5MTQwYzQ1Mi4uYTZlYTczNmZkNDhmYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNTgwMCw2ICs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFkZHIsIGZsYWdzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBrdm1feDg2X2NhbGwoaXNfbGFzc192aW9sYXRpb24pKGVtdWxfdG9fdmNwdShjdHh0KSwgYWRkciwgc2l6ZSwgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGd2YV90IGFkZHIsIHVuc2lnbmVkIGludCBmbGFncylcXG4ge1xcbkBAIC01ODU5LDYgKzU4NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4gXFx0LmdldF94Y3IgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfeGNyLFxcbiBcXHQuc2V0X3hjciAgICAgICAgICAgICA9IGVtdWxhdG9yX3NldF94Y3IsXFxuIFxcdC5nZXRfdW50YWdnZWRfYWRkciAgID0gZW11bGF0b3JfZ2V0X3VudGFnZ2VkX2FkZHIsXFxuK1xcdC5pc19sYXNzX3Zpb2xhdGlvbiAgID0gZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24sXFxuIFxcdC5pc19jYW5vbmljYWxfYWRkciAgID0gZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIsXFxuIFxcdC5wYWdlX2FkZHJlc3NfdmFsaWQgID0gZW11bGF0b3JfcGFnZV9hZGRyZXNzX3ZhbGlkLFxcbiB9O1xcbkBAIC0xMDc0NSw3ICsxMDc1Miw3IEBAIGludCBrdm1faGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHR5cGUsIGd2YV90IGd2YSlcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuIFxcdGNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIExBTSBkb2Vzbid0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCXFxuK1xcdFxcdCAqIExBTSBhbmQgTEFTUyBkb24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxcbiBcXHRcXHQgKiBpbnZhbGlkYXRpb24uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoKCFwY2lkX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgKG9wZXJhbmQucGNpZCAhPSAwKSkgfHxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCAwMDEyMzE2OWExOTBhLi44NmZhOTNlMGY2YzA4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTkxLDYgKzkxLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fcHZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9sYXNzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9tb25pdG9yX213YWl0X3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9tc3JzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuaW5kZXggNmU2ZjcwMDM1NTA4YS4uZjQyNTE2NjE3NGY5ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5AQCAtNzksNiArNzksNyBAQCBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3Rvcik7XFxuICNkZWZpbmUgWDg2X0NSNF9TTUVQXFx0XFx0KDF1bCBcXHUwMDNjXFx1MDAzYyAyMClcXG4gI2RlZmluZSBYODZfQ1I0X1NNQVBcXHRcXHQoMXVsIFxcdTAwM2NcXHUwMDNjIDIxKVxcbiAjZGVmaW5lIFg4Nl9DUjRfUEtFXFx0XFx0KDF1bCBcXHUwMDNjXFx1MDAzYyAyMilcXG4rI2RlZmluZSBYODZfQ1I0X0xBU1NcXHRcXHQoMXVsIFxcdTAwM2NcXHUwMDNjIDI3KVxcbiBcXG4gc3RydWN0IHhzdGF0ZV9oZWFkZXIge1xcbiBcXHR1NjRcXHRcXHRcXHRcXHR4c3RhdGVfYnY7XFxuQEAgLTE5NSw2ICsxOTYsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9jcHVfZmVhdHVyZSB7XFxuICNkZWZpbmVcXHRYODZfRkVBVFVSRV9TUEVDX0NUUkxcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyNilcXG4gI2RlZmluZVxcdFg4Nl9GRUFUVVJFX0FSQ0hfQ0FQQUJJTElUSUVTXFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVEWCwgMjkpXFxuICNkZWZpbmVcXHRYODZfRkVBVFVSRV9QS1NcXHRcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRUNYLCAzMSlcXG4rI2RlZmluZVxcdFg4Nl9GRUFUVVJFX0xBU1NcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMSwgRUFYLCA2KVxcbiAjZGVmaW5lXFx0WDg2X0ZFQVRVUkVfWFRJTEVDRkdcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4RCwgMCwgRUFYLCAxNylcXG4gI2RlZmluZVxcdFg4Nl9GRUFUVVJFX1hUSUxFREFUQVxcdFxcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE4KVxcbiAjZGVmaW5lXFx0WDg2X0ZFQVRVUkVfWFNBVkVTXFx0XFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweEQsIDEsIEVBWCwgMylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbGFzc190ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdjNWNmYTI0YzJiZGRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuY1xcbkBAIC0wLDAgKzEsNTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgdGVzdFxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uLlxcbisgKlxcbisgKiBPbmx5IHRlc3QgdGhhdCB0aGUgZ3Vlc3QgY2FuJ3Qgc2V0IENSNC5MQVNTIHdoZW4gTEFTUyBpc24ndFxcbisgKiBlbnVtZXJhdGVkIGluIHRoZSBndWVzdCdzIENQVUlELiAgS1ZNJ3MgaGFuZGxpbmcgb2YgQ1I0LkxBU1MgdmlhXFxuKyAqIEtWTV9TRVRfU1JFR1MgaXMgY292ZXJlZCBieSBzZXRfc3JlZ3NfdGVzdC5cXG4rICpcXG4rICogVGVzdGluZyBMQVNTIGVuZm9yY2VtZW50IHJlcXVpcmVzIHJ1bm5pbmcgc3VwZXJ2aXNvciBjb2RlIGluIHRoZVxcbisgKiB1cHBlciBoYWxmIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCB3aGljaCB0aGUgS1ZNIHNlbGZ0ZXN0cyBmcmFtZXdvcmtcXG4rICogZG9lc24ndCBzdXBwb3J0LiBFbmFibGluZyBDUjQuTEFTUyBpbiB0aGUgY3VycmVudCBmcmFtZXdvcmsgd291bGRcXG4rICogbWFrZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBmZXRjaCBhIHZpb2xhdGlvbiBhbmQgdHJpcGxlLWZhdWx0IHRoZVxcbisgKiBndWVzdC5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwcm9jZXNzb3IuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFdpdGhvdXQgTEFTUyBpbiBDUFVJRCwgYSBndWVzdCB3cml0ZSBtdXN0IGdlbmVyYXRlICNHUCB3aXRob3V0XFxuKyAqIGNoYW5naW5nIENSNC4gUmVzZXJ2ZWQgYml0cyBhcmUgb3duZWQgYnkgS1ZNIHNvIHRoZSB3cml0ZSBpc1xcbisgKiBndWFyYW50ZWVkIHRvIGV4aXQgdG8gS1ZNLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxcbit7XFxuK1xcdHU4IHZlY3RvcjtcXG4rXFxuK1xcdEdVRVNUX0FTU0VSVCghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTtcXG4rXFxuK1xcdHZlY3RvciA9IGt2bV9hc21fc2FmZShcXFwibW92ICVbY3I0XSwgJSVjcjRcXFwiLFxcbitcXHRcXHRcXHQgICAgICBbY3I0XSBcXFwiclxcXCIoZ2V0X2NyNCgpIHwgWDg2X0NSNF9MQVNTKSk7XFxuK1xcdF9fR1VFU1RfQVNTRVJUKHZlY3RvciA9PSBHUF9WRUNUT1IsXFxuK1xcdFxcdCAgICAgICBcXFwiV2FudGVkICNHUCBvbiBDUjQuTEFTUywgZ290ICVzXFxcIiwgZXhfc3RyKHZlY3RvcikpO1xcbitcXHRHVUVTVF9BU1NFUlQoIShnZXRfY3I0KCkgXFx1MDAyNiBYODZfQ1I0X0xBU1MpKTtcXG4rXFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xcbitcXHR2Y3B1X2NsZWFyX2NwdWlkX2ZlYXR1cmUodmNwdSwgWDg2X0ZFQVRVUkVfTEFTUyk7XFxuK1xcbitcXHR2Y3B1X3J1bih2Y3B1KTtcXG4rXFx0VEVTVF9BU1NFUlRfRVEoZ2V0X3VjYWxsKHZjcHUsIE5VTEwpLCBVQ0FMTF9ET05FKTtcXG4rXFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXFxuaW5kZXggNjAzMjI2ZmZlNDM3NC4uOGIzNzVmZWE4NGQwMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcXG5AQCAtNzIsNiArNzIsOCBAQCBzdGF0aWMgdTY0IGNhbGNfc3VwcG9ydGVkX2NyNF9mZWF0dXJlX2JpdHModm9pZClcXG4gXFx0XFx0Y3I0IHw9IFg4Nl9DUjRfU01BUDtcXG4gXFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BLVSkpXFxuIFxcdFxcdGNyNCB8PSBYODZfQ1I0X1BLRTtcXG4rXFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKVxcbitcXHRcXHRjcjQgfD0gWDg2X0NSNF9MQVNTO1xcbiBcXG4gXFx0cmV0dXJuIGNyNDtcXG4gfVxcbkBAIC0xMjgsNiArMTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNClcXG4gXFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfU01FUCk7XFxuIFxcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjQsIHNyZWdzLCBYODZfQ1I0X1NNQVApO1xcbiBcXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9QS0UpO1xcbitcXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9MQVNTKTtcXG4gXFxuIFxcdGZvciAoaSA9IDMyOyBpIFxcdTAwM2MgNjQ7IGkrKylcXG4gXFx0XFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIEJJVChpKSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZVxcbmluZGV4IDQzNDA2NTIxNWQxMjcuLjI1MmQ3NTdmYzFiMmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXFxuQEAgLTE5LDcgKzE5LDggQEAgVEFSR0VUU19DXzMyQklUX09OTFkgOj0gZW50cnlfZnJvbV92bTg2IHRlc3Rfc3lzY2FsbF92ZHNvIHVud2luZF92ZHNvIFxcXFxcXG4gXFx0XFx0XFx0dGVzdF9GQ01PViB0ZXN0X0ZDT01JIHRlc3RfRklTVFRQIFxcXFxcXG4gXFx0XFx0XFx0dmRzb19yZXN0b3JlclxcbiBUQVJHRVRTX0NfNjRCSVRfT05MWSA6PSBmc2dzYmFzZSBzeXNyZXRfcmlwIHN5c2NhbGxfbnVtYmVyaW5nIFxcXFxcXG4tXFx0XFx0XFx0Y29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweFxcbitcXHRcXHRcXHRjb3JydXB0X3hzdGF0ZV9oZWFkZXIgYW14IGxhbSB0ZXN0X3NoYWRvd19zdGFjayBhdnggYXB4IFxcXFxcXG4rXFx0XFx0XFx0bGFzc1xcbiAjIFNvbWUgc2VsZnRlc3RzIHJlcXVpcmUgMzJiaXQgc3VwcG9ydCBlbmFibGVkIGFsc28gb24gNjRiaXQgc3lzdGVtc1xcbiBUQVJHRVRTX0NfMzJCSVRfTkVFREVEIDo9IGxkdF9nZHQgcHRyYWNlX3N5c2NhbGxcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFzcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZGQzZGM4ZTQxZDFkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmNcXG5AQCAtMCwwICsxLDE5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBsYXNzLmMgLSBUZXN0IExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIGVuZm9yY2VtZW50XFxuKyAqXFxuKyAqIFdpdGggTEFTUyBlbmFibGVkLCBhIHVzZXItbW9kZSByZWFkLCB3cml0ZSBvciBpbnN0cnVjdGlvbiBmZXRjaCBhdCBhXFxuKyAqIGtlcm5lbCBhZGRyZXNzIHJhaXNlcyBhICNHUCBpbnN0ZWFkIG9mIHRoZSAjUEYgdGhhdCBTTUFQL1NNRVAgd291bGRcXG4rICogcHJvZHVjZS5cXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3Vjb250ZXh0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiaGVscGVycy5oXFxcIlxcbitcXG4rI2lmbmRlZiBfX3g4Nl82NF9fXFxuKyMgZXJyb3IgVGhpcyB0ZXN0IGlzIDY0LWJpdCBvbmx5XFxuKyNlbmRpZlxcbitcXG4rLypcXG4rICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsXFxuKyAqIGFkZHJlc3MgcmFpc2VzIHRoZSB2ZXJ5IHNhbWUgI0dQIGZvciBhIGRpZmZlcmVudCByZWFzb24sIHNvIHRoZVxcbisgKiBhZGRyZXNzIGhhcyB0byBiZSBjYW5vbmljYWwgdG8gYXR0cmlidXRlIHRoZSBmYXVsdCB0byBMQVNTLlxcbisgKlxcbisgKiBCaXRzIDYzOjQ3IGFyZSBhbGwgc2V0IGhlcmUsIHdoaWNoIGlzIGNhbm9uaWNhbCB3aXRoIDQtbGV2ZWwgcGFnaW5nXFxuKyAqIGFzIHdlbGwgYXMgNS1sZXZlbCBwYWdpbmcuXFxuKyAqL1xcbisjZGVmaW5lIEtFUk5FTF9BRERSXFx0MHhmZmZmODAwMDAwMDAwMDAwVUxcXG4rXFxuK3N0YXRpYyBzaWdqbXBfYnVmIGptcGJ1ZjtcXG4rXFxuK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGZhdWx0X3RyYXBubywgZmF1bHRfZXJyLCBmYXVsdF9yaXA7XFxuK1xcbisvKiBIYW5kbGUgU0lHU0VHViAoI0dQIGFuZCAjUEYpIGFzIHdlbGwgYXMgU0lHQlVTICgjU1MpICovXFxuK3N0YXRpYyB2b2lkIGZhdWx0X2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICppbmZvLCB2b2lkICpjdHhfdm9pZClcXG4re1xcbitcXHR1Y29udGV4dF90ICpjdHggPSAodWNvbnRleHRfdCAqKWN0eF92b2lkO1xcbitcXG4rXFx0ZmF1bHRfdHJhcG5vID0gY3R4LVxcdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfVFJBUE5PXTtcXG4rXFx0ZmF1bHRfZXJyID0gY3R4LVxcdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfRVJSXTtcXG4rXFx0ZmF1bHRfcmlwID0gY3R4LVxcdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfUklQXTtcXG4rXFx0c2lnbG9uZ2ptcChqbXBidWYsIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyIGRlbGltc1tdID0gXFxcIiBcXFxcblxcXCI7XFxuK1xcdHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7XFxuK1xcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4rXFx0Y2hhciBsaW5lWzQwOTZdO1xcbitcXHRGSUxFICpjcHVpbmZvO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSB0aGUgY3B1aW5mbyBmbGFnIHJlZmxlY3RzIHdoZXRoZXIgdGhlIGtlcm5lbCBhY3R1YWxseVxcbitcXHQgKiBlbmFibGVkIExBU1MuXFxuK1xcdCAqL1xcbitcXHRjcHVpbmZvID0gZm9wZW4oXFxcIi9wcm9jL2NwdWluZm9cXFwiLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWNwdWluZm8pXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZmFpbGVkIHRvIG9wZW4gL3Byb2MvY3B1aW5mb1xcXFxuXFxcIik7XFxuK1xcbitcXHR3aGlsZSAoIWZvdW5kIFxcdTAwMjZcXHUwMDI2IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgY3B1aW5mbykpIHtcXG4rXFx0XFx0Y2hhciAqZmxhZztcXG4rXFxuK1xcdFxcdGlmIChzdHJuY21wKGxpbmUsIFxcXCJmbGFnc1xcXCIsIDUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIE1hdGNoIHdob2xlIHdvcmRzIG9ubHksIG5vdCBhIHN1YnN0cmluZyBvZiBhbm90aGVyIGZsYWcuICovXFxuK1xcdFxcdGZvciAoZmxhZyA9IHN0cnRvayhsaW5lLCBkZWxpbXMpOyBmbGFnOyBmbGFnID0gc3RydG9rKE5VTEwsIGRlbGltcykpIHtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoZmxhZywgXFxcImxhc3NcXFwiKSkge1xcbitcXHRcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGNwdWluZm8pO1xcbitcXG4rXFx0aWYgKGZvdW5kKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIENoZWNrIENQVUlELihFQVg9MDdILEVDWD0xKTpFQVguTEFTU1tiaXQgNl0gKi9cXG4rXFx0X19jcHVpZF9jb3VudCgweDcsIDB4MSwgZWF4LCBlYngsIGVjeCwgZWR4KTtcXG4rXFx0aWYgKGVheCBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIDYpKVxcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiTEFTUyBpcyBzdXBwb3J0ZWQgYnkgdGhlIENQVSBidXQgbm90IGVuYWJsZWQgYnkgdGhlIGtlcm5lbFxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qIEdlbmVyYWwgUHJvdGVjdGlvbiBGYXVsdCAodHJhcG5yLmggaXMgbm90IGV4cG9ydGVkIHRvIHVhcGkpICovXFxuKyNkZWZpbmUgWDg2X1RSQVBfR1BcXHQxM1xcbitcXG4rLyogQSBMQVNTIHZpb2xhdGlvbiByYWlzZXMgYSAjR1Agd2l0aCBhIG51bGwgZXJyb3IgY29kZS4gKi9cXG4rc3RhdGljIGJvb2wgaXNfbGFzc192aW9sYXRpb24odm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmF1bHRfdHJhcG5vID09IFg4Nl9UUkFQX0dQIFxcdTAwMjZcXHUwMDI2ICFmYXVsdF9lcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3JlYWQodm9pZClcXG4re1xcbitcXHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xcbitcXHRcXHQqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilLRVJORUxfQUREUjtcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCJ0aGUgcmVhZCBkaWQgbm90IGZhdWx0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXFxuK1xcdFxcdFxcdCBcXFwidGhlIHJlYWQgZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfd3JpdGUodm9pZClcXG4re1xcbitcXHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xcbitcXHRcXHQqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilLRVJORUxfQUREUiA9IDB4MWE1NTtcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCJ0aGUgd3JpdGUgZGlkIG5vdCBmYXVsdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChpc19sYXNzX3Zpb2xhdGlvbigpLFxcbitcXHRcXHRcXHQgXFxcInRoZSB3cml0ZSBmYXVsdGVkIHdpdGggdHJhcD0lbGQsIGVycm9yPTB4JWx4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIpO1xcbit9XFxuK1xcbisvKlxcbisgKiBVc2UgaW5saW5lIGFzbSByYXRoZXIgdGhhbiBhIGNhbGwgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXI6IGEgZGlyZWN0XFxuKyAqICdjYWxsIHJlbDMyJyBjYW5ub3QgcmVhY2ggYSBrZXJuZWwgYWRkcmVzcywgYW5kIGxldHRpbmcgdGhlIGNvbXBpbGVyIGxvd2VyXFxuKyAqIHRoZSBpbmRpcmVjdCBicmFuY2ggcmlza3Mgcm91dGluZyBpdCB0aHJvdWdoIGEgdGh1bmssIG9yIGVsaWRpbmcgaXRcXG4rICogYWx0b2dldGhlciwgZWl0aGVyIG9mIHdoaWNoIHdvdWxkIHN0b3AgdGVzdGluZyB0aGUgZmV0Y2guXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkb19mZXRjaCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiY2FsbCAqJVtmbl1cXFwiXFxuK1xcdFxcdCAgICAgIDogOiBbZm5dIFxcXCJyXFxcIiAoYWRkcilcXG4rXFx0XFx0ICAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJheFxcXCIsIFxcXCJyY3hcXFwiLCBcXFwicmR4XFxcIiwgXFxcInJzaVxcXCIsIFxcXCJyZGlcXFwiLFxcbitcXHRcXHRcXHRcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIiwgXFxcInIxMVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF9mZXRjaCh2b2lkKVxcbit7XFxuK1xcdGlmIChzaWdzZXRqbXAoam1wYnVmLCAxKSA9PSAwKSB7XFxuK1xcdFxcdGRvX2ZldGNoKEtFUk5FTF9BRERSKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEV4ZWN1dGlvbiByZXN1bWVkIGF0IGFuIHVua25vd24gcG9pbnQgd2l0aCBhbiB1bmRlZmluZWRcXG4rXFx0XFx0ICogcmVnaXN0ZXIgc3RhdGUsIHNvIGRvbid0IHRyeSB0byBydW4gdGhlIHJlc3Qgb2YgdGhlIHRlc3RzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJ0aGUgZmV0Y2ggcmV0dXJuZWQgd2l0aG91dCBmYXVsdGluZ1xcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJyYW5jaCBpbnN0cnVjdGlvbnMgZG8gbm90IGNoZWNrIHRoZWlyIHRhcmdldCBhZ2FpbnN0IExBU1MuIFRoZVxcbitcXHQgKiB2aW9sYXRpb24gaGFwcGVucyB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBpcyB1c2VkIHRvIGZldGNoIHRoZVxcbitcXHQgKiBuZXh0IGluc3RydWN0aW9uLCBzbyB0aGUgZmF1bHQgbXVzdCBiZSByZXBvcnRlZCBhdCB0aGUgdGFyZ2V0XFxuK1xcdCAqIHJhdGhlciB0aGFuIGF0IHRoZSBicmFuY2guXFxuK1xcdCAqL1xcbitcXHRpZiAoZmF1bHRfcmlwICE9IEtFUk5FTF9BRERSKSB7XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcXFwidGhlIGZldGNoIGZhdWx0ZWQgYXQgUklQIDB4JWx4IGluc3RlYWQgb2YgMHglbHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGZhdWx0X3JpcCwgKHVuc2lnbmVkIGxvbmcpS0VSTkVMX0FERFIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSxcXG4rXFx0XFx0XFx0IFxcXCJ0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTtcXG4rfVxcbitcXG4rI2RlZmluZSBUT1RBTF9URVNUUyAzXFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcbitcXHRpZiAoIWlzX2xhc3NfYWN0aXZlKCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJMQVNTIGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGtzZnRfc2V0X3BsYW4oVE9UQUxfVEVTVFMpO1xcbitcXG4rXFx0c2V0aGFuZGxlcihTSUdTRUdWLCBmYXVsdF9oYW5kbGVyLCAwKTtcXG4rXFx0LyogT25seSB0byByZXBvcnQgYSAjU1M7IExBU1Mgc2hvdWxkbid0IGNhdXNlIG9uZSBoZXJlLiAqL1xcbitcXHRzZXRoYW5kbGVyKFNJR0JVUywgZmF1bHRfaGFuZGxlciwgMCk7XFxuK1xcbitcXHRrc2Z0X3ByaW50X21zZyhcXFwiQWNjZXNzaW5nIHRoZSBrZXJuZWwgYWRkcmVzcyAweCVseCBmcm9tIHVzZXJzcGFjZVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgICh1bnNpZ25lZCBsb25nKUtFUk5FTF9BRERSKTtcXG4rXFx0dGVzdF9rZXJuZWxfcmVhZCgpO1xcbitcXHR0ZXN0X2tlcm5lbF93cml0ZSgpO1xcbitcXHR0ZXN0X2tlcm5lbF9mZXRjaCgpO1xcbitcXG4rXFx0Y2xlYXJoYW5kbGVyKFNJR0JVUyk7XFxuK1xcdGNsZWFyaGFuZGxlcihTSUdTRUdWKTtcXG4rXFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTozOS45MTQ1NTI5NzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NTcwNDg4OTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiWDg2X1NHWFwiLFxuICAgIFwiWDg2X1NHWF9LVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bXhfaXNfbGFzc192aW9sYXRpb25cIixcbiAgICBcImdldF92bXhfbWVtX2FkZHJlc3NcIixcbiAgICBcImt2bV9oYW5kbGVfaW52cGNpZFwiLFxuICAgIFwidm14X2dldF91bnRhZ2dlZF9hZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBpbiBLVk0gb24geDg2LiBJdCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzRiMTg1ZDcwOWEwNmFmNzg4ZmQ3ZGE4MWY4ZjY4ZGIzMzY4ODYwNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDI6MTU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggZTIxM2M5YWUzZTMwMS4uYTgyYjIwMjgxZjMxYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xNDYsNiArMTQ2LDcgQEAgS1ZNX1g4Nl9PUChjb21wbGV0ZV9lbXVsYXRlZF9tc3IpXG4gS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoaXNfbGFzc192aW9sYXRpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWFrZV9wcml2YXRlKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyODM4NDc2MTlmZjg4Li5kMjE4MWE4MDVhY2U0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE3MjcsNiArMTcyNyw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHR1bnNpZ25lZCBsb25nICgqdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4rXHRib29sICgqaXNfbGFzc192aW9sYXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBcdHZvaWQgKigqYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuIFx0aW50ICgqZ21lbV9tYWtlX3ByaXZhdGUpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IDllOWNmNjUzOGE5NmUuLmM0ZGJkMDBmNWU0ZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC0xMDI5LDYgKzEwMjksNyBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXG4gXHRcdEYoU000KSxcbiBcdFx0RihBVlhfVk5OSSksXG4gXHRcdEYoQVZYNTEyX0JGMTYpLFxuK1x0XHRYODZfNjRfRihMQVNTKSxcbiBcdFx0RihDTVBDQ1hBREQpLFxuIFx0XHRGKEZaUk0pLFxuIFx0XHRGKEZTUlMpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5pbmRleCA4MDcxYjM3MmQyMzNlLi45Y2JmZGU2NDkwNjQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuQEAgLTY3Miw3ICs2NzIsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0ICAgIChmbGFncyBcdTAwMjYgWDg2RU1VTF9GX1dSSVRFKSlcbiBcdFx0XHRnb3RvIGJhZDtcbiBcdFx0LyogdW5yZWFkYWJsZSBjb2RlIHNlZ21lbnQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IFg4NkVNVUxfRl9GRVRDSCkgXHUwMDI2XHUwMDI2IChkZXNjLnR5cGUgXHUwMDI2IDgpIFx1MDAyNlx1MDAyNiAhKGRlc2MudHlwZSBcdTAwMjYgMikpXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0JSQU5DSCkpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2ICEoZGVzYy50eXBlIFx1MDAyNiAyKSlcbiBcdFx0XHRnb3RvIGJhZDtcbiBcdFx0bGltID0gZGVzY19saW1pdF9zY2FsZWQoXHUwMDI2ZGVzYyk7XG4gXHRcdGlmICghKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2IChkZXNjLnR5cGUgXHUwMDI2IDQpKSB7XG5AQCAtNjkyLDYgKzY5MywxNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBMQVNTIGFuZCBjYW5vbmljYWxpdHkgY2hlY2tzIGdlbmVyYXRlIHRoZSBzYW1lIGZhdWx0IGFuZFxuK1x0ICogdGhlaXIgcmVsYXRpdmUgb3JkZXIgaXMgbm90IGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkLiBBbHNvLFxuK1x0ICogdGhlIFNETSBkb2Vzbid0IHByaW9yaXRpemUgTEFTUyB2aW9sYXRpb25zIGFnYWluc3RcbitcdCAqIGFsaWdubWVudC1jaGVjayBmYXVsdHMsIHNvIGFueSBvcmRlciBpcyBsZWdhbC5cbitcdCAqL1xuK1x0aWYgKGN0eHQtXHUwMDNlb3BzLVx1MDAzZWlzX2xhc3NfdmlvbGF0aW9uKGN0eHQsIGxhLCBzaXplLCBmbGFncykpXG4rXHRcdGdvdG8gYmFkO1xuK1xuIFx0aWYgKGxhIFx1MDAyNiAoaW5zbl9hbGlnbm1lbnQoY3R4dCwgc2l6ZSkgLSAxKSlcbiBcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbkBAIC03MjMsNyArNzM0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXNzaWduX2VpcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdWxvbmcgZHN0KVxuIFx0aWYgKGN0eHQtXHUwMDNlb3BfYnl0ZXMgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxuIFx0XHRhZGRyLmVhID0gZHN0IFx1MDAyNiAoKDFVTCBcdTAwM2NcdTAwM2MgKGN0eHQtXHUwMDNlb3BfYnl0ZXMgXHUwMDNjXHUwMDNjIDMpKSAtIDEpO1xuIFx0cmMgPSBfX2xpbmVhcml6ZShjdHh0LCBhZGRyLCBcdTAwMjZtYXhfc2l6ZSwgMSwgY3R4dC1cdTAwM2Vtb2RlLCBcdTAwMjZsaW5lYXIsXG4tXHRcdFx0IFg4NkVNVUxfRl9GRVRDSCk7XG4rXHRcdFx0IFg4NkVNVUxfRl9CUkFOQ0gpO1xuIFx0aWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpXG4gXHRcdGN0eHQtXHUwMDNlX2VpcCA9IGFkZHIuZWE7XG4gXHRyZXR1cm4gcmM7XG5AQCAtNzk4LDYgKzgwOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGptcF9yZWwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCByZWwpXG4gc3RhdGljIGludCBsaW5lYXJfcmVhZF9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGxpbmVhcixcbiBcdFx0XHQgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXplKVxuIHtcbitcdGlmIChjdHh0LVx1MDAzZW9wcy1cdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsIFg4NkVNVUxfRl9JTVBMSUNJVCkpXG4rXHRcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xuK1xuIFx0cmV0dXJuIGN0eHQtXHUwMDNlb3BzLVx1MDAzZXJlYWRfc3RkKGN0eHQsIGxpbmVhciwgZGF0YSwgc2l6ZSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24sIHRydWUpO1xuIH1cbiBcbkBAIC04MDUsNiArODE5LDEwIEBAIHN0YXRpYyBpbnQgbGluZWFyX3dyaXRlX3N5c3RlbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0XHQgICAgICAgdWxvbmcgbGluZWFyLCB2b2lkICpkYXRhLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4rXHRpZiAoY3R4dC1cdTAwM2VvcHMtXHUwMDNlaXNfbGFzc192aW9sYXRpb24oY3R4dCwgbGluZWFyLCBzaXplLFxuK1x0XHRcdFx0XHQgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX1dSSVRFKSlcbitcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4rXG4gXHRyZXR1cm4gY3R4dC1cdTAwM2VvcHMtXHUwMDNld3JpdGVfc3RkKGN0eHQsIGxpbmVhciwgZGF0YSwgc2l6ZSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24sIHRydWUpO1xuIH1cbiBcbkBAIC0yNTcyLDEyICsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdGJhc2UgfD0gKCh1NjQpYmFzZTMpIFx1MDAzY1x1MDAzYyAzMjtcbiAjZW5kaWZcbi1cdHIgPSBvcHMtXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSArIDEwMiwgXHUwMDI2aW9fYml0bWFwX3B0ciwgMiwgTlVMTCwgdHJ1ZSk7XG4rXHRyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgKyAxMDIsIFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIpO1xuIFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKGlvX2JpdG1hcF9wdHIgKyBwb3J0LzggXHUwMDNlIGRlc2NfbGltaXRfc2NhbGVkKFx1MDAyNnRyX3NlZykpXG4rXHRpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCArIDEgXHUwMDNlIGRlc2NfbGltaXRfc2NhbGVkKFx1MDAyNnRyX3NlZykpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdHIgPSBvcHMtXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSArIGlvX2JpdG1hcF9wdHIgKyBwb3J0LzgsIFx1MDAyNnBlcm0sIDIsIE5VTEwsIHRydWUpO1xuK1x0ciA9IGxpbmVhcl9yZWFkX3N5c3RlbShjdHh0LCBiYXNlICsgaW9fYml0bWFwX3B0ciArIHBvcnQvOCwgXHUwMDI2cGVybSwgMik7XG4gXHRpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoKHBlcm0gXHUwMDNlXHUwMDNlIGJpdF9pZHgpIFx1MDAyNiBtYXNrKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmYxMzZkM2QwYmE0MjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuKysrIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0xMDUsNiArMTA1LDcgQEAgc3RydWN0IHg4Nl9pbnN0cnVjdGlvbl9pbmZvIHtcbiAjZGVmaW5lIFg4NkVNVUxfRl9JTlZMUEdcdFx0QklUKDMpXG4gI2RlZmluZSBYODZFTVVMX0ZfTVNSXHRcdFx0QklUKDQpXG4gI2RlZmluZSBYODZFTVVMX0ZfRFRfTE9BRFx0XHRCSVQoNSlcbisjZGVmaW5lIFg4NkVNVUxfRl9CUkFOQ0hcdFx0QklUKDYpXG4gXG4gc3RydWN0IHg4Nl9lbXVsYXRlX29wcyB7XG4gXHR2b2lkICgqdm1fYnVnZ2VkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XG5AQCAtMjQ4LDcgKzI0OSw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMge1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLVxuK1x0Ym9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgZ3ZhX3QgYWRkcixcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXHRib29sICgqaXNfY2Fub25pY2FsX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmggYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5pbmRleCA0NDdmMGVjM2U2M2U0Li5iZTg2MjE2OTVjNDE5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuaFxuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxuQEAgLTI4LDcgKzI4LDcgQEAgc3RhdGljX2Fzc2VydCghKEtWTV9QT1NTSUJMRV9DUjBfR1VFU1RfQklUUyBcdTAwMjYgWDg2X0NSMF9QRFBUUl9CSVRTKSk7XG4gXHRcdFx0ICB8IFg4Nl9DUjRfT1NYU0FWRSB8IFg4Nl9DUjRfU01FUCB8IFg4Nl9DUjRfRlNHU0JBU0UgXFxcbiBcdFx0XHQgIHwgWDg2X0NSNF9PU1hNTUVYQ1BUIHwgWDg2X0NSNF9MQTU3IHwgWDg2X0NSNF9WTVhFIFxcXG4gXHRcdFx0ICB8IFg4Nl9DUjRfU01BUCB8IFg4Nl9DUjRfUEtFIHwgWDg2X0NSNF9VTUlQIFxcXG4tXHRcdFx0ICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUKSlcbitcdFx0XHQgIHwgWDg2X0NSNF9MQU1fU1VQIHwgWDg2X0NSNF9DRVQgfCBYODZfQ1I0X0xBU1MpKVxuIFxuICNkZWZpbmUgQ1I4X1JFU0VSVkVEX0JJVFMgKH4odW5zaWduZWQgbG9uZylYODZfQ1I4X1RQUilcbiBcbkBAIC00MDUsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBib29sIF9fa3ZtX2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuIFx0XHRfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9QQ0lERTsgICAgICAgXFxcbiBcdGlmICghX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfTEFNKSkgICAgICAgICAgIFxcXG4gXHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0xBTV9TVVA7ICAgICBcXFxuK1x0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQVNTKSkgICAgICAgICAgXFxcbitcdFx0X19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFTUzsgICAgICAgIFxcXG4gXHRpZiAoIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX1NIU1RLKSBcdTAwMjZcdTAwMjYgICAgICAgXFxcbiBcdCAgICAhX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfSUJUKSkgICAgICAgICAgIFxcXG4gXHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0NFVDsgICAgICAgICBcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDBmZjMyMzBmZDk1ZTguLjM1ODBhYWRhOGQyYzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xMDMxLDYgKzEwMzEsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LnZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvciA9IGt2bV92Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IsXG4gXG4gXHQuZ2V0X3VudGFnZ2VkX2FkZHIgPSB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIsXG4rXHQuaXNfbGFzc192aW9sYXRpb24gPSB2bXhfaXNfbGFzc192aW9sYXRpb24sXG4gXG4gXHQubWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KG1lbV9lbmNfaW9jdGwpLFxuIFx0LnZjcHVfbWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY19pb2N0bCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTI5OSwxMSArNTI5OSwxMiBAQCBpbnQgZ2V0X3ZteF9tZW1fYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxuIFx0XHRcdCpyZXQgPSBvZmY7XG4gXG4gXHRcdCpyZXQgPSB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIodmNwdSwgKnJldCwgMCk7XG4tXHRcdC8qIExvbmcgbW9kZTogI0dQKDApLyNTUygwKSBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgaXMgaW4gYVxuLVx0XHQgKiBub24tY2Fub25pY2FsIGZvcm0uIFRoaXMgaXMgdGhlIG9ubHkgY2hlY2sgb24gdGhlIG1lbW9yeVxuLVx0XHQgKiBkZXN0aW5hdGlvbiBmb3IgbG9uZyBtb2RlIVxuK1x0XHQvKlxuK1x0XHQgKiBMb25nIG1vZGU6ICNHUCgwKS8jU1MoMCkgaWYgdGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIGFcbitcdFx0ICogbm9uLWNhbm9uaWNhbCBmb3JtLCBvciBpZiB0aGUgYWNjZXNzIHZpb2xhdGVzIExBU1MuXG4gXHRcdCAqL1xuLVx0XHRleG4gPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqcmV0LCB2Y3B1LCAwKTtcbitcdFx0ZXhuID0gaXNfbm9uY2Fub25pY2FsX2FkZHJlc3MoKnJldCwgdmNwdSwgMCkgfHxcbitcdFx0ICAgICAgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHZjcHUsICpyZXQsIGxlbiwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIG5vdCBpbiBsb25nIG1vZGUsIHRoZSB2aXJ0dWFsL2xpbmVhciBhZGRyZXNzIGlzXG5AQCAtNjEwOCw3ICs2MTA5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodHlwZSAhPSBWTVhfVlBJRF9FWFRFTlRfQUxMX0NPTlRFWFQgXHUwMDI2XHUwMDI2ICFvcGVyYW5kLnZwaWQpXG4gXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7XG4gXG4tXHQvKiBMQU0gZG9lc24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovXG4rXHQvKiBMQU0gYW5kIExBU1MgZG9uJ3QgYXBwbHkgdG8gYWRkcmVzc2VzIHRoYXQgYXJlIGlucHV0cyB0byBUTEIgaW52YWxpZGF0aW9uLiAqL1xuIFx0aWYgKHR5cGUgPT0gVk1YX1ZQSURfRVhURU5UX0lORElWSURVQUxfQUREUiBcdTAwMjZcdTAwMjZcbiBcdCAgICBpc19ub25jYW5vbmljYWxfaW52bHBnX2FkZHJlc3Mob3BlcmFuZC5nbGEsIHZjcHUpKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9JTlZBTElEX09QRVJBTkRfVE9fSU5WRVBUX0lOVlZQSUQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvc2d4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3NneC5jXG5pbmRleCA3NzFjNzVhNTgzNDM2Li40YWMzMDVlZDZkZWExIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xuQEAgLTM5LDcgKzM5LDggQEAgc3RhdGljIGludCBzZ3hfZ2V0X2VuY2xzX2d2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuIFx0XHRmYXVsdCA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKGxpa2VseShpc182NF9iaXRfbW9kZSh2Y3B1KSkpIHtcbiBcdFx0Kmd2YSA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqZ3ZhLCAwKTtcbi1cdFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKTtcbitcdFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fFxuK1x0XHRcdHZteF9pc19sYXNzX3Zpb2xhdGlvbih2Y3B1LCAqZ3ZhLCBzaXplLCAwKTtcbiBcdH0gZWxzZSB7XG4gXHRcdCpndmEgXHUwMDI2PSAweGZmZmZmZmZmO1xuIFx0XHRmYXVsdCA9IChzLnVudXNhYmxlKSB8fFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBlM2JmZTZhY2ExYTBlLi4zMDgyMTk1OTA2ZGE4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTc4ODUsNiArNzg4NSw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdGVudHJ5ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnlfaW5kZXgodmNwdSwgMHg3LCAxKTtcbiBcdGNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFNX1NVUCwgICAgZWF4LCBmZWF0dXJlX2JpdChMQU0pKTtcbitcdGNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFTUywgICAgICAgZWF4LCBmZWF0dXJlX2JpdChMQVNTKSk7XG4gXG4gI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlXG4gfVxuQEAgLTg1NzEsNyArODU3Miw4IEBAIGd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzXG4gXHRpbnQgbGFtX2JpdDtcbiBcdHVuc2lnbmVkIGxvbmcgY3IzX2JpdHM7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfSU1QTElDSVQgfCBYODZFTVVMX0ZfSU5WTFBHKSlcbitcdGlmIChmbGFncyBcdTAwMjYgKFg4NkVNVUxfRl9GRVRDSCB8IFg4NkVNVUxfRl9CUkFOQ0ggfCBYODZFTVVMX0ZfSU1QTElDSVQgfFxuK1x0XHQgICAgIFg4NkVNVUxfRl9JTlZMUEcpKVxuIFx0XHRyZXR1cm4gZ3ZhO1xuIFxuIFx0aWYgKCFpc182NF9iaXRfbW9kZSh2Y3B1KSlcbkBAIC04NjAzLDYgKzg2MDUsNTMgQEAgZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3NcbiBcdHJldHVybiAoc2lnbl9leHRlbmQ2NChndmEsIGxhbV9iaXQpIFx1MDAyNiB+QklUX1VMTCg2MykpIHwgKGd2YSBcdTAwMjYgQklUX1VMTCg2MykpO1xuIH1cbiBcbitib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdGNvbnN0IGJvb2wgaXNfc3VwZXJ2aXNvcl9hZGRyZXNzID0gISEoZ3ZhIFx1MDAyNiBCSVRfVUxMKDYzKSk7XG4rXHRjb25zdCBib29sIGltcGxpY2l0X3N1cGVydmlzb3IgPSAhIShmbGFncyBcdTAwMjYgWDg2RU1VTF9GX0lNUExJQ0lUKTtcbitcdGNvbnN0IGJvb2wgZmV0Y2ggPSAhIShmbGFncyBcdTAwMjYgWDg2RU1VTF9GX0ZFVENIKTtcbitcbitcdGlmICgha3ZtX2lzX2NyNF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjRfTEFTUykgfHwgIWlzX2xvbmdfbW9kZSh2Y3B1KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIElOVkxQRyBpc24ndCBzdWJqZWN0IHRvIExBU1MsIGUuZy4gdG8gYWxsb3cgaW52YWxpZGF0aW5nIHVzZXJzcGFjZVxuK1x0ICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbid0IHN1YmplY3RcbitcdCAqIHRvIExBU1MgaW4gb3JkZXIgdG8gc2ltcGxpZnkgZmFyIGNvbnRyb2wgdHJhbnNmZXJzICh0aGUgc3Vic2VxdWVudFxuK1x0ICogZmV0Y2ggd2lsbCBlbmZvcmNlIExBU1MgYXMgYXBwcm9wcmlhdGUpLlxuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IChYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lOVkxQRykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghaW1wbGljaXRfc3VwZXJ2aXNvciBcdTAwMjZcdTAwMjYgdm14X2dldF9jcGwodmNwdSkgPT0gMylcbitcdFx0cmV0dXJuIGlzX3N1cGVydmlzb3JfYWRkcmVzcztcbitcbitcdC8qXG4rXHQgKiBMQVNTIGVuZm9yY2VtZW50IGZvciBzdXBlcnZpc29yLW1vZGUgZGF0YSBhY2Nlc3NlcyBkZXBlbmRzIG9uIFNNQVBcbitcdCAqIGJlaW5nIGVuYWJsZWQsIGFuZCBsaWtlIFNNQVAgaWdub3JlcyBleHBsaWNpdCBhY2Nlc3NlcyBpZiBSRkxBR1MuQUM9MS5cbitcdCAqL1xuK1x0aWYgKCFmZXRjaCkge1xuK1x0XHRpZiAoIWt2bV9pc19jcjRfYml0X3NldCh2Y3B1LCBYODZfQ1I0X1NNQVApKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yIFx1MDAyNlx1MDAyNiAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgXHUwMDI2IFg4Nl9FRkxBR1NfQUMpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgZW50aXJlIGFjY2VzcyBtdXN0IGJlIGluIHRoZSBhcHByb3ByaWF0ZSBhZGRyZXNzIHNwYWNlLiAgTm90ZSxcbitcdCAqIGlmIExBTSBpcyBzdXBwb3J0ZWQsIEBndmEgaGFzIGFscmVhZHkgYmVlbiB1bnRhZ2dlZCwgc28gYmFycmluZyBhXG4rXHQgKiBtYXNzaXZlIGFyY2hpdGVjdHVyZSBjaGFuZ2UgdG8gZXhwYW5kIHRoZSBjYW5vbmljYWwgYWRkcmVzcyByYW5nZSxcbitcdCAqIGl0J3MgaW1wb3NzaWJsZSBmb3IgYSB1c2VyIGFjY2VzcyB0byBzdHJhZGRsZSB1c2VyIGFuZCBzdXBlcnZpc29yXG4rXHQgKiBhZGRyZXNzIHNwYWNlcy5cbitcdCAqL1xuK1x0aWYgKHNpemUgXHUwMDI2XHUwMDI2ICEoKGd2YSArIHNpemUgLSAxKSBcdTAwMjYgQklUX1VMTCg2MykpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiAhaXNfc3VwZXJ2aXNvcl9hZGRyZXNzO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgaW50IHZteF9oYW5kbGVfaW50ZWxfcHRfaW50cih2b2lkKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbmluZGV4IGRjODUxN2YxNWJjNDYuLjQzZGY3MjVhNzdmMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5AQCAtMzk3LDYgKzM5Nyw5IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFxuK2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuK1x0XHRcdCAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1xuIHZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggZDk0YjU5MTQwYzQ1Mi4uYTZlYTczNmZkNDhmYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTgwMCw2ICs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0XHRcdFx0ICAgICAgIGFkZHIsIGZsYWdzKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKGlzX2xhc3NfdmlvbGF0aW9uKShlbXVsX3RvX3ZjcHUoY3R4dCksIGFkZHIsIHNpemUsIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdFx0XHQgICAgICAgZ3ZhX3QgYWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC01ODU5LDYgKzU4NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcbiBcdC5nZXRfeGNyICAgICAgICAgICAgID0gZW11bGF0b3JfZ2V0X3hjcixcbiBcdC5zZXRfeGNyICAgICAgICAgICAgID0gZW11bGF0b3Jfc2V0X3hjcixcbiBcdC5nZXRfdW50YWdnZWRfYWRkciAgID0gZW11bGF0b3JfZ2V0X3VudGFnZ2VkX2FkZHIsXG4rXHQuaXNfbGFzc192aW9sYXRpb24gICA9IGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uLFxuIFx0LmlzX2Nhbm9uaWNhbF9hZGRyICAgPSBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcixcbiBcdC5wYWdlX2FkZHJlc3NfdmFsaWQgID0gZW11bGF0b3JfcGFnZV9hZGRyZXNzX3ZhbGlkLFxuIH07XG5AQCAtMTA3NDUsNyArMTA3NTIsNyBAQCBpbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6XG4gXHRcdC8qXG4tXHRcdCAqIExBTSBkb2Vzbid0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCXG4rXHRcdCAqIExBTSBhbmQgTEFTUyBkb24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxuIFx0XHQgKiBpbnZhbGlkYXRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoKCFwY2lkX2VuYWJsZWQgXHUwMDI2XHUwMDI2IChvcGVyYW5kLnBjaWQgIT0gMCkpIHx8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDAwMTIzMTY5YTE5MGEuLjg2ZmE5M2UwZjZjMDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtOTEsNiArOTEsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fcHZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2J1c2xvY2tfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvbGFzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9tb25pdG9yX213YWl0X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L21zcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCA2ZTZmNzAwMzU1MDhhLi5mNDI1MTY2MTc0ZjlmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbkBAIC03OSw2ICs3OSw3IEBAIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKTtcbiAjZGVmaW5lIFg4Nl9DUjRfU01FUFx0XHQoMXVsIFx1MDAzY1x1MDAzYyAyMClcbiAjZGVmaW5lIFg4Nl9DUjRfU01BUFx0XHQoMXVsIFx1MDAzY1x1MDAzYyAyMSlcbiAjZGVmaW5lIFg4Nl9DUjRfUEtFXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDIyKVxuKyNkZWZpbmUgWDg2X0NSNF9MQVNTXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDI3KVxuIFxuIHN0cnVjdCB4c3RhdGVfaGVhZGVyIHtcbiBcdHU2NFx0XHRcdFx0eHN0YXRlX2J2O1xuQEAgLTE5NSw2ICsxOTYsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9jcHVfZmVhdHVyZSB7XG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfU1BFQ19DVFJMXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHg3LCAwLCBFRFgsIDI2KVxuICNkZWZpbmVcdFg4Nl9GRUFUVVJFX0FSQ0hfQ0FQQUJJTElUSUVTXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyOSlcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9QS1NcdFx0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRUNYLCAzMSlcbisjZGVmaW5lXHRYODZfRkVBVFVSRV9MQVNTXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHg3LCAxLCBFQVgsIDYpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfWFRJTEVDRkdcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweEQsIDAsIEVBWCwgMTcpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfWFRJTEVEQVRBXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE4KVxuICNkZWZpbmVcdFg4Nl9GRUFUVVJFX1hTQVZFU1x0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4RCwgMSwgRUFYLCAzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbGFzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2xhc3NfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2M1Y2ZhMjRjMmJkZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuY1xuQEAgLTAsMCArMSw1NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSB0ZXN0XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uLlxuKyAqXG4rICogT25seSB0ZXN0IHRoYXQgdGhlIGd1ZXN0IGNhbid0IHNldCBDUjQuTEFTUyB3aGVuIExBU1MgaXNuJ3RcbisgKiBlbnVtZXJhdGVkIGluIHRoZSBndWVzdCdzIENQVUlELiAgS1ZNJ3MgaGFuZGxpbmcgb2YgQ1I0LkxBU1MgdmlhXG4rICogS1ZNX1NFVF9TUkVHUyBpcyBjb3ZlcmVkIGJ5IHNldF9zcmVnc190ZXN0LlxuKyAqXG4rICogVGVzdGluZyBMQVNTIGVuZm9yY2VtZW50IHJlcXVpcmVzIHJ1bm5pbmcgc3VwZXJ2aXNvciBjb2RlIGluIHRoZVxuKyAqIHVwcGVyIGhhbGYgb2YgdGhlIGFkZHJlc3Mgc3BhY2UsIHdoaWNoIHRoZSBLVk0gc2VsZnRlc3RzIGZyYW1ld29ya1xuKyAqIGRvZXNuJ3Qgc3VwcG9ydC4gRW5hYmxpbmcgQ1I0LkxBU1MgaW4gdGhlIGN1cnJlbnQgZnJhbWV3b3JrIHdvdWxkXG4rICogbWFrZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBmZXRjaCBhIHZpb2xhdGlvbiBhbmQgdHJpcGxlLWZhdWx0IHRoZVxuKyAqIGd1ZXN0LlxuKyAqL1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rXG4rLypcbisgKiBXaXRob3V0IExBU1MgaW4gQ1BVSUQsIGEgZ3Vlc3Qgd3JpdGUgbXVzdCBnZW5lcmF0ZSAjR1Agd2l0aG91dFxuKyAqIGNoYW5naW5nIENSNC4gUmVzZXJ2ZWQgYml0cyBhcmUgb3duZWQgYnkgS1ZNIHNvIHRoZSB3cml0ZSBpc1xuKyAqIGd1YXJhbnRlZWQgdG8gZXhpdCB0byBLVk0uXG4rICovXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuK3tcbitcdHU4IHZlY3RvcjtcbitcbitcdEdVRVNUX0FTU0VSVCghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTtcbitcbitcdHZlY3RvciA9IGt2bV9hc21fc2FmZShcIm1vdiAlW2NyNF0sICUlY3I0XCIsXG4rXHRcdFx0ICAgICAgW2NyNF0gXCJyXCIoZ2V0X2NyNCgpIHwgWDg2X0NSNF9MQVNTKSk7XG4rXHRfX0dVRVNUX0FTU0VSVCh2ZWN0b3IgPT0gR1BfVkVDVE9SLFxuK1x0XHQgICAgICAgXCJXYW50ZWQgI0dQIG9uIENSNC5MQVNTLCBnb3QgJXNcIiwgZXhfc3RyKHZlY3RvcikpO1xuK1x0R1VFU1RfQVNTRVJUKCEoZ2V0X2NyNCgpIFx1MDAyNiBYODZfQ1I0X0xBU1MpKTtcbitcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcbitcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9MQVNTKSk7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuK1x0dmNwdV9jbGVhcl9jcHVpZF9mZWF0dXJlKHZjcHUsIFg4Nl9GRUFUVVJFX0xBU1MpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xuaW5kZXggNjAzMjI2ZmZlNDM3NC4uOGIzNzVmZWE4NGQwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5AQCAtNzIsNiArNzIsOCBAQCBzdGF0aWMgdTY0IGNhbGNfc3VwcG9ydGVkX2NyNF9mZWF0dXJlX2JpdHModm9pZClcbiBcdFx0Y3I0IHw9IFg4Nl9DUjRfU01BUDtcbiBcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9QS1UpKVxuIFx0XHRjcjQgfD0gWDg2X0NSNF9QS0U7XG4rXHRpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpXG4rXHRcdGNyNCB8PSBYODZfQ1I0X0xBU1M7XG4gXG4gXHRyZXR1cm4gY3I0O1xuIH1cbkBAIC0xMjgsNiArMTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNClcbiBcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjQsIHNyZWdzLCBYODZfQ1I0X1NNRVApO1xuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfU01BUCk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9QS0UpO1xuK1x0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfTEFTUyk7XG4gXG4gXHRmb3IgKGkgPSAzMjsgaSBcdTAwM2MgNjQ7IGkrKylcbiBcdFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIEJJVChpKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXG5pbmRleCA0MzQwNjUyMTVkMTI3Li4yNTJkNzU3ZmMxYjJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGVcbkBAIC0xOSw3ICsxOSw4IEBAIFRBUkdFVFNfQ18zMkJJVF9PTkxZIDo9IGVudHJ5X2Zyb21fdm04NiB0ZXN0X3N5c2NhbGxfdmRzbyB1bndpbmRfdmRzbyBcXFxuIFx0XHRcdHRlc3RfRkNNT1YgdGVzdF9GQ09NSSB0ZXN0X0ZJU1RUUCBcXFxuIFx0XHRcdHZkc29fcmVzdG9yZXJcbiBUQVJHRVRTX0NfNjRCSVRfT05MWSA6PSBmc2dzYmFzZSBzeXNyZXRfcmlwIHN5c2NhbGxfbnVtYmVyaW5nIFxcXG4tXHRcdFx0Y29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweFxuK1x0XHRcdGNvcnJ1cHRfeHN0YXRlX2hlYWRlciBhbXggbGFtIHRlc3Rfc2hhZG93X3N0YWNrIGF2eCBhcHggXFxcbitcdFx0XHRsYXNzXG4gIyBTb21lIHNlbGZ0ZXN0cyByZXF1aXJlIDMyYml0IHN1cHBvcnQgZW5hYmxlZCBhbHNvIG9uIDY0Yml0IHN5c3RlbXNcbiBUQVJHRVRTX0NfMzJCSVRfTkVFREVEIDo9IGxkdF9nZHQgcHRyYWNlX3N5c2NhbGxcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhc3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkZDNkYzhlNDFkMWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmNcbkBAIC0wLDAgKzEsMTk2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGxhc3MuYyAtIFRlc3QgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgZW5mb3JjZW1lbnRcbisgKlxuKyAqIFdpdGggTEFTUyBlbmFibGVkLCBhIHVzZXItbW9kZSByZWFkLCB3cml0ZSBvciBpbnN0cnVjdGlvbiBmZXRjaCBhdCBhXG4rICoga2VybmVsIGFkZHJlc3MgcmFpc2VzIGEgI0dQIGluc3RlYWQgb2YgdGhlICNQRiB0aGF0IFNNQVAvU01FUCB3b3VsZFxuKyAqIHByb2R1Y2UuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWNvbnRleHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiaGVscGVycy5oXCJcbitcbisjaWZuZGVmIF9feDg2XzY0X19cbisjIGVycm9yIFRoaXMgdGVzdCBpcyA2NC1iaXQgb25seVxuKyNlbmRpZlxuK1xuKy8qXG4rICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsXG4rICogYWRkcmVzcyByYWlzZXMgdGhlIHZlcnkgc2FtZSAjR1AgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiwgc28gdGhlXG4rICogYWRkcmVzcyBoYXMgdG8gYmUgY2Fub25pY2FsIHRvIGF0dHJpYnV0ZSB0aGUgZmF1bHQgdG8gTEFTUy5cbisgKlxuKyAqIEJpdHMgNjM6NDcgYXJlIGFsbCBzZXQgaGVyZSwgd2hpY2ggaXMgY2Fub25pY2FsIHdpdGggNC1sZXZlbCBwYWdpbmdcbisgKiBhcyB3ZWxsIGFzIDUtbGV2ZWwgcGFnaW5nLlxuKyAqL1xuKyNkZWZpbmUgS0VSTkVMX0FERFJcdDB4ZmZmZjgwMDAwMDAwMDAwMFVMXG4rXG4rc3RhdGljIHNpZ2ptcF9idWYgam1wYnVmO1xuK1xuK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGZhdWx0X3RyYXBubywgZmF1bHRfZXJyLCBmYXVsdF9yaXA7XG4rXG4rLyogSGFuZGxlIFNJR1NFR1YgKCNHUCBhbmQgI1BGKSBhcyB3ZWxsIGFzIFNJR0JVUyAoI1NTKSAqL1xuK3N0YXRpYyB2b2lkIGZhdWx0X2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICppbmZvLCB2b2lkICpjdHhfdm9pZClcbit7XG4rXHR1Y29udGV4dF90ICpjdHggPSAodWNvbnRleHRfdCAqKWN0eF92b2lkO1xuK1xuK1x0ZmF1bHRfdHJhcG5vID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19UUkFQTk9dO1xuK1x0ZmF1bHRfZXJyID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19FUlJdO1xuK1x0ZmF1bHRfcmlwID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19SSVBdO1xuK1x0c2lnbG9uZ2ptcChqbXBidWYsIDEpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKVxuK3tcbitcdHN0YXRpYyBjb25zdCBjaGFyIGRlbGltc1tdID0gXCIgXFxuXCI7XG4rXHR1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4O1xuK1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1x0Y2hhciBsaW5lWzQwOTZdO1xuK1x0RklMRSAqY3B1aW5mbztcbitcbitcdC8qXG4rXHQgKiBPbmx5IHRoZSBjcHVpbmZvIGZsYWcgcmVmbGVjdHMgd2hldGhlciB0aGUga2VybmVsIGFjdHVhbGx5XG4rXHQgKiBlbmFibGVkIExBU1MuXG4rXHQgKi9cbitcdGNwdWluZm8gPSBmb3BlbihcIi9wcm9jL2NwdWluZm9cIiwgXCJyXCIpO1xuK1x0aWYgKCFjcHVpbmZvKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJmYWlsZWQgdG8gb3BlbiAvcHJvYy9jcHVpbmZvXFxuXCIpO1xuK1xuK1x0d2hpbGUgKCFmb3VuZCBcdTAwMjZcdTAwMjYgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBjcHVpbmZvKSkge1xuK1x0XHRjaGFyICpmbGFnO1xuK1xuK1x0XHRpZiAoc3RybmNtcChsaW5lLCBcImZsYWdzXCIsIDUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBNYXRjaCB3aG9sZSB3b3JkcyBvbmx5LCBub3QgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBmbGFnLiAqL1xuK1x0XHRmb3IgKGZsYWcgPSBzdHJ0b2sobGluZSwgZGVsaW1zKTsgZmxhZzsgZmxhZyA9IHN0cnRvayhOVUxMLCBkZWxpbXMpKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoZmxhZywgXCJsYXNzXCIpKSB7XG4rXHRcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGZjbG9zZShjcHVpbmZvKTtcbitcbitcdGlmIChmb3VuZClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBDaGVjayBDUFVJRC4oRUFYPTA3SCxFQ1g9MSk6RUFYLkxBU1NbYml0IDZdICovXG4rXHRfX2NwdWlkX2NvdW50KDB4NywgMHgxLCBlYXgsIGVieCwgZWN4LCBlZHgpO1xuK1x0aWYgKGVheCBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIDYpKVxuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkxBU1MgaXMgc3VwcG9ydGVkIGJ5IHRoZSBDUFUgYnV0IG5vdCBlbmFibGVkIGJ5IHRoZSBrZXJuZWxcXG5cIik7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qIEdlbmVyYWwgUHJvdGVjdGlvbiBGYXVsdCAodHJhcG5yLmggaXMgbm90IGV4cG9ydGVkIHRvIHVhcGkpICovXG4rI2RlZmluZSBYODZfVFJBUF9HUFx0MTNcbitcbisvKiBBIExBU1MgdmlvbGF0aW9uIHJhaXNlcyBhICNHUCB3aXRoIGEgbnVsbCBlcnJvciBjb2RlLiAqL1xuK3N0YXRpYyBib29sIGlzX2xhc3NfdmlvbGF0aW9uKHZvaWQpXG4re1xuK1x0cmV0dXJuIGZhdWx0X3RyYXBubyA9PSBYODZfVFJBUF9HUCBcdTAwMjZcdTAwMjYgIWZhdWx0X2Vycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfcmVhZCh2b2lkKVxuK3tcbitcdGlmIChzaWdzZXRqbXAoam1wYnVmLCAxKSA9PSAwKSB7XG4rXHRcdCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUtFUk5FTF9BRERSO1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCJ0aGUgcmVhZCBkaWQgbm90IGZhdWx0XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXG4rXHRcdFx0IFwidGhlIHJlYWQgZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcblwiLFxuK1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3dyaXRlKHZvaWQpXG4re1xuK1x0aWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHtcbitcdFx0Kih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopS0VSTkVMX0FERFIgPSAweDFhNTU7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcInRoZSB3cml0ZSBkaWQgbm90IGZhdWx0XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXG4rXHRcdFx0IFwidGhlIHdyaXRlIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcXG5cIixcbitcdFx0XHQgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIpO1xuK31cbitcbisvKlxuKyAqIFVzZSBpbmxpbmUgYXNtIHJhdGhlciB0aGFuIGEgY2FsbCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcjogYSBkaXJlY3RcbisgKiAnY2FsbCByZWwzMicgY2Fubm90IHJlYWNoIGEga2VybmVsIGFkZHJlc3MsIGFuZCBsZXR0aW5nIHRoZSBjb21waWxlciBsb3dlclxuKyAqIHRoZSBpbmRpcmVjdCBicmFuY2ggcmlza3Mgcm91dGluZyBpdCB0aHJvdWdoIGEgdGh1bmssIG9yIGVsaWRpbmcgaXRcbisgKiBhbHRvZ2V0aGVyLCBlaXRoZXIgb2Ygd2hpY2ggd291bGQgc3RvcCB0ZXN0aW5nIHRoZSBmZXRjaC5cbisgKi9cbitzdGF0aWMgdm9pZCBkb19mZXRjaCh1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcImNhbGwgKiVbZm5dXCJcbitcdFx0ICAgICAgOiA6IFtmbl0gXCJyXCIgKGFkZHIpXG4rXHRcdCAgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJheFwiLCBcInJjeFwiLCBcInJkeFwiLCBcInJzaVwiLCBcInJkaVwiLFxuK1x0XHRcdFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLCBcInIxMVwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfZmV0Y2godm9pZClcbit7XG4rXHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xuK1x0XHRkb19mZXRjaChLRVJORUxfQUREUik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEV4ZWN1dGlvbiByZXN1bWVkIGF0IGFuIHVua25vd24gcG9pbnQgd2l0aCBhbiB1bmRlZmluZWRcbitcdFx0ICogcmVnaXN0ZXIgc3RhdGUsIHNvIGRvbid0IHRyeSB0byBydW4gdGhlIHJlc3Qgb2YgdGhlIHRlc3RzLlxuK1x0XHQgKi9cbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwidGhlIGZldGNoIHJldHVybmVkIHdpdGhvdXQgZmF1bHRpbmdcXG5cIik7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQnJhbmNoIGluc3RydWN0aW9ucyBkbyBub3QgY2hlY2sgdGhlaXIgdGFyZ2V0IGFnYWluc3QgTEFTUy4gVGhlXG4rXHQgKiB2aW9sYXRpb24gaGFwcGVucyB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBpcyB1c2VkIHRvIGZldGNoIHRoZVxuK1x0ICogbmV4dCBpbnN0cnVjdGlvbiwgc28gdGhlIGZhdWx0IG11c3QgYmUgcmVwb3J0ZWQgYXQgdGhlIHRhcmdldFxuK1x0ICogcmF0aGVyIHRoYW4gYXQgdGhlIGJyYW5jaC5cbitcdCAqL1xuK1x0aWYgKGZhdWx0X3JpcCAhPSBLRVJORUxfQUREUikge1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCJ0aGUgZmV0Y2ggZmF1bHRlZCBhdCBSSVAgMHglbHggaW5zdGVhZCBvZiAweCVseFxcblwiLFxuK1x0XHRcdFx0ICAgICAgZmF1bHRfcmlwLCAodW5zaWduZWQgbG9uZylLRVJORUxfQUREUik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSxcbitcdFx0XHQgXCJ0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcblwiLFxuK1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4rfVxuK1xuKyNkZWZpbmUgVE9UQUxfVEVTVFMgM1xuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcbitcdGlmICghaXNfbGFzc19hY3RpdmUoKSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJMQVNTIGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1xuK1x0a3NmdF9zZXRfcGxhbihUT1RBTF9URVNUUyk7XG4rXG4rXHRzZXRoYW5kbGVyKFNJR1NFR1YsIGZhdWx0X2hhbmRsZXIsIDApO1xuK1x0LyogT25seSB0byByZXBvcnQgYSAjU1M7IExBU1Mgc2hvdWxkbid0IGNhdXNlIG9uZSBoZXJlLiAqL1xuK1x0c2V0aGFuZGxlcihTSUdCVVMsIGZhdWx0X2hhbmRsZXIsIDApO1xuK1xuK1x0a3NmdF9wcmludF9tc2coXCJBY2Nlc3NpbmcgdGhlIGtlcm5lbCBhZGRyZXNzIDB4JWx4IGZyb20gdXNlcnNwYWNlXFxuXCIsXG4rXHRcdCAgICAgICAodW5zaWduZWQgbG9uZylLRVJORUxfQUREUik7XG4rXHR0ZXN0X2tlcm5lbF9yZWFkKCk7XG4rXHR0ZXN0X2tlcm5lbF93cml0ZSgpO1xuK1x0dGVzdF9rZXJuZWxfZmV0Y2goKTtcbitcbitcdGNsZWFyaGFuZGxlcihTSUdCVVMpO1xuK1x0Y2xlYXJoYW5kbGVyKFNJR1NFR1YpO1xuK1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE1OjM5LjkxNDU1NDYwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MDU2Nzc4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTEFTUyBTdXBwb3J0IGluIEtWTTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCdzIGFsbCBhYm91dCBicmluZ2luZyBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBzdXBwb3J0IGludG8gS1ZNIG9uIHg4Ni4gVGhpcyBpc24ndCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IEtWTSBoYW5kbGVzIGFkZHJlc3Mgc3BhY2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIHNwcmF3bGluZyBhY3Jvc3MgYSBwcmV0dHkgZXh0ZW5zaXZlIHJhbmdlIG9mIGZpbGVzLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gbG9naWMuIFdlJ3JlIHRhbGtpbmcgaGVhZGVyIGZpbGVzLCB0aGUgQ1BVSUQgaGFuZGxpbmcsIHRoZSBlbXVsYXRvciwgcmVnaXN0ZXIgaGFuZGxpbmcsIGFuZCBWTVgtc3BlY2lmaWMgY29kZSDigJMgZXZlbiB0aGUgc2VsZnRlc3RzIGFyZSBpbnZvbHZlZCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIGFkZGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExBU1MgZmVhdHVyZSBpcyBiZWluZyBpbnRyb2R1Y2VkIGFuZCB3aGF0IHRoZSBlbXVsYXRvciBkb2VzIHdoZW4gdGhlcmUncyBhbiBMQVNTIHZpb2xhdGlvbi4gSXQgbG9va3MgbGlrZSBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIGlzIGFkZGluZyB0aGUgYFg4Nl82NF9GKExBU1MpYCBDUFUgZmVhdHVyZSBmbGFnLCB3aGljaCBpcyB0aGUgYmFzZWxpbmUuIFxuXG5JJ20gemVyb2luZyBpbiBvbiBmdW5jdGlvbnMgbGlrZSBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYCwgYF9fa3ZtX2lzX3ZhbGlkX2NyNGAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGhhbmRsZV9pbnZ2cGlkYCwgYHNneF9nZXRfZW5jbHNfZ3ZhYCwgYG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlYCwgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAsIGFuZCB0aGUgbmV3IGZ1bmN0aW9ucyBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBhbmQgYGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uYCBhcyB0aGUga2V5IGFyZWFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCBhbHNvIHdoYXQgYGt2bV9oYW5kbGVfaW52cGNpZGAgZG9lcyBoZXJlLlxuXG5UaGUga2V5IHF1ZXN0aW9ucyBoZXJlIGFyZTpcblxuMS4gIEhvdyBpcyB0aGUgTEFTUyBmZWF0dXJlIGV4cG9zZWQgdG8gdGhlIGd1ZXN0P1xuMi4gIEhvdyBhcmUgTEFTUyB2aW9sYXRpb25zIGRldGVjdGVkIGFuZCBoYW5kbGVkP1xuMy4gIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGVtdWxhdG9yIGFuZCB0aGUgVk1YIGNvZGUgaW4gZGVhbGluZyB3aXRoIExBU1MgaXNzdWVzP1xuNC4gIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgU0dYP1xuXG5JdCBsb29rcyBsaWtlIHRoZSBgY3R4dC1cdTAwM2VvcHMtXHUwMDNlaXNfbGFzc192aW9sYXRpb25gIGZsYWcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRoZSBlbXVsYXRpb24gbG9naWMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIHN0cnVjdHVyZSwgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoZSBidWlsZCBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMuIFRoZSBmaWxlIGxvY2F0aW9ucyBpbmRpY2F0ZSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IGNyaXRpY2FsIGRlcGVuZGVuY3ksIG9yIGlmIG1vcmUgZ3JhbnVsYXIgS1ZNIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHNob3VsZCBjb25maXJtIHRoYXQsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byBnZXQgYWxsIHRoZSBwaWVjZXMgZm9yIGl0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6NDguNTIwMjM0ODAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTk4ODU3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTo0OS43MjAxMzM1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzgwMDUwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AsIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3NneC5jYC4gR2l2ZW4gdGhhdCB0aGVzZSBmaWxlcyBsaXZlIHdpdGhpbiB0aGUgYHZteGAgZGlyZWN0b3J5LCB0aGF0IHNjcmVhbXMgSW50ZWwgVk1YIG1vZGlmaWNhdGlvbnMsIHJpZ2h0PyBUaGVyZWZvcmUsIGBLVk1fSU5URUxgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIEFuZCBzaW5jZSBgYXJjaC94ODYva3ZtL3ZteC9zZ3guY2AgaXMgaW5jbHVkZWQsIEknZCB3YWdlciBgWDg2X1NHWF9LVk1gIHdpbGwgYmUgbmVlZGVkIHRvby4gQnV0IGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBieSBleGFtaW5pbmcgYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgIHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6NTMuMTU4MTQyMzc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzU4OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYODZfU0dYX0tWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6NTMuMjI1OTA2MDg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwOTM2MTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBLVk0vVk1YL1NHWCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBLVk0vVk1YL1NHWCBpbnRlZ3JhdGlvbiBzcGVjaWZpY2FsbHkuIExldCdzIHN0YXJ0IHdpdGggYSBwcmFjdGljYWwgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGZpbGVzIGFyZSBidWlsdCBhbmQgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGFyY2gveDg2L2t2bS92bXhgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyBgc2d4LmNgIGlzIGhhbmRsZWQgaW4gdGhhdCBtYWtlIGZpbGUuIEtub3dpbmcgaG93IHRoZSBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIHRoYXQgZmlsZSBpcyBsaWtlbHkgdG8gcmV2ZWFsIGEgbG90IGFib3V0IGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVk1YIGNvbXBvbmVudHMgYW5kIHRoZSBvdmVyYWxsIGtlcm5lbCBhcmNoaXRlY3R1cmUuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTo1Ni4xMzUyNzA2NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMTk5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2d4XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MTc9a3ZtLWludGVsLXlcXHRcXHQrPSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xOS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjA6a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMS1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE1OjU2LjIxNTQ5NzE4M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU4ODQ4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYODZfU0dYX0tWTSBDb21waWxhdGlvbioqXG5cblJpZ2h0LCBzbyB0byBjb21waWxlIGBhcmNoL3g4Ni9rdm0vdm14L3NneC5jYCwgSSBkZWZpbml0ZWx5IG5lZWQgdGhlIGBYODZfU0dYX0tWTWAgZGVmaW5lLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIHdoZXJlIGVsc2UgbWlnaHQgdGhpcyBjb21lIGludG8gcGxheT8gV2hlcmUgaXMgaXQgdXNlZCBvciByZWxhdGVkPyBMZXQncyBxdWlja2x5IGNoZWNrIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYC4gVGhhdCBmaWxlIG9mdGVuIGhhbmRsZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgc28gaXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFzIHRvIHRoZSBjb250ZXh0IGFuZCBmbG93IGFyb3VuZCB0aGVzZSBTR1ggaW50ZXJhY3Rpb25zLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSByZWxhdGVkIGVtdWxhdGlvbiBsb2dpYywgb3IgcGVyaGFwcyBjaGVja3MgdGhhdCBhcmUgZ292ZXJuZWQgYnkgdGhhdCBkZWZpbmUuIEl0J3MgYSBzZW5zaWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjAwLjA2MTM4NTgyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3NjcyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTY9aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS03LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo4Omt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtOS1cXHRcXHRcXHQgICBtdHJyLm8gZGVidWdmcy5vIG1tdS9tbXUubyBtbXUvcGFnZV90cmFjay5vIG1tdS9zcHRlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MDAuMTI2MTYxMDI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTAzNTUzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEtWTWAgYW5kIGBLVk1fSU5URUxgIGFyZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZsYWdzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBMZXQncyBzZWUsIHdoaWNoIG9uZXMgc3RhbmQgb3V0IGFzIGNydWNpYWw/IEkndmUgZ290IGEgZGVjZW50IGxpc3Q6XG5cbiogICBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIOKAkyBUaGlzIHNvdW5kcyBjcml0aWNhbCBmb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQuXG4qICAgVGhlbiBhIGJ1bmNoIG9mICpzdGF0aWMqIGZ1bmN0aW9ucywgdGhvc2UgdGhhdCBzZWVtIGludGVybmFsbHktc2NvcGVkLCBsaWtlOiBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYCwgYF9fa3ZtX2lzX3ZhbGlkX2NyNGAsIGBoYW5kbGVfaW52dnBpZGAsIGBzZ3hfZ2V0X2VuY2xzX2d2YWAsIGBuZXN0ZWRfdm14X2NyX2ZpeGVkMV9iaXRzX3VwZGF0ZWAgYW5kIGBlbXVsYXRvcl9pc19sYXNzX3Zpb2xhdGlvbmAuXG4qICAgQW5kIHRoZW4gc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvbmVzIHRvbywgbGlrZSBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCwgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBrdm1faGFuZGxlX2ludnBjaWRgXG5cbk5vdywgbGV0J3MgZmlsdGVyIG91dCBhbGwgdGhlIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbGVhdmVzIG1lIHdpdGggdGhlIGZvbGxvd2luZyBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBjYWxsZWQgZnJvbSBlbHNld2hlcmU6XG5cbiogICBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgXG4qICAgYGdldF92bXhfbWVtX2FkZHJlc3NgXG4qICAgYHZteF9nZXRfdW50YWdnZWRfYWRkcmBcbiogICBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYFxuKiAgIGBrdm1faGFuZGxlX2ludnBjaWRgXG5cbk9rYXksIEkgdGhpbmsgYGdldF92bXhfbWVtX2FkZHJlc3NgIGlzIHdvcnRoIGZvY3VzaW5nIG9uLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCBpdCBpbiB0aGUgYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGZpbGUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjA1LjgxNjUxODMzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MDk4ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF92bXhfbWVtX2FkZHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUyMjM9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF90cmlwbGVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjM0LSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTIzNTppbnQgZ2V0X3ZteF9tZW1fYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTIzNi1cXHRcXHRcXHR1MzIgdm14X2luc3RydWN0aW9uX2luZm8sIGJvb2wgd3IsIGludCBsZW4sIGd2YV90ICpyZXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUzNjE9c3RhdGljIGludCBuZXN0ZWRfdm14X2dldF92bXB0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICp2bXBvaW50ZXIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUzNjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MzY4OlxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2OS1cXHRcXHRcXHRcXHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NjU2PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3MjUtXFx0XFx0bGVuID0gaXNfNjRfYml0X21vZGUodmNwdSkgPyA4IDogNDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU3MjY6XFx0XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNy1cXHRcXHRcXHRcXHRcXHRpbnN0cl9pbmZvLCB0cnVlLCBsZW4sIFxcdTAwMjZndmEpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NzYyPXN0YXRpYyBpbnQgaGFuZGxlX3Ztd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01Nzk5LVxcdFxcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODAwOlxcdFxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4MDEtXFx0XFx0XFx0XFx0XFx0aW5zdHJfaW5mbywgZmFsc2UsIGxlbiwgXFx1MDAyNmd2YSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NTM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5NjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTY4OlxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5NjktXFx0XFx0XFx0XFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXFx1MDAyNmd2YSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5ODE9c3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjAxNS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYwMTY6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE3LVxcdFxcdFxcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2Z3ZhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjA2MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjA5OC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYwOTk6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTAwLVxcdFxcdFxcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2Z3ZhKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MDUuOTIwNjIxMTk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDk1NzQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBWTVggTWVtb3J5IEFkZHJlc3MqKlxuXG5Pa2F5LCBzbyBgZ2V0X3ZteF9tZW1fYWRkcmVzc2Agc2VlbXMgbGlrZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGhlcmUuIFRoYXQncyBhIHNvbGlkIGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIE5vdywgd2hlcmUgZG9lcyBpdCBmaXQgd2l0aGluIHRoZSBicm9hZGVyIFZNWCBjb250ZXh0PyBSaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGB2bXhfaXNfbGFzc192aW9sYXRpb25gIGZ1bmN0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lJ3MgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AuIExldCdzIGRpdmUgaW4gYW5kIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHBvdGVudGlhbCBtZW1vcnkgYWRkcmVzcyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTYxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MDkuMDcwMTk4MzU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ4MTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfaXNfbGFzc192aW9sYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC92bXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg1NzA9Z3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg2MDctXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NjA4OmJvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwOS1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjowOS4xMzA2ODQ0NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MzMxMjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBLVk0gSW52cGNpZCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBpcyBvbiBteSByYWRhciBhcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24g4oCTIHRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBOb3csIEknbSB0aGlua2luZywgbGV0J3MgZGl2ZSBpbnRvIGBrdm1faGFuZGxlX2ludnBjaWRgIGJlY2F1c2UgaXQncyB0aGUgdXN1YWwgc3VzcGVjdCBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgSW52YWxpZGF0ZSBQcm9jZXNzLUNvbnRleHQgSWRlbnRpZmllciAoSU5WUENJRCkgaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBzdWJ0bGUsIGV4cGxvaXRhYmxlIGZsYXcuIFdlIG5lZWQgdG8gY2hlY2sgZXZlcnl0aGluZzogdGhlIGhhbmRsaW5nIG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVk1YIGNvZGUsIGFueSByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgaW52YWxpZCBvciBtYWxpY2lvdXMgaW5wdXQgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5OTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjoxMi4zOTQwMDE3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjE2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9oYW5kbGVfaW52cGNpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTEwNzI2PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faGFuZGxlX21lbW9yeV9mYWlsdXJlKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MjctXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzI4OmludCBrdm1faGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHR5cGUsIGd2YV90IGd2YSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3Mjkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODA0LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA4MDU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfaW52cGNpZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjoxMi41MTgyMjI3NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyOTI5NjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBLVk0ncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gS1ZNLiBJJ3ZlIGJlZW4gY29uc2lkZXJpbmcgYGt2bV9oYW5kbGVfaW52cGNpZGAsIGFuZCBJIHRoaW5rIHRoYXQncyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlIGZ1cnRoZXIuIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIFRMQiBpbnZhbGlkYXRpb24sIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHNlZSB3aGF0IGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgIGlzIGFsbCBhYm91dC4gVW5kZXJzdGFuZGluZyBob3cgYWRkcmVzc2VzIGFyZSBoYW5kbGVkLCBhbmQgcGFydGljdWxhcmx5IHRoZSB1bnRhZ2dlZCBvbmVzLCBpcyBsaWtlbHkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZWVwZXIgd29ya2luZ3Mgb2YgdGhlIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ3kuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTA3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MTUuNjQ3NTIxNjU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzE4MzAxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfZ2V0X3VudGFnZ2VkX2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC92bXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg1NTY9dm9pZCB2bXhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg1NjktICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NTcwOmd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjE1LjcyNDcyMjE2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3Njc1OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIEtWTSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgS1ZNIGluaXRpYWxpemF0aW9uLCBhbmQgYSBrZXkgYXJlYSBpcyBob3cgd2UgaGFuZGxlIG1lbW9yeSBhZGRyZXNzZXMuIEkndmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucyBpbnZvbHZlZC4gYHZteF9nZXRfdW50YWdnZWRfYWRkcmAgaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUgaW4gdGhpcyBhcmVhOyBpdCdzIGdvdCBhIHNvbGlkIHJlcHV0YXRpb24uIE5vdywgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYC4gSXQncyBjcnVjaWFsIHdlIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNhcGFiaWxpdGllcyB3ZSdyZSBzZXR0aW5nIHVwIGZvciB0aGUgdmlydHVhbCBDUFVzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uIFRoYXQgZnVuY3Rpb24gbGlrZWx5IHRpZXMgaW50byBjcml0aWNhbCBhc3BlY3RzIG9mIGd1ZXN0LWhvc3QgaW50ZXJhY3Rpb25zIGFuZCBwZXJmb3JtYW5jZS4gTmVlZCB0byBlbnN1cmUgd2UncmUgZ2V0dGluZyB0aG9zZSBDUFUgY2FwYWJpbGl0aWVzIHNldCBjb3JyZWN0bHkgZnJvbSB0aGUgZ2V0IGdvISBJJ2xsIGRpdmUgaW50byBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIGFuZCBzZWUgd2hhdCBpdCBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjE4Ljc1MjQwMDk3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NTE3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2luaXRpYWxpemVfY3B1X2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2NwdWlkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2NwdWlkLmM9NzMzPWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy04MzUtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6ODM2OnZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy04Mzcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTMxMy19XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTMxNDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2luaXRpYWxpemVfY3B1X2NhcHMpO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTEzMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjE4LjgyMDg1NzI3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4Mjc3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRnV6emluZyBUYXJnZXRzKipcblxuUmlnaHQsIHNvIGBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwc2AgaXMgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIHBoYXNlLiBUaGF0IG1lYW5zIGl04oCZcyBwcmV0dHkgbXVjaCBhIG9uZS1zaG90IGRlYWwuIERvZXNuJ3Qgc2VlbSBsaWtlIHRoZSBiZXN0IHBsYWNlIHRvIHNpbmsgcmVzb3VyY2VzIGludG8gZnV6emluZy4gQSBzaW5nbGUgY2FsbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdXN1YWxseSBpc24ndCBmcnVpdGZ1bCBmb3IgdGhlIHR5cGUgb2YgaXRlcmF0aXZlIHRlc3RpbmcgSSdtIGFmdGVyLCB3aGVyZSBJIGNhbiByZXBlYXRlZGx5IGhhbW1lciB0aGUgZnVuY3Rpb24gd2l0aCBkaWZmZXJlbnQgaW5wdXRzIGFuZCBzZWUgaG93IGl0IHJlc3BvbmRzLlxuXG5JbnN0ZWFkLCBsZXQncyBwaXZvdCBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBzb21ldGhpbmcgZWxzZS4gTm93LCB3aGVyZSB0byBsb29rPyBBbHJpZ2h0LCBJJ3ZlIGdvdCBpdC4gSSdsbCB0YWtlIGEgbG9vayBhdCBgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25gIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0IHNvdW5kcyBhIGJpdCBtb3JlIHByb21pc2luZyBmb3IgYSBwb3RlbnRpYWwgZnV6emluZyBjYW1wYWlnbi4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbidzIGRvaW5nIGFuZCBpZiBpdCdzIGdvdCB0aGUgcmlnaHQgY2hhcmFjdGVyaXN0aWNzIHRvIGJlbmVmaXQgZnJvbSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjIyLjQ2OTEzNzUzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MTY3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01NzkzPXN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODAyLVxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODAzOnN0YXRpYyBib29sIGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODA0LVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU4MjA9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg2Ny1cXHQuZ2V0X3VudGFnZ2VkX2FkZHIgICA9IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyLFxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODY4OlxcdC5pc19sYXNzX3Zpb2xhdGlvbiAgID0gZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24sXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjktXFx0LmlzX2Nhbm9uaWNhbF9hZGRyICAgPSBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MjIuNTI0NzYwOTEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODIwMzMzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBTdGF0aWMgTGFuZHNjYXBlKipcblxuT2theSwgdGhpcyBmZWVscyBzdGF0aWMuIE15IGZvY3VzIG5lZWRzIHRvIGJlIGxhc2VyLXNoYXJwIG9uIHRoZXNlIGZ1bmN0aW9uczogYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGt2bV9oYW5kbGVfaW52cGNpZGAsIGFuZCBgdm14X2dldF91bnRhZ2dlZF9hZGRyYC4gVGhleSBhcmUgdGhlIGxpa2VseSBjdWxwcml0cy5cblxuQmVmb3JlIEkgZGlnIGludG8gdGhvc2UgZGVlcGx5LCBsZXQncyBlc3RhYmxpc2ggdGhlIGJyb2FkZXIgY29udGV4dC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIHNlZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgWDg2X1NHWF9LVk1gIGZsYWdnZWQuIEludGVyZXN0aW5nLiBCZXlvbmQgdGhvc2UsIGFyZSB0aGVyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcz8gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoZSBgWDg2X1NHWF9LVk1gIGRlcGVuZGVuY2llcyBpbW1lZGlhdGVseS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTk4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjI1LjkwNjc5NjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTM5MDY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWDg2X1NHWF9LVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTA3PWNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMjI6Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIzLVxcdGJvb2wgXFxcIlNvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjI2LjAxNjE5MjE0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODM4NDM2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBYODZfU0dYX0tWTWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBgWDg2X1NHWF9LVk1gIGNvbmNlcHQuIE15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCB0ZWxscyBtZSB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgZmFzY2luYXRpbmcgaW50ZXJzZWN0aW9uLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHBpY3R1cmluZyB0aGUgY29tcGxleGl0aWVzIG9mIFNlY3VyZSBlbmNsYXZlcyAoU0dYKSBydW5uaW5nIHdpdGhpbiBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgZW52aXJvbm1lbnQsIG9uIGFuIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGltbWVuc2UsIGFuZCB0aGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyBhcmUgZXF1YWxseSBpbnRlcmVzdGluZy4gSSBpbWFnaW5lIHRoZXJlJ3MgYSBkZWxpY2F0ZSBkYW5jZSBoYXBwZW5pbmcgYmV0d2VlbiBoYXJkd2FyZS1sZXZlbCBzZWN1cml0eSBmZWF0dXJlcyBhbmQgdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGVuY2xhdmVzIGFyZSBpc29sYXRlZCwgaG93IHRoZXkgY29tbXVuaWNhdGUgd2l0aCB0aGUgVk0sIGFuZCB3aGF0IHRoZSBhdHRhY2sgc3VyZmFjZSBsb29rcyBsaWtlIGluIHRoaXMgY29uZmlndXJhdGlvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uPyBPciBhIG1vcmUgaW50ZWdyYXRlZCBhcHByb2FjaD8gV2hhdCBhcmUgdGhlIGtleSBwZXJmb3JtYW5jZSBtZXRyaWNzIHRoZXkncmUgbGlrZWx5IGZvY3VzaW5nIG9uPyBMYXRlbmN5LCB0aHJvdWdocHV0LCBlbmNsYXZlIHN3aXRjaGluZyBvdmVyaGVhZC4uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZGVlcCBkaXZlLiBJJ20gZXhjaXRlZCB0byBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MzAuODU0NjMyNTMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIxOlxcdFxcbiAxMjI6XFx0Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuIDEyMzpcXHRcXHRib29sIFxcXCJTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpIFZpcnR1YWxpemF0aW9uXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbiAxMjU6XFx0XFx0aGVscFxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXFxcInJhd1xcXCIgdW5yZWNsYWltYWJsZSBlbmNsYXZlIG1lbW9yeSB0b1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjozMC44NTQ3MzAyODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NTgyNTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBZGRpbmcgQW5vdGhlciBQaWVjZSB0byB0aGUgUHV6emxlOiBYODZfU0dYKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJlcXVpcmVtZW50cywgdGhlIGFyY2hpdGVjdHVyZS4uLiBhbmQgaXQncyBiZWNvbWluZyBjbGVhciB0aGF0IGBYODZfU0dYYCBpcyBhbHNvIGEgY3JpdGljYWwgY29tcG9uZW50IGhlcmUuIEkndmUgYmVlbiB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGN1cnJlbnQgZGVzaWduIGFuZCBpdCdzIGFwcGFyZW50IHRoYXQgd2UgY2FuJ3QgaWdub3JlIHRoZSBuZWVkIGZvciBzZWN1cmUgZW5jbGF2ZXMuIFdpdGhvdXQgYFg4Nl9TR1hgLCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHdlJ3JlIGxlYXZpbmcgYSBnYXBpbmcgaG9sZSBpbiBvdXIgc2VjdXJpdHkgbW9kZWwuIFdlIG1pZ2h0IGJlIGFibGUgdG8gZmluZCBhIHN1aXRhYmxlIHNvZnR3YXJlLWJhc2VkIGFsdGVybmF0aXZlLCBidXQgdGhhdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uLiBXZSBtdXN0IGhhdmUgYSBoYXJkd2FyZS1lbmZvcmNlZCB0cnVzdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gVGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogaW5jbHVkaW5nIHRoaXMgYXJlIGp1c3QgdG9vIHNpZ25pZmljYW50IHRvIG92ZXJsb29rLiBXZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMsIHRoZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGV4aXN0aW5nIGNvZGUgYmFzZSwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgd2l0aCB0aGlzIGluIG1pbmQuIEl0J3Mgbm90IGp1c3QgYSBuaWNlLXRvLWhhdmU7IGl0J3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgdGhlIGtpbmQgb2Ygcm9idXN0IHNlY3VyaXR5IGd1YXJhbnRlZXMgd2UncmUgYWltaW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjM0LjUwMDU1ODE0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYwNDEwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9TR1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4MjU9ZW5kY2hvaWNlXFxuYXJjaC94ODYvS2NvbmZpZy0xODI2LVxcbmFyY2gveDg2L0tjb25maWc6MTgyNzpjb25maWcgWDg2X1NHWFxcbmFyY2gveDg2L0tjb25maWctMTgyOC1cXHRib29sIFxcXCJTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjozNC42MDY2MDM0OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4ODU0MTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGBYODZfU0dYYCBkZXBlbmRlbmNpZXM6XG5cbioqTXkgTWVudGFsIENoZWNrbGlzdCBmb3IgeDg2X1NHWCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5wYWNrIHRoZSB3b3JsZCBvZiBkZXBlbmRlbmNpZXMgZm9yIGBYODZfU0dYYC4gRmlyc3QsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGhhcmR3YXJlIGxldmVsLiBXZSdyZSB0YWxraW5nIEludGVsJ3MgYXJjaGl0ZWN0dXJlIGhlcmUsIHNvIHRoZSBmaXJzdCB0aG91Z2h0IGlzIHRoZSAqQ1BVIHN1cHBvcnQgaXRzZWxmKi4gSXQncyBub3QganVzdCBhYm91dCBoYXZpbmcgYW4geDg2IHByb2Nlc3NvcjsgaXQgbmVlZHMgdG8gYmUgKnNwZWNpZmljKiB4ODYgd2l0aCBTR1ggZW5hYmxlZC4gVGhhdCBpbXBsaWVzIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcHJvY2Vzc29yJ3MgZ2VuZXJhdGlvbiBhbmQgbWljcm9hcmNoaXRlY3R1cmUgYXMgZnVuZGFtZW50YWwuIEkgc2hvdWxkIGJlIG5vdGluZyB0aGUgc3BlY2lmaWMgQ1BVIG1vZGVscyBzdXBwb3J0ZWQgYW5kIGFueSBrbm93biBsaW1pdGF0aW9ucyBvZiBlYWNoLlxuXG5OZXh0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlICpTREsqLCBhbmQgdGhlIGFzc29jaWF0ZWQgZHJpdmVycyBhbmQgbGlicmFyaWVzLiBJdCdzIG5vdCBqdXN0IHRoZSBTREsncyBwcmVzZW5jZSwgYnV0IGl0cyB2ZXJzaW9uLiBIb3cgZG9lcyB0aGlzIHBhcnRpY3VsYXIgdmVyc2lvbiBpbnRlcmFjdCB3aXRoIGRpZmZlcmVudCBPU2VzPyBXaGF0IGFib3V0IHRoZSBzcGVjaWZpYyBjb21waWxlciB2ZXJzaW9ucyBpdCdzIGNvbXBhdGlibGUgd2l0aD8gSSBuZWVkIHRvIGtub3cgd2hpY2ggSW50ZWwgU0RLIHZlcnNpb25zIGFyZSBhY3RpdmVseSBtYWludGFpbmVkIGFuZCB3aGljaCBhcmUgZGVwcmVjYXRlZC4gQXJlIHRoZXJlIGRpZmZlcmVudCBTREtzIGZvciBXaW5kb3dzLCBMaW51eCwgZXRjLj8gSG93IGRvIHRoZXkgaGFuZGxlIGRpZmZlcmVuY2VzIGluIHN5c3RlbSBjYWxscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQ/XG5cblRoZW4gdGhlICpvcGVyYXRpbmcgc3lzdGVtKiBjb21lcyBpbnRvIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIE9TZXMgdGhlIFNESyBzdXBwb3J0cyBvZmZpY2lhbGx5LCBhbmQgaG93IHRoZWlyIGtlcm5lbCB2ZXJzaW9ucyBpbXBhY3QgU0dYIGZ1bmN0aW9uYWxpdHkuIERvZXMgdGhlIE9TIHByb3ZpZGUgbmF0aXZlIHN1cHBvcnQgdGhyb3VnaCBkcml2ZXJzIG9yIGxpYnJhcmllcywgb3IgZG9lcyB0aGUgU0RLIG1hbmFnZSBhbGwgb2YgdGhhdD8gV2hhdCBhYm91dCB0aGUgKmh5cGVydmlzb3IqIGlmIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBzcGVjaWZpYyBoeXBlcnZpc29yIHZlcnNpb25zIHRoYXQgYXJlIGNvbXBhdGlibGUsIG9yIGV2ZW4gcHJlZmVycmVkLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zIHRoZXJlP1xuXG5BbmQgc3BlYWtpbmcgb2YgT1NlcywgdGhlcmUncyB0aGUgKnNlY3VyZSBlbmNsYXZlIGluZnJhc3RydWN0dXJlKiBpdHNlbGYuIFRoZSBPUy1zcGVjaWZpYyBjYWxscyB0byBpbnZva2UgdGhlIGVuY2xhdmVzLCB0byBtYW5hZ2UgdGhlaXIgbWVtb3J5LCBldGMuIEhvdyBkb2VzIHRoaXMgdmFyeSBiZXR3ZWVuLCBzYXksIExpbnV4IGFuZCBXaW5kb3dzPyBXaGF0J3MgdGhlIGltcGFjdCBvZiBTRUxpbnV4IG9yIEFwcEFybW9yIG9uIExpbnV4PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgYXBwbGljYXRpb24gc2VjdXJpdHkgaW4gZWFjaCBlbnZpcm9ubWVudD9cblxuQmV5b25kIHRob3NlIGNvcmUgY29tcG9uZW50cywgSSBuZWVkIHRvIGNvbnNpZGVyICpzb2Z0d2FyZSBkZXBlbmRlbmNpZXMqLiBXaGF0IGFyZSB0aGUgbGlicmFyaWVzIHRoYXQgYXBwbGljYXRpb25zIHdpdGhpbiB0aGUgZW5jbGF2ZXMgd2lsbCBuZWVkPyBXaWxsIHRoZXkgYmUgYWJsZSB0byByZWx5IG9uIHN0YW5kYXJkIGxpYnJhcmllcywgb3IgZG8gdGhleSBuZWVkIHNwZWNpYWwgU0dYLWF3YXJlIHZlcnNpb25zPyBBcmUgdGhlcmUgdGhpcmQtcGFydHkgbGlicmFyaWVzIHRoYXQgaGF2ZSBiZWVuIGhhcmRlbmVkIGZvciBTR1g/IFdoYXQncyB0aGUgZWNvc3lzdGVtIGxpa2UgZm9yIGNyeXB0b2dyYXBoaWMgbGlicmFyaWVzIGNvbXBhdGlibGUgd2l0aCBTR1g/IFdoYXQgYWJvdXQgdGhpbmdzIGxpa2UgbmV0d29ya2luZyBvciBmaWxlIHN5c3RlbSBhY2Nlc3MgKmZyb20gd2l0aGluKiB0aGUgZW5jbGF2ZT8gV2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zP1xuXG5BbmQgZmluYWxseSwgKnNlY3VyaXR5Ki4gV2hhdCBhcmUgdGhlIGtub3duIHZ1bG5lcmFiaWxpdGllcyBhbmQgbWl0aWdhdGlvbnMgZm9yIHRoZXNlIGRlcGVuZGVuY2llcz8gSG93IGFyZSB1cGRhdGVzIGhhbmRsZWQgYW5kIGRpc3RyaWJ1dGVkPyBIb3cgZG9lcyB0aGUgU0dYIGF0dGVzdGF0aW9uIHByb2Nlc3MgcmVsYXRlIHRvIHRoZXNlIGRlcGVuZGVuY2llcz8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgc3lzdGVtIGFuZCBwcm90ZWN0aW5nIGFnYWluc3QgYXR0YWNrcy4gSSBtdXN0IGtub3cgdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGFuZCB3aGF0IG1ldGhvZHMgYXJlIGluIHBsYWNlIHRvIGNvdW50ZXJhY3QgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjozOS41OTUxNDgyMzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgyNSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgyNTpcXHRlbmRjaG9pY2VcXG4xODI2OlxcdFxcbjE4Mjc6XFx0Y29uZmlnIFg4Nl9TR1hcXG4xODI4OlxcdFxcdGJvb2wgXFxcIlNvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWClcXFwiXFxuMTgyOTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0lOVEVMIFxcdTAwMjZcXHUwMDI2IFg4Nl9YMkFQSUNcXG4xODMwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbjE4MzE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjE4MzI6XFx0XFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG4xODMzOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xODM0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MzkuNTk1MzgwMTM4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTE4ODU1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNldCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHNjZW5hcmlvLiBUaGlua2luZyB0aGlzIHRocm91Z2guLi4gSSBzZWUgYFg4Nl82NGAsIGBDUFVfU1VQX0lOVEVMYCwgYW5kIGBYODZfWDJBUElDYCBtZW50aW9uZWQgYXMgcmVxdWlyZW1lbnRzLiBCdXQgd2FpdCBhIG1pbnV0ZSwgYFg4Nl82NGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBmb3Igc3l6a2FsbGVyLCBhbmQgYENQVV9TVVBfSU5URUxgIGFuZCBgWDg2X1gyQVBJQ2AgYXJlIGFsc28gcHJldHR5IG11Y2ggc3RhbmRhcmQgbm93YWRheXMuIFRoYXQgbWVhbnMgdGhhdCBpZiB0aG9zZSBhcmUgaW1wbGllZCwgSSByZWFsbHkgb25seSBuZWVkIHRvIG1ha2Ugc3VyZSBgWDg2X1NHWGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9JTlRFTGAuIEknbGwgd2FudCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBuZWNlc3NhcnkuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjo0My4xNDcyNjg1MDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjQzLjE0NzM3MDk1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUxOTYwODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSUEzMl9GRUFUX0NUTDogTXkgTWVudGFsIENoZWNrbGlzdCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgY3VycmVudCBwcm9qZWN0IGFuZCBJIGltbWVkaWF0ZWx5IGhpdCBvbiBgSUEzMl9GRUFUX0NUTGAuIEl0J3MgYSBrZXkgcmVnaXN0ZXIsIGFuZCBteSBtaW5kJ3MgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHRoaW5nLiBJIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGZlYXR1cmVzIGl0IGNvbnRyb2xzIOKAkyB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LCBwb3NzaWJseSBzb21lIHNlY3VyaXR5IGV4dGVuc2lvbnMsIGRlZmluaXRlbHkgdGhpbmdzIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UgYW5kIG1heWJlIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIENQVS4gTXkgZmlyc3QgdGhvdWdodCBpczogYW0gSSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IENQVSBtb2RlbCB0byBldmVuIG1ha2UgdGhpcyBhIGNvbnNpZGVyYXRpb24/IElmIG5vdCwgdGhlbiBJJ3ZlIGdvbmUgZG93biB0aGUgd3JvbmcgcGF0aCwgYW5kIEkgbmVlZCB0byBjaGVjayBteSBDUFVJRCBvdXRwdXQgYmVmb3JlIEkgd2FzdGUgYW55IG1vcmUgdGltZS4gSWYgSSAqYW0qIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgaGFyZHdhcmUsIHRoZW4gSSBuZWVkIHRvIGNhcmVmdWxseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGJpdHMgd2l0aGluIGBJQTMyX0ZFQVRfQ1RMYCBuZWVkIHNwZWNpZmljIG1hbmlwdWxhdGlvbiBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gV2hhdCBmZWF0dXJlcyBhbSBJIHRhcmdldGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgKnRob3NlKiBmZWF0dXJlcz8gV2hhdCdzIHRoZSByZWNvbW1lbmRlZCBwb3dlci1vbiBkZWZhdWx0IHZhbHVlLCBhbmQgaXMgdGhhdCBnb2luZyB0byB3b3JrIGZvciBteSBwYXJ0aWN1bGFyIHVzYWdlIHNjZW5hcmlvPyBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhpcyBjb250cm9sIHJlZ2lzdGVyIGlzIGFwcHJvcHJpYXRlbHkgc2V0IHRvIG1heGltaXplIHBlcmZvcm1hbmNlIGFuZCBhdm9pZCBhbnkgdW5hbnRpY2lwYXRlZCBiZWhhdmlvcnMuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCBhbnkgY2hhbmdlcyBoZXJlIHdvbid0IGNyZWF0ZSBhbnkgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cywgbGlrZSB0aGUgaHlwZXJ2aXNvciBvciBCSU9TLiBJIG5lZWQgdG8gcmV2aWV3IGFsbCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBvbmUgbW9yZSB0aW1lLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJhdGEgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyByZWdpc3RlciwgYW5kIHRoZW4gbWFrZSBhIHZlcnkgY2FsY3VsYXRlZCBkZWNpc2lvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU5MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6NDYuOTk5MzM0OTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5ODk0MTUzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSUEzMl9GRUFUX0NUTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjo0Ny4wOTkyNDI3MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5MTYyOTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgQXJjaGFlb2xvZ3k6IExvY2F0aW5nIElBMzJfRkVBVF9DVEwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgSUEzMl9GRUFUX0NUTGAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzbid0IGV4YWN0bHkgYSBncm91bmRicmVha2luZyB0YXNrLCBidXQgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkga25vdyBhIGZhaXIgYml0IGFib3V0IGhvdyB0aGUgS2NvbmZpZyBzeXN0ZW0gaXMgc3RydWN0dXJlZCwgYnV0IHNvbWV0aW1lcyBhIHNwZWNpZmljIHN5bWJvbCBjYW4gYmUgdHJpY2t5IHRvIHRyYWNrIGRvd24gaWYgaXQncyBkZWVwbHkgbmVzdGVkLCBvciBoaWRkZW4gYmVoaW5kIHNvbWUgb2JzY3VyZSBkZXBlbmRlbmN5LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGxldmVyYWdlIHRoZSBwb3dlciBvZiBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkuIEknbGwgZXhlY3V0ZSBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBLY29uZmlnIGhpZXJhcmNoeS4gSSdtIHRoaW5raW5nIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYSBzaW1wbGUgYGdyZXAgXCJJQTMyX0ZFQVRfQ1RMXCIgKktjb25maWcqYCAob3Igd2hhdGV2ZXIgdGhlIGFjdHVhbCBmaWxlIGV4dGVuc2lvbi9uYW1pbmcgY29udmVudGlvbiBpcyB1c2VkKS4gSSBtaWdodCBuZWVkIHRvIHJlZmluZSB0aGlzIGJhc2VkIG9uIHRoZSByZXN1bHRzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBpbnRvIGFueSBjb21tb24gYWJicmV2aWF0aW9ucyBvciBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgdGhlIHRlcm0uXG5cbklmIEkgZG9uJ3QgaW1tZWRpYXRlbHkgZmluZCBpdCwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLiBQZXJoYXBzIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCBjb25kaXRpb25hbGx5LCBiYXNlZCBvbiBhbm90aGVyIHN5bWJvbCBvciBhcmNoaXRlY3R1cmUuIEluIHRoYXQgY2FzZSwgSSBtaWdodCBoYXZlIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gaW5jbHVkZSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBvciBsb29rIGZvciBvdGhlciByZWxhdGVkIGZlYXR1cmVzIHdoaWNoIGNvdWxkIHByb3ZpZGUgaGludHMuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUgcG9zc2libGUgZGVwZW5kZW5jeSBjaGFpbnMuXG5cbkJleW9uZCBzaW1wbGUgc3RyaW5nIG1hdGNoaW5nLCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoZXMgaWYgSSBoaXQgYSB3YWxsLiBVc2luZyBhIEtjb25maWcgcGFyc2luZyB0b29sIHdvdWxkIGJlIGlkZWFsIHRvIHBhcnNlIHRoZSBLY29uZmlnIGZpbGVzLiBUaGVuIEkgY2FuIHVzZSB0aGUgdG9vbCB0byBxdWVyeSB0aGUgY29uZmlnIHN5bWJvbCBkYXRhYmFzZSBhbmQgZmluZCBob3cgYElBMzJfRkVBVF9DVExgIGlzIGRlZmluZWQuIFRoaXMgbGV2ZWwgb2YgYW5hbHlzaXMgd2lsbCBhbGxvdyBtZSB0byB0cmFjayBkb3duIHRoZSBzeW1ib2wgYW5kIHVuZGVyc3RhbmQgd2hlcmUgaXRzIGRlZmluaXRpb24gbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6NTEuMDkwODc1ODI5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM2NTQzNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJQTMyX0ZFQVRfQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnLmNwdT0yODU9Y29uZmlnIFg4Nl9ERUJVR0NUTE1TUlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMjg4LVxcbmFyY2gveDg2L0tjb25maWcuY3B1OjI4OTpjb25maWcgSUEzMl9GRUFUX0NUTFxcbmFyY2gveDg2L0tjb25maWcuY3B1LTI5MC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjU0LjQyNzQyNDAxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU1OTI4NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgS1ZNIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIGBkZWZfYm9vbCB5YCBtZWFucyB0aGlzIGZlYXR1cmUgaXMgYWx3YXlzIG9uLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYFg4Nl9TR1hgLCBhbmQgYFg4Nl9TR1hfS1ZNYC4gUmlnaHQsIGdvdCBpdC4gTm93LCBsZXQncyBkaXZlIGJhY2sgaW50byB0aG9zZSBmdW5jdGlvbnMgSSB3YXMgbG9va2luZyBhdC5cblxuSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlc2U6IGB2bXhfaXNfbGFzc192aW9sYXRpb25gLCBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AsIGBrdm1faGFuZGxlX2ludnBjaWRgLCBhbmQgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAuIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdGhhdCBtaWdodCBiZSBoaWRpbmcuXG5cbkhtbSwgb2theSwgbGV0J3Mgc2VlLiBJJ20gc2VlaW5nIGEgZmV3IG90aGVyIGZ1bmN0aW9ucywgYnV0IHRoZXNlIGFyZSBhbGwgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkncmUgbm90IGRpcmVjdGx5IGV4cG9zZWQ6IGBuZXN0ZWRfdm14X2NyX2ZpeGVkMV9iaXRzX3VwZGF0ZWAsIGBoYW5kbGVfaW52dnBpZGAsIGBzZ3hfZ2V0X2VuY2xzX2d2YWAsIGBlbXVsYXRvcl9pc19sYXNzX3Zpb2xhdGlvbmAsIGBfX2xpbmVhcml6ZWAsIGBhc3NpZ25fZWlwYCwgYGxpbmVhcl9yZWFkX3N5c3RlbWAsIGBsaW5lYXJfd3JpdGVfc3lzdGVtYCwgYW5kIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYC4gVGhlc2UgYXJlbid0IGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcgZnJvbSBhbiBleHRlcm5hbCBleHBsb2l0IHBlcnNwZWN0aXZlLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVtLlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaWYgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAgaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBtZXJlbHkgbm9uLXN0YXRpYy4gVGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU0NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjo1OS4xODMzNTY5NzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzE3MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9pc19sYXNzX3Zpb2xhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU3MD1ndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwNy1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg2MDg6Ym9vbCB2bXhfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NjA5LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjU5LjI1OTY4MjM1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcxOTY5NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgZm9yIE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGFyZWEgaXNuJ3Qgc3RhdGljIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBOb24tc3RhdGljIG9mdGVuIGltcGxpZXMgZHluYW1pYyBiZWhhdmlvciwgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLCBvciBhIGZ1bmN0aW9uIHRoYXQncyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMgYW5kIGNvdWxkIGJlbmVmaXQgZnJvbSBvcHRpbWl6YXRpb24uIEl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGh1bmNoIGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGBrdm1faGFuZGxlX2ludnBjaWRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gdG8gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIHB1bGwgdXAgdGhhdCBmdW5jdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxpa2VseSBjb2RlIHBhdGhzLCB3aGF0IGl0J3MgZG9pbmcgd2l0aCB0aGUgSW52cGNpZCBpbnN0cnVjdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2Ygd2hlcmUgYW5kIGhvdyBpdCdzIGNhbGxlZCB3aXRoaW4gS1ZNLiBUaGlzIHNob3VsZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudCBhbmQgZ3VpZGUgbXkgbmV4dCBzdGVwcywgd2hldGhlciB0aGF0J3MgcHJvZmlsaW5nLCBjb2RlIGFuYWx5c2lzLCBvciB0YXJnZXRlZCBpbnN0cnVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mzc4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTc6MDMuMDMxNjUzOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MzMzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhbmRsZV9pbnZwY2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MTA3MjY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyNy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA3Mjg6aW50IGt2bV9oYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgZ3ZhX3QgZ3ZhKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MDQtfVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDgwNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2hhbmRsZV9pbnZwY2lkKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE3OjAzLjA3ODI5MjExN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTc5NzY1MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqQ2hlY2tpbmcgS1ZNJ3MgSW50ZXJuYWwgTWVtb3J5IEFkZHJlc3NpbmcqKlxuXG5SaWdodCwgdGhpcyBpcyBiZWluZyB1c2VkIGludGVybmFsbHkgYnkgS1ZNLCBzbyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgbWVtb3J5IGFkZHJlc3Npbmcgc2NoZW1lIGlzIGNvcnJlY3QuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AuIEkga25vdyB0aGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byB2ZXJpZnkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiBJdCdzIGNydWNpYWwgdGhpcyBmdW5jdGlvbiBkb2VzIGV4YWN0bHkgd2hhdCdzIGV4cGVjdGVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBhbnkgZXJyb3JzIGhlcmUgY2FuIGNhdXNlIHNlcmlvdXMgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkxMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE3OjA2LjA1ODA1OTYwNFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NjUyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3ZteF9tZW1fYWRkcmVzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTIyMz1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3RyaXBsZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyMzQtICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MjM1OmludCBnZXRfdm14X21lbV9hZGRyZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjM2LVxcdFxcdFxcdHUzMiB2bXhfaW5zdHJ1Y3Rpb25faW5mbywgYm9vbCB3ciwgaW50IGxlbiwgZ3ZhX3QgKnJldClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTM2MT1zdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlcixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUzNjg6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MzY5LVxcdFxcdFxcdFxcdHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKSwgZmFsc2UsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNS1cXHRcXHRsZW4gPSBpc182NF9iaXRfbW9kZSh2Y3B1KSA/IDggOiA0O1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTcyNjpcXHRcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCBleGl0X3F1YWxpZmljYXRpb24sXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NzI3LVxcdFxcdFxcdFxcdFxcdGluc3RyX2luZm8sIHRydWUsIGxlbiwgXFx1MDAyNmd2YSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU3NjI9c3RhdGljIGludCBoYW5kbGVfdm13cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3OTktXFx0XFx0bGVuID0gaXNfNjRfYml0X21vZGUodmNwdSkgPyA4IDogNDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4MDA6XFx0XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTgwMS1cXHRcXHRcXHRcXHRcXHRpbnN0cl9pbmZvLCBmYWxzZSwgbGVuLCBcXHUwMDI2Z3ZhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk1Mz1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5Njg6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2OS1cXHRcXHRcXHRcXHR0cnVlLCBzaXplb2YoZ3BhX3QpLCBcXHUwMDI2Z3ZhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk4MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE1LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjAxNjpcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwMTctXFx0XFx0XFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZndmEpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MDYxPXN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDk4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjA5OTpcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYxMDAtXFx0XFx0XFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZndmEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNzowNi4xMDc5Mjk4N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3ODQ3NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgQXNzdW1wdGlvbiBpbiB4ODYgS1ZNL1ZNWCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoYXQgd2hhdGV2ZXIgd2UncmUgZGVhbGluZyB3aXRoIGlzbid0IHN0YXRpYy4gSXQncyBkeW5hbWljLCBjaGFuZ2luZywgKm5vdCogZml4ZWQuIFRoaXMgaXMgY3J1Y2lhbDsgaWYgaXQgd2VyZSBzdGF0aWMsIHdlIGNvdWxkIG1ha2Ugc29tZSBkaWZmZXJlbnQgYXNzdW1wdGlvbnMuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgbmVlZHMgdG8gYmUgY29uZmlybWVkLlxuXG5UbyBwaW4gdGhpcyBkb3duLCBsZXQncyBkcmlsbCBkb3duIGFuZCB0YWtlIGEgbG9vayBhdCBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBhcmVhIHN1Z2dlc3RzIHRoaXMgY291bGQgYmUgdGhlIHNvdXJjZSBvZiB0aGUgZHluYW1pY3MuIExldCdzIG1ha2Ugc3VyZSBvdXIgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QgYnkgdmVyaWZ5aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSBleHBlY3QuIExldCdzIGV4YW1pbmUgaXQgYW5kIHNlZSBpZiBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNjcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNzowOS4zNjU3Nzk1NjhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc3NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9nZXRfdW50YWdnZWRfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU1Nj12b2lkIHZteF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU2OS0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg1NzA6Z3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NTcxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTc6MDkuNDExNzU5NDA1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzY2MjU5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTEFTUyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIHN1cHBvcnQgd2l0aGluIEtWTSBmb3IgeDg2LiBUaGUgY29yZSBvZiB0aGlzIGlzIG1vZGlmeWluZyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMg4oCTIHRoaXMgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUga2V5IGFyZWFzIGFuZCBjb25maWd1cmF0aW9ucy4gIEkndmUgaWRlbnRpZmllZCB0aGVzZSBGb2N1c1N5bWJvbHMgdGhhdCBzZWVtIGNyaXRpY2FsOiBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCwgYGdldF92bXhfbWVtX2FkZHJlc3NgLCBga3ZtX2hhbmRsZV9pbnZwY2lkYCwgYW5kIGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgLiBUaGV5IGFyZSB0aGUgZnVuY3Rpb25hbCBlbGVtZW50cyB0aGF0IEkgYmVsaWV2ZSB3aWxsIHdhcnJhbnQgdGhlIG1vc3QgYXR0ZW50aW9uLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9ucy4gIEkgc2VlIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYFg4Nl9TR1hgLCBhbmQgYFg4Nl9TR1hfS1ZNYCBtZW50aW9uZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbWluaW11bSBjb25maWd1cmF0aW9uIGZvciBlZmZlY3RpdmUgdGVzdGluZyBvZiB0aGlzIExBU1MgaW1wbGVtZW50YXRpb24uICBTcGVjaWZpY2FsbHksIGlzIGBYODZfU0dYYCBhbmQgYFg4Nl9TR1hfS1ZNYCBzdHJpY3RseSByZXF1aXJlZD9cblxuQWgsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIHBhcnRpY3VsYXJseSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBhcmNoL3g4Ni9rdm0vdm14L3NneC5jYCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAgY2hlY2sgd2l0aGluIGBzZ3hfZ2V0X2VuY2xzX2d2YWAsIGl0IGlzIGNsZWFyIHRoYXQgdGVzdGluZyB0aGlzIHNwZWNpZmljIHBhdGggKmRvZXMqIHJlcXVpcmUgYFg4Nl9TR1hfS1ZNYC5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIG90aGVyIGNvbmZpZ3MuIGBDT05GSUdfWDg2XzY0YCBpcyBzdGFuZGFyZC4gYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgYXJlIGFsc28gc3RhbmRhcmQuIGBDT05GSUdfWDg2X1NHWGAgaXMgYWxzbyBhIHN0YW5kYXJkIGNvbmZpZy4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIHNldCBvZiBjb25maWd1cmF0aW9ucyBhcHBlYXIgdG8gYmUgYENPTkZJR19YODZfNjRgLCBgQ09ORklHX0tWTWAsIGBDT05GSUdfS1ZNX0lOVEVMYCwgYW5kIGBDT05GSUdfWDg2X1NHWF9LVk1gLlxuXG5JJ3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGludm9sdmVkIGFuZCBjYW4gc2V0IHVwIHRoZSBmdXp6ZXIgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzIyLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNzoxNS41NDgzODcxNzZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA1MjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIlg4Nl9TR1hcIixcbiAgICBcIlg4Nl9TR1hfS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2lzX2xhc3NfdmlvbGF0aW9uXCIsXG4gICAgXCJnZXRfdm14X21lbV9hZGRyZXNzXCIsXG4gICAgXCJrdm1faGFuZGxlX2ludnBjaWRcIixcbiAgICBcInZteF9nZXRfdW50YWdnZWRfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIlg4Nl9TR1hcIixcbiAgICBcIlg4Nl9TR1hfS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2lzX2xhc3NfdmlvbGF0aW9uXCIsXG4gICAgXCJnZXRfdm14X21lbV9hZGRyZXNzXCIsXG4gICAgXCJrdm1faGFuZGxlX2ludnBjaWRcIixcbiAgICBcInZteF9nZXRfdW50YWdnZWRfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowvrx6l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 01:35:58 +0000 UTC FinishedAt: 2026-08-06 02:17:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "51ba04112e93ac6e04c627eddcea5caf9cbc0134", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "X86_SGX", "X86_SGX_KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "51ba04112e93ac6e04c627eddcea5caf9cbc0134", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "X86_SGX", "X86_SGX_KVM" ], "series_id": "9b25f76e-1f9f-4fed-8e61-14584ea7a9ed" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vmx_is_lass_violation", "get_vmx_mem_address", "kvm_handle_invpcid", "vmx_get_untagged_addr" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7WDg2X1NHWCYjMzQ7LAogICAgJiMzNDtYODZfU0dYX0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZteF9pc19sYXNzX3Zpb2xhdGlvbiYjMzQ7LAogICAgJiMzNDtnZXRfdm14X21lbV9hZGRyZXNzJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfaW52cGNpZCYjMzQ7LAogICAgJiMzNDt2bXhfZ2V0X3VudGFnZ2VkX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBpbiBLVk0gb24geDg2LiBJdCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM0YjE4NWQ3MDlhMDZhZjc4OGZkN2RhODFmOGY2OGRiMzM2ODg2MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjE1OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCBlMjEzYzlhZTNlMzAxLi5hODJiMjAyODFmMzFhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTE0Niw2ICYjNDM7MTQ2LDcgQEAgS1ZNX1g4Nl9PUChjb21wbGV0ZV9lbXVsYXRlZF9tc3IpXG4gS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGlzX2xhc3NfdmlvbGF0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21ha2VfcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjgzODQ3NjE5ZmY4OC4uZDIxODFhODA1YWNlNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNzI3LDYgJiM0MzsxNzI3LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdHVuc2lnbmVkIGxvbmcgKCp2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gXHRndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7XHRib29sICgqaXNfbGFzc192aW9sYXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXHR2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcbiBcdGludCAoKmdtZW1fbWFrZV9wcml2YXRlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5pbmRleCA5ZTljZjY1MzhhOTZlLi5jNGRiZDAwZjVlNGU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5AQCAtMTAyOSw2ICYjNDM7MTAyOSw3IEBAIHZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcbiBcdFx0RihTTTQpLFxuIFx0XHRGKEFWWF9WTk5JKSxcbiBcdFx0RihBVlg1MTJfQkYxNiksXG4mIzQzO1x0XHRYODZfNjRfRihMQVNTKSxcbiBcdFx0RihDTVBDQ1hBREQpLFxuIFx0XHRGKEZaUk0pLFxuIFx0XHRGKEZTUlMpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5pbmRleCA4MDcxYjM3MmQyMzNlLi45Y2JmZGU2NDkwNjQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuQEAgLTY3Miw3ICYjNDM7NjcyLDggQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19saW5lYXJpemUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdCAgICAoZmxhZ3MgXHUwMDI2IFg4NkVNVUxfRl9XUklURSkpXG4gXHRcdFx0Z290byBiYWQ7XG4gXHRcdC8qIHVucmVhZGFibGUgY29kZSBzZWdtZW50ICovXG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBYODZFTVVMX0ZfRkVUQ0gpIFx1MDAyNlx1MDAyNiAoZGVzYy50eXBlIFx1MDAyNiA4KSBcdTAwMjZcdTAwMjYgIShkZXNjLnR5cGUgXHUwMDI2IDIpKVxuJiM0MztcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfQlJBTkNIKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2ICEoZGVzYy50eXBlIFx1MDAyNiAyKSlcbiBcdFx0XHRnb3RvIGJhZDtcbiBcdFx0bGltID0gZGVzY19saW1pdF9zY2FsZWQoXHUwMDI2ZGVzYyk7XG4gXHRcdGlmICghKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2IChkZXNjLnR5cGUgXHUwMDI2IDQpKSB7XG5AQCAtNjkyLDYgJiM0Mzs2OTMsMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19saW5lYXJpemUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTEFTUyBhbmQgY2Fub25pY2FsaXR5IGNoZWNrcyBnZW5lcmF0ZSB0aGUgc2FtZSBmYXVsdCBhbmRcbiYjNDM7XHQgKiB0aGVpciByZWxhdGl2ZSBvcmRlciBpcyBub3QgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQuIEFsc28sXG4mIzQzO1x0ICogdGhlIFNETSBkb2VzbiYjMzk7dCBwcmlvcml0aXplIExBU1MgdmlvbGF0aW9ucyBhZ2FpbnN0XG4mIzQzO1x0ICogYWxpZ25tZW50LWNoZWNrIGZhdWx0cywgc28gYW55IG9yZGVyIGlzIGxlZ2FsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHh0LVx1MDAzZW9wcy1cdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsYSwgc2l6ZSwgZmxhZ3MpKVxuJiM0MztcdFx0Z290byBiYWQ7XG4mIzQzO1xuIFx0aWYgKGxhIFx1MDAyNiAoaW5zbl9hbGlnbm1lbnQoY3R4dCwgc2l6ZSkgLSAxKSlcbiBcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbkBAIC03MjMsNyAmIzQzOzczNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFzc2lnbl9laXAoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGRzdClcbiBcdGlmIChjdHh0LVx1MDAzZW9wX2J5dGVzICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSlcbiBcdFx0YWRkci5lYSA9IGRzdCBcdTAwMjYgKCgxVUwgXHUwMDNjXHUwMDNjIChjdHh0LVx1MDAzZW9wX2J5dGVzIFx1MDAzY1x1MDAzYyAzKSkgLSAxKTtcbiBcdHJjID0gX19saW5lYXJpemUoY3R4dCwgYWRkciwgXHUwMDI2bWF4X3NpemUsIDEsIGN0eHQtXHUwMDNlbW9kZSwgXHUwMDI2bGluZWFyLFxuLVx0XHRcdCBYODZFTVVMX0ZfRkVUQ0gpO1xuJiM0MztcdFx0XHQgWDg2RU1VTF9GX0JSQU5DSCk7XG4gXHRpZiAocmMgPT0gWDg2RU1VTF9DT05USU5VRSlcbiBcdFx0Y3R4dC1cdTAwM2VfZWlwID0gYWRkci5lYTtcbiBcdHJldHVybiByYztcbkBAIC03OTgsNiAmIzQzOzgwOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGptcF9yZWwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCByZWwpXG4gc3RhdGljIGludCBsaW5lYXJfcmVhZF9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGxpbmVhcixcbiBcdFx0XHQgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXplKVxuIHtcbiYjNDM7XHRpZiAoY3R4dC1cdTAwM2VvcHMtXHUwMDNlaXNfbGFzc192aW9sYXRpb24oY3R4dCwgbGluZWFyLCBzaXplLCBYODZFTVVMX0ZfSU1QTElDSVQpKVxuJiM0MztcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4mIzQzO1xuIFx0cmV0dXJuIGN0eHQtXHUwMDNlb3BzLVx1MDAzZXJlYWRfc3RkKGN0eHQsIGxpbmVhciwgZGF0YSwgc2l6ZSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24sIHRydWUpO1xuIH1cbiBcbkBAIC04MDUsNiAmIzQzOzgxOSwxMCBAQCBzdGF0aWMgaW50IGxpbmVhcl93cml0ZV9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdFx0ICAgICAgIHVsb25nIGxpbmVhciwgdm9pZCAqZGF0YSxcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuJiM0MztcdGlmIChjdHh0LVx1MDAzZW9wcy1cdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX1dSSVRFKSlcbiYjNDM7XHRcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xuJiM0MztcbiBcdHJldHVybiBjdHh0LVx1MDAzZW9wcy1cdTAwM2V3cml0ZV9zdGQoY3R4dCwgbGluZWFyLCBkYXRhLCBzaXplLCBcdTAwMjZjdHh0LVx1MDAzZWV4Y2VwdGlvbiwgdHJ1ZSk7XG4gfVxuIFxuQEAgLTI1NzIsMTIgJiM0MzsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdGJhc2UgfD0gKCh1NjQpYmFzZTMpIFx1MDAzY1x1MDAzYyAzMjtcbiAjZW5kaWZcbi1cdHIgPSBvcHMtXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSAmIzQzOyAxMDIsIFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIsIE5VTEwsIHRydWUpO1xuJiM0MztcdHIgPSBsaW5lYXJfcmVhZF9zeXN0ZW0oY3R4dCwgYmFzZSAmIzQzOyAxMDIsIFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIpO1xuIFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKGlvX2JpdG1hcF9wdHIgJiM0MzsgcG9ydC84IFx1MDAzZSBkZXNjX2xpbWl0X3NjYWxlZChcdTAwMjZ0cl9zZWcpKVxuJiM0MztcdGlmIChpb19iaXRtYXBfcHRyICYjNDM7IHBvcnQvOCAmIzQzOyAxIFx1MDAzZSBkZXNjX2xpbWl0X3NjYWxlZChcdTAwMjZ0cl9zZWcpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyID0gb3BzLVx1MDAzZXJlYWRfc3RkKGN0eHQsIGJhc2UgJiM0MzsgaW9fYml0bWFwX3B0ciAmIzQzOyBwb3J0LzgsIFx1MDAyNnBlcm0sIDIsIE5VTEwsIHRydWUpO1xuJiM0MztcdHIgPSBsaW5lYXJfcmVhZF9zeXN0ZW0oY3R4dCwgYmFzZSAmIzQzOyBpb19iaXRtYXBfcHRyICYjNDM7IHBvcnQvOCwgXHUwMDI2cGVybSwgMik7XG4gXHRpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoKHBlcm0gXHUwMDNlXHUwMDNlIGJpdF9pZHgpIFx1MDAyNiBtYXNrKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmYxMzZkM2QwYmE0MjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIHN0cnVjdCB4ODZfaW5zdHJ1Y3Rpb25faW5mbyB7XG4gI2RlZmluZSBYODZFTVVMX0ZfSU5WTFBHXHRcdEJJVCgzKVxuICNkZWZpbmUgWDg2RU1VTF9GX01TUlx0XHRcdEJJVCg0KVxuICNkZWZpbmUgWDg2RU1VTF9GX0RUX0xPQURcdFx0QklUKDUpXG4mIzQzOyNkZWZpbmUgWDg2RU1VTF9GX0JSQU5DSFx0XHRCSVQoNilcbiBcbiBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHtcbiBcdHZvaWQgKCp2bV9idWdnZWQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbkBAIC0yNDgsNyAmIzQzOzI0OSw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMge1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLVxuJiM0MztcdGJvb2wgKCppc19sYXNzX3Zpb2xhdGlvbikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBcdGJvb2wgKCppc19jYW5vbmljYWxfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmhcbmluZGV4IDQ0N2YwZWMzZTYzZTQuLmJlODYyMTY5NWM0MTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5AQCAtMjgsNyAmIzQzOzI4LDcgQEAgc3RhdGljX2Fzc2VydCghKEtWTV9QT1NTSUJMRV9DUjBfR1VFU1RfQklUUyBcdTAwMjYgWDg2X0NSMF9QRFBUUl9CSVRTKSk7XG4gXHRcdFx0ICB8IFg4Nl9DUjRfT1NYU0FWRSB8IFg4Nl9DUjRfU01FUCB8IFg4Nl9DUjRfRlNHU0JBU0UgXFxcbiBcdFx0XHQgIHwgWDg2X0NSNF9PU1hNTUVYQ1BUIHwgWDg2X0NSNF9MQTU3IHwgWDg2X0NSNF9WTVhFIFxcXG4gXHRcdFx0ICB8IFg4Nl9DUjRfU01BUCB8IFg4Nl9DUjRfUEtFIHwgWDg2X0NSNF9VTUlQIFxcXG4tXHRcdFx0ICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUKSlcbiYjNDM7XHRcdFx0ICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUIHwgWDg2X0NSNF9MQVNTKSlcbiBcbiAjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpXG4gXG5AQCAtNDA1LDYgJiM0Mzs0MDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19rdm1faXNfdmFsaWRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gXHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X1BDSURFOyAgICAgICBcXFxuIFx0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQU0pKSAgICAgICAgICAgXFxcbiBcdFx0X19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFNX1NVUDsgICAgIFxcXG4mIzQzO1x0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQVNTKSkgICAgICAgICAgXFxcbiYjNDM7XHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0xBU1M7ICAgICAgICBcXFxuIFx0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9TSFNUSykgXHUwMDI2XHUwMDI2ICAgICAgIFxcXG4gXHQgICAgIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0lCVCkpICAgICAgICAgICBcXFxuIFx0XHRfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9DRVQ7ICAgICAgICAgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCAwZmYzMjMwZmQ5NWU4Li4zNTgwYWFkYThkMmM4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTAzMSw2ICYjNDM7MTAzMSw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQudmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yID0ga3ZtX3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcixcbiBcbiBcdC5nZXRfdW50YWdnZWRfYWRkciA9IHZteF9nZXRfdW50YWdnZWRfYWRkcixcbiYjNDM7XHQuaXNfbGFzc192aW9sYXRpb24gPSB2bXhfaXNfbGFzc192aW9sYXRpb24sXG4gXG4gXHQubWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KG1lbV9lbmNfaW9jdGwpLFxuIFx0LnZjcHVfbWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY19pb2N0bCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTI5OSwxMSAmIzQzOzUyOTksMTIgQEAgaW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbiBcdFx0XHQqcmV0ID0gb2ZmO1xuIFxuIFx0XHQqcmV0ID0gdm14X2dldF91bnRhZ2dlZF9hZGRyKHZjcHUsICpyZXQsIDApO1xuLVx0XHQvKiBMb25nIG1vZGU6ICNHUCgwKS8jU1MoMCkgaWYgdGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIGFcbi1cdFx0ICogbm9uLWNhbm9uaWNhbCBmb3JtLiBUaGlzIGlzIHRoZSBvbmx5IGNoZWNrIG9uIHRoZSBtZW1vcnlcbi1cdFx0ICogZGVzdGluYXRpb24gZm9yIGxvbmcgbW9kZSFcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBMb25nIG1vZGU6ICNHUCgwKS8jU1MoMCkgaWYgdGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIGFcbiYjNDM7XHRcdCAqIG5vbi1jYW5vbmljYWwgZm9ybSwgb3IgaWYgdGhlIGFjY2VzcyB2aW9sYXRlcyBMQVNTLlxuIFx0XHQgKi9cbi1cdFx0ZXhuID0gaXNfbm9uY2Fub25pY2FsX2FkZHJlc3MoKnJldCwgdmNwdSwgMCk7XG4mIzQzO1x0XHRleG4gPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqcmV0LCB2Y3B1LCAwKSB8fFxuJiM0MztcdFx0ICAgICAgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHZjcHUsICpyZXQsIGxlbiwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIG5vdCBpbiBsb25nIG1vZGUsIHRoZSB2aXJ0dWFsL2xpbmVhciBhZGRyZXNzIGlzXG5AQCAtNjEwOCw3ICYjNDM7NjEwOSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHR5cGUgIT0gVk1YX1ZQSURfRVhURU5UX0FMTF9DT05URVhUIFx1MDAyNlx1MDAyNiAhb3BlcmFuZC52cGlkKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9JTlZBTElEX09QRVJBTkRfVE9fSU5WRVBUX0lOVlZQSUQpO1xuIFxuLVx0LyogTEFNIGRvZXNuJiMzOTt0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCIGludmFsaWRhdGlvbi4gKi9cbiYjNDM7XHQvKiBMQU0gYW5kIExBU1MgZG9uJiMzOTt0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCIGludmFsaWRhdGlvbi4gKi9cbiBcdGlmICh0eXBlID09IFZNWF9WUElEX0VYVEVOVF9JTkRJVklEVUFMX0FERFIgXHUwMDI2XHUwMDI2XG4gXHQgICAgaXNfbm9uY2Fub25pY2FsX2ludmxwZ19hZGRyZXNzKG9wZXJhbmQuZ2xhLCB2Y3B1KSlcbiBcdFx0cmV0dXJuIG5lc3RlZF92bXhfZmFpbCh2Y3B1LCBWTVhFUlJfSU5WQUxJRF9PUEVSQU5EX1RPX0lOVkVQVF9JTlZWUElEKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xuaW5kZXggNzcxYzc1YTU4MzQzNi4uNGFjMzA1ZWQ2ZGVhMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvc2d4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvc2d4LmNcbkBAIC0zOSw3ICYjNDM7MzksOCBAQCBzdGF0aWMgaW50IHNneF9nZXRfZW5jbHNfZ3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHRcdGZhdWx0ID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAobGlrZWx5KGlzXzY0X2JpdF9tb2RlKHZjcHUpKSkge1xuIFx0XHQqZ3ZhID0gdm14X2dldF91bnRhZ2dlZF9hZGRyKHZjcHUsICpndmEsIDApO1xuLVx0XHRmYXVsdCA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpndmEsIHZjcHUsIDApO1xuJiM0MztcdFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fFxuJiM0MztcdFx0XHR2bXhfaXNfbGFzc192aW9sYXRpb24odmNwdSwgKmd2YSwgc2l6ZSwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHQqZ3ZhIFx1MDAyNj0gMHhmZmZmZmZmZjtcbiBcdFx0ZmF1bHQgPSAocy51bnVzYWJsZSkgfHxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uMzA4MjE5NTkwNmRhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC03ODg1LDYgJiM0Mzs3ODg1LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeV9pbmRleCh2Y3B1LCAweDcsIDEpO1xuIFx0Y3I0X2ZpeGVkMV91cGRhdGUoWDg2X0NSNF9MQU1fU1VQLCAgICBlYXgsIGZlYXR1cmVfYml0KExBTSkpO1xuJiM0MztcdGNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFTUywgICAgICAgZWF4LCBmZWF0dXJlX2JpdChMQVNTKSk7XG4gXG4gI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlXG4gfVxuQEAgLTg1NzEsNyAmIzQzOzg1NzIsOCBAQCBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFnc1xuIFx0aW50IGxhbV9iaXQ7XG4gXHR1bnNpZ25lZCBsb25nIGNyM19iaXRzO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX0lOVkxQRykpXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0JSQU5DSCB8IFg4NkVNVUxfRl9JTVBMSUNJVCB8XG4mIzQzO1x0XHQgICAgIFg4NkVNVUxfRl9JTlZMUEcpKVxuIFx0XHRyZXR1cm4gZ3ZhO1xuIFxuIFx0aWYgKCFpc182NF9iaXRfbW9kZSh2Y3B1KSlcbkBAIC04NjAzLDYgJiM0Mzs4NjA1LDUzIEBAIGd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzXG4gXHRyZXR1cm4gKHNpZ25fZXh0ZW5kNjQoZ3ZhLCBsYW1fYml0KSBcdTAwMjYgfkJJVF9VTEwoNjMpKSB8IChndmEgXHUwMDI2IEJJVF9VTEwoNjMpKTtcbiB9XG4gXG4mIzQzO2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgYm9vbCBpc19zdXBlcnZpc29yX2FkZHJlc3MgPSAhIShndmEgXHUwMDI2IEJJVF9VTEwoNjMpKTtcbiYjNDM7XHRjb25zdCBib29sIGltcGxpY2l0X3N1cGVydmlzb3IgPSAhIShmbGFncyBcdTAwMjYgWDg2RU1VTF9GX0lNUExJQ0lUKTtcbiYjNDM7XHRjb25zdCBib29sIGZldGNoID0gISEoZmxhZ3MgXHUwMDI2IFg4NkVNVUxfRl9GRVRDSCk7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX2lzX2NyNF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjRfTEFTUykgfHwgIWlzX2xvbmdfbW9kZSh2Y3B1KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJTlZMUEcgaXNuJiMzOTt0IHN1YmplY3QgdG8gTEFTUywgZS5nLiB0byBhbGxvdyBpbnZhbGlkYXRpbmcgdXNlcnNwYWNlXG4mIzQzO1x0ICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbiYjMzk7dCBzdWJqZWN0XG4mIzQzO1x0ICogdG8gTEFTUyBpbiBvcmRlciB0byBzaW1wbGlmeSBmYXIgY29udHJvbCB0cmFuc2ZlcnMgKHRoZSBzdWJzZXF1ZW50XG4mIzQzO1x0ICogZmV0Y2ggd2lsbCBlbmZvcmNlIExBU1MgYXMgYXBwcm9wcmlhdGUpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgKFg4NkVNVUxfRl9CUkFOQ0ggfCBYODZFTVVMX0ZfSU5WTFBHKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yIFx1MDAyNlx1MDAyNiB2bXhfZ2V0X2NwbCh2Y3B1KSA9PSAzKVxuJiM0MztcdFx0cmV0dXJuIGlzX3N1cGVydmlzb3JfYWRkcmVzcztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMQVNTIGVuZm9yY2VtZW50IGZvciBzdXBlcnZpc29yLW1vZGUgZGF0YSBhY2Nlc3NlcyBkZXBlbmRzIG9uIFNNQVBcbiYjNDM7XHQgKiBiZWluZyBlbmFibGVkLCBhbmQgbGlrZSBTTUFQIGlnbm9yZXMgZXhwbGljaXQgYWNjZXNzZXMgaWYgUkZMQUdTLkFDPTEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFmZXRjaCkge1xuJiM0MztcdFx0aWYgKCFrdm1faXNfY3I0X2JpdF9zZXQodmNwdSwgWDg2X0NSNF9TTUFQKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghaW1wbGljaXRfc3VwZXJ2aXNvciBcdTAwMjZcdTAwMjYgKGt2bV9nZXRfcmZsYWdzKHZjcHUpIFx1MDAyNiBYODZfRUZMQUdTX0FDKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZW50aXJlIGFjY2VzcyBtdXN0IGJlIGluIHRoZSBhcHByb3ByaWF0ZSBhZGRyZXNzIHNwYWNlLiAgTm90ZSxcbiYjNDM7XHQgKiBpZiBMQU0gaXMgc3VwcG9ydGVkLCBAZ3ZhIGhhcyBhbHJlYWR5IGJlZW4gdW50YWdnZWQsIHNvIGJhcnJpbmcgYVxuJiM0MztcdCAqIG1hc3NpdmUgYXJjaGl0ZWN0dXJlIGNoYW5nZSB0byBleHBhbmQgdGhlIGNhbm9uaWNhbCBhZGRyZXNzIHJhbmdlLFxuJiM0MztcdCAqIGl0JiMzOTtzIGltcG9zc2libGUgZm9yIGEgdXNlciBhY2Nlc3MgdG8gc3RyYWRkbGUgdXNlciBhbmQgc3VwZXJ2aXNvclxuJiM0MztcdCAqIGFkZHJlc3Mgc3BhY2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiAhKChndmEgJiM0Mzsgc2l6ZSAtIDEpIFx1MDAyNiBCSVRfVUxMKDYzKSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICFpc19zdXBlcnZpc29yX2FkZHJlc3M7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGludCB2bXhfaGFuZGxlX2ludGVsX3B0X2ludHIodm9pZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li40M2RmNzI1YTc3ZjBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTM5Nyw2ICYjNDM7Mzk3LDkgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG4mIzQzO2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiYjNDM7XG4gdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gdTY0IHZteF9nZXRfc3VwcG9ydGVkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBob3N0X2luaXRpYXRlZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBkOTRiNTkxNDBjNDUyLi5hNmVhNzM2ZmQ0OGZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC01ODAwLDYgJiM0Mzs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0XHRcdFx0ICAgICAgIGFkZHIsIGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV94ODZfY2FsbChpc19sYXNzX3Zpb2xhdGlvbikoZW11bF90b192Y3B1KGN0eHQpLCBhZGRyLCBzaXplLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdFx0XHQgICAgICAgZ3ZhX3QgYWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC01ODU5LDYgJiM0Mzs1ODY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XG4gXHQuZ2V0X3hjciAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF94Y3IsXG4gXHQuc2V0X3hjciAgICAgICAgICAgICA9IGVtdWxhdG9yX3NldF94Y3IsXG4gXHQuZ2V0X3VudGFnZ2VkX2FkZHIgICA9IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyLFxuJiM0MztcdC5pc19sYXNzX3Zpb2xhdGlvbiAgID0gZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24sXG4gXHQuaXNfY2Fub25pY2FsX2FkZHIgICA9IGVtdWxhdG9yX2lzX2Nhbm9uaWNhbF9hZGRyLFxuIFx0LnBhZ2VfYWRkcmVzc192YWxpZCAgPSBlbXVsYXRvcl9wYWdlX2FkZHJlc3NfdmFsaWQsXG4gfTtcbkBAIC0xMDc0NSw3ICYjNDM7MTA3NTIsNyBAQCBpbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6XG4gXHRcdC8qXG4tXHRcdCAqIExBTSBkb2VzbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxuJiM0MztcdFx0ICogTEFNIGFuZCBMQVNTIGRvbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxuIFx0XHQgKiBpbnZhbGlkYXRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoKCFwY2lkX2VuYWJsZWQgXHUwMDI2XHUwMDI2IChvcGVyYW5kLnBjaWQgIT0gMCkpIHx8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDAwMTIzMTY5YTE5MGEuLjg2ZmE5M2UwZjZjMDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtOTEsNiAmIzQzOzkxLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2xhc3NfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L21vbml0b3JfbXdhaXRfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L21zcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuaW5kZXggNmU2ZjcwMDM1NTA4YS4uZjQyNTE2NjE3NGY5ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtNzksNiAmIzQzOzc5LDcgQEAgY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpO1xuICNkZWZpbmUgWDg2X0NSNF9TTUVQXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDIwKVxuICNkZWZpbmUgWDg2X0NSNF9TTUFQXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDIxKVxuICNkZWZpbmUgWDg2X0NSNF9QS0VcdFx0KDF1bCBcdTAwM2NcdTAwM2MgMjIpXG4mIzQzOyNkZWZpbmUgWDg2X0NSNF9MQVNTXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDI3KVxuIFxuIHN0cnVjdCB4c3RhdGVfaGVhZGVyIHtcbiBcdHU2NFx0XHRcdFx0eHN0YXRlX2J2O1xuQEAgLTE5NSw2ICYjNDM7MTk2LDcgQEAgc3RydWN0IGt2bV94ODZfY3B1X2ZlYXR1cmUge1xuICNkZWZpbmVcdFg4Nl9GRUFUVVJFX1NQRUNfQ1RSTFx0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyNilcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9BUkNIX0NBUEFCSUxJVElFU1x0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVEWCwgMjkpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfUEtTXHRcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVDWCwgMzEpXG4mIzQzOyNkZWZpbmVcdFg4Nl9GRUFUVVJFX0xBU1NcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDEsIEVBWCwgNilcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9YVElMRUNGR1x0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4RCwgMCwgRUFYLCAxNylcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9YVElMRURBVEFcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweEQsIDAsIEVBWCwgMTgpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfWFNBVkVTXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAxLCBFQVgsIDMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbGFzc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YzVjZmEyNGMyYmRkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2xhc3NfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSw1NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSB0ZXN0XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiwgSW50ZWwgQ29ycG9yYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgdGVzdCB0aGF0IHRoZSBndWVzdCBjYW4mIzM5O3Qgc2V0IENSNC5MQVNTIHdoZW4gTEFTUyBpc24mIzM5O3RcbiYjNDM7ICogZW51bWVyYXRlZCBpbiB0aGUgZ3Vlc3QmIzM5O3MgQ1BVSUQuICBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgQ1I0LkxBU1MgdmlhXG4mIzQzOyAqIEtWTV9TRVRfU1JFR1MgaXMgY292ZXJlZCBieSBzZXRfc3JlZ3NfdGVzdC5cbiYjNDM7ICpcbiYjNDM7ICogVGVzdGluZyBMQVNTIGVuZm9yY2VtZW50IHJlcXVpcmVzIHJ1bm5pbmcgc3VwZXJ2aXNvciBjb2RlIGluIHRoZVxuJiM0MzsgKiB1cHBlciBoYWxmIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCB3aGljaCB0aGUgS1ZNIHNlbGZ0ZXN0cyBmcmFtZXdvcmtcbiYjNDM7ICogZG9lc24mIzM5O3Qgc3VwcG9ydC4gRW5hYmxpbmcgQ1I0LkxBU1MgaW4gdGhlIGN1cnJlbnQgZnJhbWV3b3JrIHdvdWxkXG4mIzQzOyAqIG1ha2UgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gZmV0Y2ggYSB2aW9sYXRpb24gYW5kIHRyaXBsZS1mYXVsdCB0aGVcbiYjNDM7ICogZ3Vlc3QuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXaXRob3V0IExBU1MgaW4gQ1BVSUQsIGEgZ3Vlc3Qgd3JpdGUgbXVzdCBnZW5lcmF0ZSAjR1Agd2l0aG91dFxuJiM0MzsgKiBjaGFuZ2luZyBDUjQuIFJlc2VydmVkIGJpdHMgYXJlIG93bmVkIGJ5IEtWTSBzbyB0aGUgd3JpdGUgaXNcbiYjNDM7ICogZ3VhcmFudGVlZCB0byBleGl0IHRvIEtWTS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHU4IHZlY3RvcjtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKCF0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpO1xuJiM0MztcbiYjNDM7XHR2ZWN0b3IgPSBrdm1fYXNtX3NhZmUoXCYjMzQ7bW92ICVbY3I0XSwgJSVjcjRcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIFtjcjRdIFwmIzM0O3JcJiMzNDsoZ2V0X2NyNCgpIHwgWDg2X0NSNF9MQVNTKSk7XG4mIzQzO1x0X19HVUVTVF9BU1NFUlQodmVjdG9yID09IEdQX1ZFQ1RPUixcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtXYW50ZWQgI0dQIG9uIENSNC5MQVNTLCBnb3QgJXNcJiMzNDssIGV4X3N0cih2ZWN0b3IpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIShnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEFTUykpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9ET05FKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9MQVNTKSk7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0dmNwdV9jbGVhcl9jcHVpZF9mZWF0dXJlKHZjcHUsIFg4Nl9GRUFUVVJFX0xBU1MpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbmluZGV4IDYwMzIyNmZmZTQzNzQuLjhiMzc1ZmVhODRkMDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIHN0YXRpYyB1NjQgY2FsY19zdXBwb3J0ZWRfY3I0X2ZlYXR1cmVfYml0cyh2b2lkKVxuIFx0XHRjcjQgfD0gWDg2X0NSNF9TTUFQO1xuIFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BLVSkpXG4gXHRcdGNyNCB8PSBYODZfQ1I0X1BLRTtcbiYjNDM7XHRpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpXG4mIzQzO1x0XHRjcjQgfD0gWDg2X0NSNF9MQVNTO1xuIFxuIFx0cmV0dXJuIGNyNDtcbiB9XG5AQCAtMTI4LDYgJiM0MzsxMzAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgY3I0KVxuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfU01FUCk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9TTUFQKTtcbiBcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjQsIHNyZWdzLCBYODZfQ1I0X1BLRSk7XG4mIzQzO1x0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfTEFTUyk7XG4gXG4gXHRmb3IgKGkgPSAzMjsgaSBcdTAwM2MgNjQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgQklUKGkpKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGVcbmluZGV4IDQzNDA2NTIxNWQxMjcuLjI1MmQ3NTdmYzFiMmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZVxuQEAgLTE5LDcgJiM0MzsxOSw4IEBAIFRBUkdFVFNfQ18zMkJJVF9PTkxZIDo9IGVudHJ5X2Zyb21fdm04NiB0ZXN0X3N5c2NhbGxfdmRzbyB1bndpbmRfdmRzbyBcXFxuIFx0XHRcdHRlc3RfRkNNT1YgdGVzdF9GQ09NSSB0ZXN0X0ZJU1RUUCBcXFxuIFx0XHRcdHZkc29fcmVzdG9yZXJcbiBUQVJHRVRTX0NfNjRCSVRfT05MWSA6PSBmc2dzYmFzZSBzeXNyZXRfcmlwIHN5c2NhbGxfbnVtYmVyaW5nIFxcXG4tXHRcdFx0Y29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweFxuJiM0MztcdFx0XHRjb3JydXB0X3hzdGF0ZV9oZWFkZXIgYW14IGxhbSB0ZXN0X3NoYWRvd19zdGFjayBhdnggYXB4IFxcXG4mIzQzO1x0XHRcdGxhc3NcbiAjIFNvbWUgc2VsZnRlc3RzIHJlcXVpcmUgMzJiaXQgc3VwcG9ydCBlbmFibGVkIGFsc28gb24gNjRiaXQgc3lzdGVtc1xuIFRBUkdFVFNfQ18zMkJJVF9ORUVERUQgOj0gbGR0X2dkdCBwdHJhY2Vfc3lzY2FsbFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RkM2RjOGU0MWQxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhc3MuY1xuQEAgLTAsMCAmIzQzOzEsMTk2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGxhc3MuYyAtIFRlc3QgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgZW5mb3JjZW1lbnRcbiYjNDM7ICpcbiYjNDM7ICogV2l0aCBMQVNTIGVuYWJsZWQsIGEgdXNlci1tb2RlIHJlYWQsIHdyaXRlIG9yIGluc3RydWN0aW9uIGZldGNoIGF0IGFcbiYjNDM7ICoga2VybmVsIGFkZHJlc3MgcmFpc2VzIGEgI0dQIGluc3RlYWQgb2YgdGhlICNQRiB0aGF0IFNNQVAvU01FUCB3b3VsZFxuJiM0MzsgKiBwcm9kdWNlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3Vjb250ZXh0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hlbHBlcnMuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3g4Nl82NF9fXG4mIzQzOyMgZXJyb3IgVGhpcyB0ZXN0IGlzIDY0LWJpdCBvbmx5XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsXG4mIzQzOyAqIGFkZHJlc3MgcmFpc2VzIHRoZSB2ZXJ5IHNhbWUgI0dQIGZvciBhIGRpZmZlcmVudCByZWFzb24sIHNvIHRoZVxuJiM0MzsgKiBhZGRyZXNzIGhhcyB0byBiZSBjYW5vbmljYWwgdG8gYXR0cmlidXRlIHRoZSBmYXVsdCB0byBMQVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBCaXRzIDYzOjQ3IGFyZSBhbGwgc2V0IGhlcmUsIHdoaWNoIGlzIGNhbm9uaWNhbCB3aXRoIDQtbGV2ZWwgcGFnaW5nXG4mIzQzOyAqIGFzIHdlbGwgYXMgNS1sZXZlbCBwYWdpbmcuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEtFUk5FTF9BRERSXHQweGZmZmY4MDAwMDAwMDAwMDBVTFxuJiM0MztcbiYjNDM7c3RhdGljIHNpZ2ptcF9idWYgam1wYnVmO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIsIGZhdWx0X3JpcDtcbiYjNDM7XG4mIzQzOy8qIEhhbmRsZSBTSUdTRUdWICgjR1AgYW5kICNQRikgYXMgd2VsbCBhcyBTSUdCVVMgKCNTUykgKi9cbiYjNDM7c3RhdGljIHZvaWQgZmF1bHRfaGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QgKmluZm8sIHZvaWQgKmN0eF92b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dWNvbnRleHRfdCAqY3R4ID0gKHVjb250ZXh0X3QgKiljdHhfdm9pZDtcbiYjNDM7XG4mIzQzO1x0ZmF1bHRfdHJhcG5vID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19UUkFQTk9dO1xuJiM0MztcdGZhdWx0X2VyciA9IGN0eC1cdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfRVJSXTtcbiYjNDM7XHRmYXVsdF9yaXAgPSBjdHgtXHUwMDNldWNfbWNvbnRleHQuZ3JlZ3NbUkVHX1JJUF07XG4mIzQzO1x0c2lnbG9uZ2ptcChqbXBidWYsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgZGVsaW1zW10gPSBcJiMzNDsgXFxuXCYjMzQ7O1xuJiM0MztcdHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcdGNoYXIgbGluZVs0MDk2XTtcbiYjNDM7XHRGSUxFICpjcHVpbmZvO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgdGhlIGNwdWluZm8gZmxhZyByZWZsZWN0cyB3aGV0aGVyIHRoZSBrZXJuZWwgYWN0dWFsbHlcbiYjNDM7XHQgKiBlbmFibGVkIExBU1MuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1aW5mbyA9IGZvcGVuKFwmIzM0Oy9wcm9jL2NwdWluZm9cJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghY3B1aW5mbylcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtmYWlsZWQgdG8gb3BlbiAvcHJvYy9jcHVpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFmb3VuZCBcdTAwMjZcdTAwMjYgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBjcHVpbmZvKSkge1xuJiM0MztcdFx0Y2hhciAqZmxhZztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RybmNtcChsaW5lLCBcJiMzNDtmbGFnc1wmIzM0OywgNSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1hdGNoIHdob2xlIHdvcmRzIG9ubHksIG5vdCBhIHN1YnN0cmluZyBvZiBhbm90aGVyIGZsYWcuICovXG4mIzQzO1x0XHRmb3IgKGZsYWcgPSBzdHJ0b2sobGluZSwgZGVsaW1zKTsgZmxhZzsgZmxhZyA9IHN0cnRvayhOVUxMLCBkZWxpbXMpKSB7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGZsYWcsIFwmIzM0O2xhc3NcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmY2xvc2UoY3B1aW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmIChmb3VuZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBDUFVJRC4oRUFYPTA3SCxFQ1g9MSk6RUFYLkxBU1NbYml0IDZdICovXG4mIzQzO1x0X19jcHVpZF9jb3VudCgweDcsIDB4MSwgZWF4LCBlYngsIGVjeCwgZWR4KTtcbiYjNDM7XHRpZiAoZWF4IFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgNikpXG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtMQVNTIGlzIHN1cHBvcnRlZCBieSB0aGUgQ1BVIGJ1dCBub3QgZW5hYmxlZCBieSB0aGUga2VybmVsXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBHZW5lcmFsIFByb3RlY3Rpb24gRmF1bHQgKHRyYXBuci5oIGlzIG5vdCBleHBvcnRlZCB0byB1YXBpKSAqL1xuJiM0MzsjZGVmaW5lIFg4Nl9UUkFQX0dQXHQxM1xuJiM0MztcbiYjNDM7LyogQSBMQVNTIHZpb2xhdGlvbiByYWlzZXMgYSAjR1Agd2l0aCBhIG51bGwgZXJyb3IgY29kZS4gKi9cbiYjNDM7c3RhdGljIGJvb2wgaXNfbGFzc192aW9sYXRpb24odm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYXVsdF90cmFwbm8gPT0gWDg2X1RSQVBfR1AgXHUwMDI2XHUwMDI2ICFmYXVsdF9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3JlYWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChzaWdzZXRqbXAoam1wYnVmLCAxKSA9PSAwKSB7XG4mIzQzO1x0XHQqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilLRVJORUxfQUREUjtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDt0aGUgcmVhZCBkaWQgbm90IGZhdWx0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSxcbiYjNDM7XHRcdFx0IFwmIzM0O3RoZSByZWFkIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3dyaXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xuJiM0MztcdFx0Kih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopS0VSTkVMX0FERFIgPSAweDFhNTU7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCYjMzQ7dGhlIHdyaXRlIGRpZCBub3QgZmF1bHRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChpc19sYXNzX3Zpb2xhdGlvbigpLFxuJiM0MztcdFx0XHQgXCYjMzQ7dGhlIHdyaXRlIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFVzZSBpbmxpbmUgYXNtIHJhdGhlciB0aGFuIGEgY2FsbCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcjogYSBkaXJlY3RcbiYjNDM7ICogJiMzOTtjYWxsIHJlbDMyJiMzOTsgY2Fubm90IHJlYWNoIGEga2VybmVsIGFkZHJlc3MsIGFuZCBsZXR0aW5nIHRoZSBjb21waWxlciBsb3dlclxuJiM0MzsgKiB0aGUgaW5kaXJlY3QgYnJhbmNoIHJpc2tzIHJvdXRpbmcgaXQgdGhyb3VnaCBhIHRodW5rLCBvciBlbGlkaW5nIGl0XG4mIzQzOyAqIGFsdG9nZXRoZXIsIGVpdGhlciBvZiB3aGljaCB3b3VsZCBzdG9wIHRlc3RpbmcgdGhlIGZldGNoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZG9fZmV0Y2godW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtjYWxsIColW2ZuXVwmIzM0O1xuJiM0MztcdFx0ICAgICAgOiA6IFtmbl0gXCYjMzQ7clwmIzM0OyAoYWRkcilcbiYjNDM7XHRcdCAgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmF4XCYjMzQ7LCBcJiMzNDtyY3hcJiMzNDssIFwmIzM0O3JkeFwmIzM0OywgXCYjMzQ7cnNpXCYjMzQ7LCBcJiMzNDtyZGlcJiMzNDssXG4mIzQzO1x0XHRcdFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LCBcJiMzNDtyMTFcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF9mZXRjaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHtcbiYjNDM7XHRcdGRvX2ZldGNoKEtFUk5FTF9BRERSKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRXhlY3V0aW9uIHJlc3VtZWQgYXQgYW4gdW5rbm93biBwb2ludCB3aXRoIGFuIHVuZGVmaW5lZFxuJiM0MztcdFx0ICogcmVnaXN0ZXIgc3RhdGUsIHNvIGRvbiYjMzk7dCB0cnkgdG8gcnVuIHRoZSByZXN0IG9mIHRoZSB0ZXN0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3RoZSBmZXRjaCByZXR1cm5lZCB3aXRob3V0IGZhdWx0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQnJhbmNoIGluc3RydWN0aW9ucyBkbyBub3QgY2hlY2sgdGhlaXIgdGFyZ2V0IGFnYWluc3QgTEFTUy4gVGhlXG4mIzQzO1x0ICogdmlvbGF0aW9uIGhhcHBlbnMgd2hlbiB0aGUgdGFyZ2V0IGFkZHJlc3MgaXMgdXNlZCB0byBmZXRjaCB0aGVcbiYjNDM7XHQgKiBuZXh0IGluc3RydWN0aW9uLCBzbyB0aGUgZmF1bHQgbXVzdCBiZSByZXBvcnRlZCBhdCB0aGUgdGFyZ2V0XG4mIzQzO1x0ICogcmF0aGVyIHRoYW4gYXQgdGhlIGJyYW5jaC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmF1bHRfcmlwICE9IEtFUk5FTF9BRERSKSB7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCYjMzQ7dGhlIGZldGNoIGZhdWx0ZWQgYXQgUklQIDB4JWx4IGluc3RlYWQgb2YgMHglbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgZmF1bHRfcmlwLCAodW5zaWduZWQgbG9uZylLRVJORUxfQUREUik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXG4mIzQzO1x0XHRcdCBcJiMzNDt0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBUT1RBTF9URVNUUyAzXG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpc19sYXNzX2FjdGl2ZSgpKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TEFTUyBpcyBub3QgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oVE9UQUxfVEVTVFMpO1xuJiM0MztcbiYjNDM7XHRzZXRoYW5kbGVyKFNJR1NFR1YsIGZhdWx0X2hhbmRsZXIsIDApO1xuJiM0MztcdC8qIE9ubHkgdG8gcmVwb3J0IGEgI1NTOyBMQVNTIHNob3VsZG4mIzM5O3QgY2F1c2Ugb25lIGhlcmUuICovXG4mIzQzO1x0c2V0aGFuZGxlcihTSUdCVVMsIGZhdWx0X2hhbmRsZXIsIDApO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBY2Nlc3NpbmcgdGhlIGtlcm5lbCBhZGRyZXNzIDB4JWx4IGZyb20gdXNlcnNwYWNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgICh1bnNpZ25lZCBsb25nKUtFUk5FTF9BRERSKTtcbiYjNDM7XHR0ZXN0X2tlcm5lbF9yZWFkKCk7XG4mIzQzO1x0dGVzdF9rZXJuZWxfd3JpdGUoKTtcbiYjNDM7XHR0ZXN0X2tlcm5lbF9mZXRjaCgpO1xuJiM0MztcbiYjNDM7XHRjbGVhcmhhbmRsZXIoU0lHQlVTKTtcbiYjNDM7XHRjbGVhcmhhbmRsZXIoU0lHU0VHVik7XG4mIzQzO1xuJiM0MztcdGtzZnRfZmluaXNoZWQoKTtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O1g4Nl9TR1gmIzM0OywKICAgICYjMzQ7WDg2X1NHWF9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bXhfaXNfbGFzc192aW9sYXRpb24mIzM0OywKICAgICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX2ludnBjaWQmIzM0OywKICAgICYjMzQ7dm14X2dldF91bnRhZ2dlZF9hZGRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNGIxODVkNzA5YTA2YWY3ODhmZDdkYTgxZjhmNjhkYjMzNjg4NjA2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwMjoxNTozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IGUyMTNjOWFlM2UzMDEuLmE4MmIyMDI4MWYzMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaApAQCAtMTQ2LDYgJiM0MzsxNDYsNyBAQCBLVk1fWDg2X09QKGNvbXBsZXRlX2VtdWxhdGVkX21zcikKIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7CiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChpc19sYXNzX3Zpb2xhdGlvbikKIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYWtlX3ByaXZhdGUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyODM4NDc2MTlmZjg4Li5kMjE4MWE4MDVhY2U0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE3MjcsNiAmIzQzOzE3MjcsOCBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCXVuc2lnbmVkIGxvbmcgKCp2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIAlndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJYm9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAl2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVAogCWludCAoKmdtZW1fbWFrZV9wcml2YXRlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKaW5kZXggOWU5Y2Y2NTM4YTk2ZS4uYzRkYmQwMGY1ZTRlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKQEAgLTEwMjksNiAmIzQzOzEwMjksNyBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpCiAJCUYoU000KSwKIAkJRihBVlhfVk5OSSksCiAJCUYoQVZYNTEyX0JGMTYpLAomIzQzOwkJWDg2XzY0X0YoTEFTUyksCiAJCUYoQ01QQ0NYQUREKSwKIAkJRihGWlJNKSwKIAkJRihGU1JTKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCmluZGV4IDgwNzFiMzcyZDIzM2UuLjljYmZkZTY0OTA2NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpAQCAtNjcyLDcgJiM0Mzs2NzIsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJICAgIChmbGFncyAmYW1wOyBYODZFTVVMX0ZfV1JJVEUpKQogCQkJZ290byBiYWQ7CiAJCS8qIHVucmVhZGFibGUgY29kZSBzZWdtZW50ICovCi0JCWlmICghKGZsYWdzICZhbXA7IFg4NkVNVUxfRl9GRVRDSCkgJmFtcDsmYW1wOyAoZGVzYy50eXBlICZhbXA7IDgpICZhbXA7JmFtcDsgIShkZXNjLnR5cGUgJmFtcDsgMikpCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0JSQU5DSCkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZGVzYy50eXBlICZhbXA7IDgpICZhbXA7JmFtcDsgIShkZXNjLnR5cGUgJmFtcDsgMikpCiAJCQlnb3RvIGJhZDsKIAkJbGltID0gZGVzY19saW1pdF9zY2FsZWQoJmFtcDtkZXNjKTsKIAkJaWYgKCEoZGVzYy50eXBlICZhbXA7IDgpICZhbXA7JmFtcDsgKGRlc2MudHlwZSAmYW1wOyA0KSkgewpAQCAtNjkyLDYgJiM0Mzs2OTMsMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19saW5lYXJpemUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCX0KIAkJYnJlYWs7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBMQVNTIGFuZCBjYW5vbmljYWxpdHkgY2hlY2tzIGdlbmVyYXRlIHRoZSBzYW1lIGZhdWx0IGFuZAomIzQzOwkgKiB0aGVpciByZWxhdGl2ZSBvcmRlciBpcyBub3QgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQuIEFsc28sCiYjNDM7CSAqIHRoZSBTRE0gZG9lc24mIzM5O3QgcHJpb3JpdGl6ZSBMQVNTIHZpb2xhdGlvbnMgYWdhaW5zdAomIzQzOwkgKiBhbGlnbm1lbnQtY2hlY2sgZmF1bHRzLCBzbyBhbnkgb3JkZXIgaXMgbGVnYWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4dC0mZ3Q7b3BzLSZndDtpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsYSwgc2l6ZSwgZmxhZ3MpKQomIzQzOwkJZ290byBiYWQ7CiYjNDM7CiAJaWYgKGxhICZhbXA7IChpbnNuX2FsaWdubWVudChjdHh0LCBzaXplKSAtIDEpKQogCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKQEAgLTcyMyw3ICYjNDM7NzM0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXNzaWduX2VpcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdWxvbmcgZHN0KQogCWlmIChjdHh0LSZndDtvcF9ieXRlcyAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpCiAJCWFkZHIuZWEgPSBkc3QgJmFtcDsgKCgxVUwgJmx0OyZsdDsgKGN0eHQtJmd0O29wX2J5dGVzICZsdDsmbHQ7IDMpKSAtIDEpOwogCXJjID0gX19saW5lYXJpemUoY3R4dCwgYWRkciwgJmFtcDttYXhfc2l6ZSwgMSwgY3R4dC0mZ3Q7bW9kZSwgJmFtcDtsaW5lYXIsCi0JCQkgWDg2RU1VTF9GX0ZFVENIKTsKJiM0MzsJCQkgWDg2RU1VTF9GX0JSQU5DSCk7CiAJaWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpCiAJCWN0eHQtJmd0O19laXAgPSBhZGRyLmVhOwogCXJldHVybiByYzsKQEAgLTc5OCw2ICYjNDM7ODA5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgam1wX3JlbChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHJlbCkKIHN0YXRpYyBpbnQgbGluZWFyX3JlYWRfc3lzdGVtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCB1bG9uZyBsaW5lYXIsCiAJCQkgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXplKQogewomIzQzOwlpZiAoY3R4dC0mZ3Q7b3BzLSZndDtpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsIFg4NkVNVUxfRl9JTVBMSUNJVCkpCiYjNDM7CQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKJiM0MzsKIAlyZXR1cm4gY3R4dC0mZ3Q7b3BzLSZndDtyZWFkX3N0ZChjdHh0LCBsaW5lYXIsIGRhdGEsIHNpemUsICZhbXA7Y3R4dC0mZ3Q7ZXhjZXB0aW9uLCB0cnVlKTsKIH0KIApAQCAtODA1LDYgJiM0Mzs4MTksMTAgQEAgc3RhdGljIGludCBsaW5lYXJfd3JpdGVfc3lzdGVtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJICAgICAgIHVsb25nIGxpbmVhciwgdm9pZCAqZGF0YSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKJiM0MzsJaWYgKGN0eHQtJmd0O29wcy0mZ3Q7aXNfbGFzc192aW9sYXRpb24oY3R4dCwgbGluZWFyLCBzaXplLAomIzQzOwkJCQkJIFg4NkVNVUxfRl9JTVBMSUNJVCB8IFg4NkVNVUxfRl9XUklURSkpCiYjNDM7CQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKJiM0MzsKIAlyZXR1cm4gY3R4dC0mZ3Q7b3BzLSZndDt3cml0ZV9zdGQoY3R4dCwgbGluZWFyLCBkYXRhLCBzaXplLCAmYW1wO2N0eHQtJmd0O2V4Y2VwdGlvbiwgdHJ1ZSk7CiB9CiAKQEAgLTI1NzIsMTIgJiM0MzsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWJhc2UgfD0gKCh1NjQpYmFzZTMpICZsdDsmbHQ7IDMyOwogI2VuZGlmCi0JciA9IG9wcy0mZ3Q7cmVhZF9zdGQoY3R4dCwgYmFzZSAmIzQzOyAxMDIsICZhbXA7aW9fYml0bWFwX3B0ciwgMiwgTlVMTCwgdHJ1ZSk7CiYjNDM7CXIgPSBsaW5lYXJfcmVhZF9zeXN0ZW0oY3R4dCwgYmFzZSAmIzQzOyAxMDIsICZhbXA7aW9fYml0bWFwX3B0ciwgMik7CiAJaWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIGZhbHNlOwotCWlmIChpb19iaXRtYXBfcHRyICYjNDM7IHBvcnQvOCAmZ3Q7IGRlc2NfbGltaXRfc2NhbGVkKCZhbXA7dHJfc2VnKSkKJiM0MzsJaWYgKGlvX2JpdG1hcF9wdHIgJiM0MzsgcG9ydC84ICYjNDM7IDEgJmd0OyBkZXNjX2xpbWl0X3NjYWxlZCgmYW1wO3RyX3NlZykpCiAJCXJldHVybiBmYWxzZTsKLQlyID0gb3BzLSZndDtyZWFkX3N0ZChjdHh0LCBiYXNlICYjNDM7IGlvX2JpdG1hcF9wdHIgJiM0MzsgcG9ydC84LCAmYW1wO3Blcm0sIDIsIE5VTEwsIHRydWUpOwomIzQzOwlyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgJiM0MzsgaW9fYml0bWFwX3B0ciAmIzQzOyBwb3J0LzgsICZhbXA7cGVybSwgMik7CiAJaWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIGZhbHNlOwogCWlmICgocGVybSAmZ3Q7Jmd0OyBiaXRfaWR4KSAmYW1wOyBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li5mMTM2ZDNkMGJhNDIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMTA1LDYgJiM0MzsxMDUsNyBAQCBzdHJ1Y3QgeDg2X2luc3RydWN0aW9uX2luZm8gewogI2RlZmluZSBYODZFTVVMX0ZfSU5WTFBHCQlCSVQoMykKICNkZWZpbmUgWDg2RU1VTF9GX01TUgkJCUJJVCg0KQogI2RlZmluZSBYODZFTVVMX0ZfRFRfTE9BRAkJQklUKDUpCiYjNDM7I2RlZmluZSBYODZFTVVMX0ZfQlJBTkNICQlCSVQoNikKIAogc3RydWN0IHg4Nl9lbXVsYXRlX29wcyB7CiAJdm9pZCAoKnZtX2J1Z2dlZCkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpOwpAQCAtMjQ4LDcgJiM0MzsyNDksOCBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHsKIAogCWd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLAogCQkJCSAgIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KJiM0MzsJYm9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgZ3ZhX3QgYWRkciwKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAlib29sICgqaXNfY2Fub25pY2FsX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLAogCQkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmgKaW5kZXggNDQ3ZjBlYzNlNjNlNC4uYmU4NjIxNjk1YzQxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmVncy5oCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBzdGF0aWNfYXNzZXJ0KCEoS1ZNX1BPU1NJQkxFX0NSMF9HVUVTVF9CSVRTICZhbXA7IFg4Nl9DUjBfUERQVFJfQklUUykpOwogCQkJICB8IFg4Nl9DUjRfT1NYU0FWRSB8IFg4Nl9DUjRfU01FUCB8IFg4Nl9DUjRfRlNHU0JBU0UgXAogCQkJICB8IFg4Nl9DUjRfT1NYTU1FWENQVCB8IFg4Nl9DUjRfTEE1NyB8IFg4Nl9DUjRfVk1YRSBcCiAJCQkgIHwgWDg2X0NSNF9TTUFQIHwgWDg2X0NSNF9QS0UgfCBYODZfQ1I0X1VNSVAgXAotCQkJICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUKSkKJiM0MzsJCQkgIHwgWDg2X0NSNF9MQU1fU1VQIHwgWDg2X0NSNF9DRVQgfCBYODZfQ1I0X0xBU1MpKQogCiAjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpCiAKQEAgLTQwNSw2ICYjNDM7NDA1LDggQEAgc3RhdGljIGlubGluZSBib29sIF9fa3ZtX2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQogCQlfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9QQ0lERTsgICAgICAgXAogCWlmICghX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfTEFNKSkgICAgICAgICAgIFwKIAkJX19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFNX1NVUDsgICAgIFwKJiM0MzsJaWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQVNTKSkgICAgICAgICAgXAomIzQzOwkJX19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFTUzsgICAgICAgIFwKIAlpZiAoIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX1NIU1RLKSAmYW1wOyZhbXA7ICAgICAgIFwKIAkgICAgIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0lCVCkpICAgICAgICAgICBcCiAJCV9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0NFVDsgICAgICAgICBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCmluZGV4IDBmZjMyMzBmZDk1ZTguLjM1ODBhYWRhOGQyYzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC0xMDMxLDYgJiM0MzsxMDMxLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkudmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yID0ga3ZtX3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvciwKIAogCS5nZXRfdW50YWdnZWRfYWRkciA9IHZteF9nZXRfdW50YWdnZWRfYWRkciwKJiM0MzsJLmlzX2xhc3NfdmlvbGF0aW9uID0gdm14X2lzX2xhc3NfdmlvbGF0aW9uLAogCiAJLm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSwKIAkudmNwdV9tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX2lvY3RsKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNTI5OSwxMSAmIzQzOzUyOTksMTIgQEAgaW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiwKIAkJCSpyZXQgPSBvZmY7CiAKIAkJKnJldCA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqcmV0LCAwKTsKLQkJLyogTG9uZyBtb2RlOiAjR1AoMCkvI1NTKDApIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiBhCi0JCSAqIG5vbi1jYW5vbmljYWwgZm9ybS4gVGhpcyBpcyB0aGUgb25seSBjaGVjayBvbiB0aGUgbWVtb3J5Ci0JCSAqIGRlc3RpbmF0aW9uIGZvciBsb25nIG1vZGUhCiYjNDM7CQkvKgomIzQzOwkJICogTG9uZyBtb2RlOiAjR1AoMCkvI1NTKDApIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiBhCiYjNDM7CQkgKiBub24tY2Fub25pY2FsIGZvcm0sIG9yIGlmIHRoZSBhY2Nlc3MgdmlvbGF0ZXMgTEFTUy4KIAkJICovCi0JCWV4biA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpyZXQsIHZjcHUsIDApOwomIzQzOwkJZXhuID0gaXNfbm9uY2Fub25pY2FsX2FkZHJlc3MoKnJldCwgdmNwdSwgMCkgfHwKJiM0MzsJCSAgICAgIHZteF9pc19sYXNzX3Zpb2xhdGlvbih2Y3B1LCAqcmV0LCBsZW4sIDApOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFdoZW4gbm90IGluIGxvbmcgbW9kZSwgdGhlIHZpcnR1YWwvbGluZWFyIGFkZHJlc3MgaXMKQEAgLTYxMDgsNyAmIzQzOzYxMDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodHlwZSAhPSBWTVhfVlBJRF9FWFRFTlRfQUxMX0NPTlRFWFQgJmFtcDsmYW1wOyAhb3BlcmFuZC52cGlkKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9JTlZBTElEX09QRVJBTkRfVE9fSU5WRVBUX0lOVlZQSUQpOwogCi0JLyogTEFNIGRvZXNuJiMzOTt0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCIGludmFsaWRhdGlvbi4gKi8KJiM0MzsJLyogTEFNIGFuZCBMQVNTIGRvbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovCiAJaWYgKHR5cGUgPT0gVk1YX1ZQSURfRVhURU5UX0lORElWSURVQUxfQUREUiAmYW1wOyZhbXA7CiAJICAgIGlzX25vbmNhbm9uaWNhbF9pbnZscGdfYWRkcmVzcyhvcGVyYW5kLmdsYSwgdmNwdSkpCiAJCXJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guYwppbmRleCA3NzFjNzVhNTgzNDM2Li40YWMzMDVlZDZkZWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvc2d4LmMKQEAgLTM5LDcgJiM0MzszOSw4IEBAIHN0YXRpYyBpbnQgc2d4X2dldF9lbmNsc19ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJZmF1bHQgPSB0cnVlOwogCX0gZWxzZSBpZiAobGlrZWx5KGlzXzY0X2JpdF9tb2RlKHZjcHUpKSkgewogCQkqZ3ZhID0gdm14X2dldF91bnRhZ2dlZF9hZGRyKHZjcHUsICpndmEsIDApOwotCQlmYXVsdCA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpndmEsIHZjcHUsIDApOwomIzQzOwkJZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fAomIzQzOwkJCXZteF9pc19sYXNzX3Zpb2xhdGlvbih2Y3B1LCAqZ3ZhLCBzaXplLCAwKTsKIAl9IGVsc2UgewogCQkqZ3ZhICZhbXA7PSAweGZmZmZmZmZmOwogCQlmYXVsdCA9IChzLnVudXNhYmxlKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggZTNiZmU2YWNhMWEwZS4uMzA4MjE5NTkwNmRhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC03ODg1LDYgJiM0Mzs3ODg1LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeV9pbmRleCh2Y3B1LCAweDcsIDEpOwogCWNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFNX1NVUCwgICAgZWF4LCBmZWF0dXJlX2JpdChMQU0pKTsKJiM0MzsJY3I0X2ZpeGVkMV91cGRhdGUoWDg2X0NSNF9MQVNTLCAgICAgICBlYXgsIGZlYXR1cmVfYml0KExBU1MpKTsKIAogI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlCiB9CkBAIC04NTcxLDcgJiM0Mzs4NTcyLDggQEAgZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MKIAlpbnQgbGFtX2JpdDsKIAl1bnNpZ25lZCBsb25nIGNyM19iaXRzOwogCi0JaWYgKGZsYWdzICZhbXA7IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfSU1QTElDSVQgfCBYODZFTVVMX0ZfSU5WTFBHKSkKJiM0MzsJaWYgKGZsYWdzICZhbXA7IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHwKJiM0MzsJCSAgICAgWDg2RU1VTF9GX0lOVkxQRykpCiAJCXJldHVybiBndmE7CiAKIAlpZiAoIWlzXzY0X2JpdF9tb2RlKHZjcHUpKQpAQCAtODYwMyw2ICYjNDM7ODYwNSw1MyBAQCBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncwogCXJldHVybiAoc2lnbl9leHRlbmQ2NChndmEsIGxhbV9iaXQpICZhbXA7IH5CSVRfVUxMKDYzKSkgfCAoZ3ZhICZhbXA7IEJJVF9VTEwoNjMpKTsKIH0KIAomIzQzO2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLAomIzQzOwkJCSAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBib29sIGlzX3N1cGVydmlzb3JfYWRkcmVzcyA9ICEhKGd2YSAmYW1wOyBCSVRfVUxMKDYzKSk7CiYjNDM7CWNvbnN0IGJvb2wgaW1wbGljaXRfc3VwZXJ2aXNvciA9ICEhKGZsYWdzICZhbXA7IFg4NkVNVUxfRl9JTVBMSUNJVCk7CiYjNDM7CWNvbnN0IGJvb2wgZmV0Y2ggPSAhIShmbGFncyAmYW1wOyBYODZFTVVMX0ZfRkVUQ0gpOwomIzQzOwomIzQzOwlpZiAoIWt2bV9pc19jcjRfYml0X3NldCh2Y3B1LCBYODZfQ1I0X0xBU1MpIHx8ICFpc19sb25nX21vZGUodmNwdSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElOVkxQRyBpc24mIzM5O3Qgc3ViamVjdCB0byBMQVNTLCBlLmcuIHRvIGFsbG93IGludmFsaWRhdGluZyB1c2Vyc3BhY2UKJiM0MzsJICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbiYjMzk7dCBzdWJqZWN0CiYjNDM7CSAqIHRvIExBU1MgaW4gb3JkZXIgdG8gc2ltcGxpZnkgZmFyIGNvbnRyb2wgdHJhbnNmZXJzICh0aGUgc3Vic2VxdWVudAomIzQzOwkgKiBmZXRjaCB3aWxsIGVuZm9yY2UgTEFTUyBhcyBhcHByb3ByaWF0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgKFg4NkVNVUxfRl9CUkFOQ0ggfCBYODZFTVVMX0ZfSU5WTFBHKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yICZhbXA7JmFtcDsgdm14X2dldF9jcGwodmNwdSkgPT0gMykKJiM0MzsJCXJldHVybiBpc19zdXBlcnZpc29yX2FkZHJlc3M7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIExBU1MgZW5mb3JjZW1lbnQgZm9yIHN1cGVydmlzb3ItbW9kZSBkYXRhIGFjY2Vzc2VzIGRlcGVuZHMgb24gU01BUAomIzQzOwkgKiBiZWluZyBlbmFibGVkLCBhbmQgbGlrZSBTTUFQIGlnbm9yZXMgZXhwbGljaXQgYWNjZXNzZXMgaWYgUkZMQUdTLkFDPTEuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWZldGNoKSB7CiYjNDM7CQlpZiAoIWt2bV9pc19jcjRfYml0X3NldCh2Y3B1LCBYODZfQ1I0X1NNQVApKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmICghaW1wbGljaXRfc3VwZXJ2aXNvciAmYW1wOyZhbXA7IChrdm1fZ2V0X3JmbGFncyh2Y3B1KSAmYW1wOyBYODZfRUZMQUdTX0FDKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGVudGlyZSBhY2Nlc3MgbXVzdCBiZSBpbiB0aGUgYXBwcm9wcmlhdGUgYWRkcmVzcyBzcGFjZS4gIE5vdGUsCiYjNDM7CSAqIGlmIExBTSBpcyBzdXBwb3J0ZWQsIEBndmEgaGFzIGFscmVhZHkgYmVlbiB1bnRhZ2dlZCwgc28gYmFycmluZyBhCiYjNDM7CSAqIG1hc3NpdmUgYXJjaGl0ZWN0dXJlIGNoYW5nZSB0byBleHBhbmQgdGhlIGNhbm9uaWNhbCBhZGRyZXNzIHJhbmdlLAomIzQzOwkgKiBpdCYjMzk7cyBpbXBvc3NpYmxlIGZvciBhIHVzZXIgYWNjZXNzIHRvIHN0cmFkZGxlIHVzZXIgYW5kIHN1cGVydmlzb3IKJiM0MzsJICogYWRkcmVzcyBzcGFjZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2l6ZSAmYW1wOyZhbXA7ICEoKGd2YSAmIzQzOyBzaXplIC0gMSkgJmFtcDsgQklUX1VMTCg2MykpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAhaXNfc3VwZXJ2aXNvcl9hZGRyZXNzOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm14X2hhbmRsZV9pbnRlbF9wdF9pbnRyKHZvaWQpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCmluZGV4IGRjODUxN2YxNWJjNDYuLjQzZGY3MjVhNzdmMGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaApAQCAtMzk3LDYgJiM0MzszOTcsOSBAQCB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7CiAKJiM0Mztib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsKIHZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBkOTRiNTkxNDBjNDUyLi5hNmVhNzM2ZmQ0OGZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC01ODAwLDYgJiM0Mzs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJCQkJICAgICAgIGFkZHIsIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm1feDg2X2NhbGwoaXNfbGFzc192aW9sYXRpb24pKGVtdWxfdG9fdmNwdShjdHh0KSwgYWRkciwgc2l6ZSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGVtdWxhdG9yX2lzX2Nhbm9uaWNhbF9hZGRyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJCSAgICAgICBndmFfdCBhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC01ODU5LDYgJiM0Mzs1ODY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7CiAJLmdldF94Y3IgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfeGNyLAogCS5zZXRfeGNyICAgICAgICAgICAgID0gZW11bGF0b3Jfc2V0X3hjciwKIAkuZ2V0X3VudGFnZ2VkX2FkZHIgICA9IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyLAomIzQzOwkuaXNfbGFzc192aW9sYXRpb24gICA9IGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uLAogCS5pc19jYW5vbmljYWxfYWRkciAgID0gZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIsCiAJLnBhZ2VfYWRkcmVzc192YWxpZCAgPSBlbXVsYXRvcl9wYWdlX2FkZHJlc3NfdmFsaWQsCiB9OwpAQCAtMTA3NDUsNyAmIzQzOzEwNzUyLDcgQEAgaW50IGt2bV9oYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgZ3ZhX3QgZ3ZhKQogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6CiAJCS8qCi0JCSAqIExBTSBkb2VzbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQgomIzQzOwkJICogTEFNIGFuZCBMQVNTIGRvbiYjMzk7dCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQgogCQkgKiBpbnZhbGlkYXRpb24uCiAJCSAqLwogCQlpZiAoKCFwY2lkX2VuYWJsZWQgJmFtcDsmYW1wOyAob3BlcmFuZC5wY2lkICE9IDApKSB8fApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggMDAxMjMxNjlhMTkwYS4uODZmYTkzZTBmNmMwOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC05MSw2ICYjNDM7OTEsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fY2xvY2tfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9idXNsb2NrX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9sYXNzX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L21vbml0b3JfbXdhaXRfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvbXNyc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAppbmRleCA2ZTZmNzAwMzU1MDhhLi5mNDI1MTY2MTc0ZjlmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCkBAIC03OSw2ICYjNDM7NzksNyBAQCBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3Rvcik7CiAjZGVmaW5lIFg4Nl9DUjRfU01FUAkJKDF1bCAmbHQ7Jmx0OyAyMCkKICNkZWZpbmUgWDg2X0NSNF9TTUFQCQkoMXVsICZsdDsmbHQ7IDIxKQogI2RlZmluZSBYODZfQ1I0X1BLRQkJKDF1bCAmbHQ7Jmx0OyAyMikKJiM0MzsjZGVmaW5lIFg4Nl9DUjRfTEFTUwkJKDF1bCAmbHQ7Jmx0OyAyNykKIAogc3RydWN0IHhzdGF0ZV9oZWFkZXIgewogCXU2NAkJCQl4c3RhdGVfYnY7CkBAIC0xOTUsNiAmIzQzOzE5Niw3IEBAIHN0cnVjdCBrdm1feDg2X2NwdV9mZWF0dXJlIHsKICNkZWZpbmUJWDg2X0ZFQVRVUkVfU1BFQ19DVFJMCQlLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyNikKICNkZWZpbmUJWDg2X0ZFQVRVUkVfQVJDSF9DQVBBQklMSVRJRVMJS1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVEWCwgMjkpCiAjZGVmaW5lCVg4Nl9GRUFUVVJFX1BLUwkJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHg3LCAwLCBFQ1gsIDMxKQomIzQzOyNkZWZpbmUJWDg2X0ZFQVRVUkVfTEFTUwkJS1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDEsIEVBWCwgNikKICNkZWZpbmUJWDg2X0ZFQVRVUkVfWFRJTEVDRkcJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE3KQogI2RlZmluZQlYODZfRkVBVFVSRV9YVElMRURBVEEJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE4KQogI2RlZmluZQlYODZfRkVBVFVSRV9YU0FWRVMJCUtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAxLCBFQVgsIDMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2xhc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43YzVjZmEyNGMyYmRkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSw1NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSB0ZXN0CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogT25seSB0ZXN0IHRoYXQgdGhlIGd1ZXN0IGNhbiYjMzk7dCBzZXQgQ1I0LkxBU1Mgd2hlbiBMQVNTIGlzbiYjMzk7dAomIzQzOyAqIGVudW1lcmF0ZWQgaW4gdGhlIGd1ZXN0JiMzOTtzIENQVUlELiAgS1ZNJiMzOTtzIGhhbmRsaW5nIG9mIENSNC5MQVNTIHZpYQomIzQzOyAqIEtWTV9TRVRfU1JFR1MgaXMgY292ZXJlZCBieSBzZXRfc3JlZ3NfdGVzdC4KJiM0MzsgKgomIzQzOyAqIFRlc3RpbmcgTEFTUyBlbmZvcmNlbWVudCByZXF1aXJlcyBydW5uaW5nIHN1cGVydmlzb3IgY29kZSBpbiB0aGUKJiM0MzsgKiB1cHBlciBoYWxmIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCB3aGljaCB0aGUgS1ZNIHNlbGZ0ZXN0cyBmcmFtZXdvcmsKJiM0MzsgKiBkb2VzbiYjMzk7dCBzdXBwb3J0LiBFbmFibGluZyBDUjQuTEFTUyBpbiB0aGUgY3VycmVudCBmcmFtZXdvcmsgd291bGQKJiM0MzsgKiBtYWtlIHRoZSBuZXh0IGluc3RydWN0aW9uIGZldGNoIGEgdmlvbGF0aW9uIGFuZCB0cmlwbGUtZmF1bHQgdGhlCiYjNDM7ICogZ3Vlc3QuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdpdGhvdXQgTEFTUyBpbiBDUFVJRCwgYSBndWVzdCB3cml0ZSBtdXN0IGdlbmVyYXRlICNHUCB3aXRob3V0CiYjNDM7ICogY2hhbmdpbmcgQ1I0LiBSZXNlcnZlZCBiaXRzIGFyZSBvd25lZCBieSBLVk0gc28gdGhlIHdyaXRlIGlzCiYjNDM7ICogZ3VhcmFudGVlZCB0byBleGl0IHRvIEtWTS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpCiYjNDM7ewomIzQzOwl1OCB2ZWN0b3I7CiYjNDM7CiYjNDM7CUdVRVNUX0FTU0VSVCghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTsKJiM0MzsKJiM0MzsJdmVjdG9yID0ga3ZtX2FzbV9zYWZlKCYjMzQ7bW92ICVbY3I0XSwgJSVjcjQmIzM0OywKJiM0MzsJCQkgICAgICBbY3I0XSAmIzM0O3ImIzM0OyhnZXRfY3I0KCkgfCBYODZfQ1I0X0xBU1MpKTsKJiM0MzsJX19HVUVTVF9BU1NFUlQodmVjdG9yID09IEdQX1ZFQ1RPUiwKJiM0MzsJCSAgICAgICAmIzM0O1dhbnRlZCAjR1Agb24gQ1I0LkxBU1MsIGdvdCAlcyYjMzQ7LCBleF9zdHIodmVjdG9yKSk7CiYjNDM7CUdVRVNUX0FTU0VSVCghKGdldF9jcjQoKSAmYW1wOyBYODZfQ1I0X0xBU1MpKTsKJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X2NvZGUpOwomIzQzOwl2Y3B1X2NsZWFyX2NwdWlkX2ZlYXR1cmUodmNwdSwgWDg2X0ZFQVRVUkVfTEFTUyk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwomIzQzOwlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYwppbmRleCA2MDMyMjZmZmU0Mzc0Li44YjM3NWZlYTg0ZDAzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBzdGF0aWMgdTY0IGNhbGNfc3VwcG9ydGVkX2NyNF9mZWF0dXJlX2JpdHModm9pZCkKIAkJY3I0IHw9IFg4Nl9DUjRfU01BUDsKIAlpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEtVKSkKIAkJY3I0IHw9IFg4Nl9DUjRfUEtFOwomIzQzOwlpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpCiYjNDM7CQljcjQgfD0gWDg2X0NSNF9MQVNTOwogCiAJcmV0dXJuIGNyNDsKIH0KQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNCkKIAlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9TTUVQKTsKIAlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9TTUFQKTsKIAlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9QS0UpOwomIzQzOwlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9MQVNTKTsKIAogCWZvciAoaSA9IDMyOyBpICZsdDsgNjQ7IGkmIzQzOyYjNDM7KQogCQlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgQklUKGkpKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZQppbmRleCA0MzQwNjUyMTVkMTI3Li4yNTJkNzU3ZmMxYjJkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlCkBAIC0xOSw3ICYjNDM7MTksOCBAQCBUQVJHRVRTX0NfMzJCSVRfT05MWSA6PSBlbnRyeV9mcm9tX3ZtODYgdGVzdF9zeXNjYWxsX3Zkc28gdW53aW5kX3Zkc28gXAogCQkJdGVzdF9GQ01PViB0ZXN0X0ZDT01JIHRlc3RfRklTVFRQIFwKIAkJCXZkc29fcmVzdG9yZXIKIFRBUkdFVFNfQ182NEJJVF9PTkxZIDo9IGZzZ3NiYXNlIHN5c3JldF9yaXAgc3lzY2FsbF9udW1iZXJpbmcgXAotCQkJY29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweAomIzQzOwkJCWNvcnJ1cHRfeHN0YXRlX2hlYWRlciBhbXggbGFtIHRlc3Rfc2hhZG93X3N0YWNrIGF2eCBhcHggXAomIzQzOwkJCWxhc3MKICMgU29tZSBzZWxmdGVzdHMgcmVxdWlyZSAzMmJpdCBzdXBwb3J0IGVuYWJsZWQgYWxzbyBvbiA2NGJpdCBzeXN0ZW1zCiBUQVJHRVRTX0NfMzJCSVRfTkVFREVEIDo9IGxkdF9nZHQgcHRyYWNlX3N5c2NhbGwKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RkM2RjOGU0MWQxZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMKQEAgLTAsMCAmIzQzOzEsMTk2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIGxhc3MuYyAtIFRlc3QgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgZW5mb3JjZW1lbnQKJiM0MzsgKgomIzQzOyAqIFdpdGggTEFTUyBlbmFibGVkLCBhIHVzZXItbW9kZSByZWFkLCB3cml0ZSBvciBpbnN0cnVjdGlvbiBmZXRjaCBhdCBhCiYjNDM7ICoga2VybmVsIGFkZHJlc3MgcmFpc2VzIGEgI0dQIGluc3RlYWQgb2YgdGhlICNQRiB0aGF0IFNNQVAvU01FUCB3b3VsZAomIzQzOyAqIHByb2R1Y2UuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtzZXRqbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91Y29udGV4dC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGVscGVycy5oJiMzNDsKJiM0MzsKJiM0MzsjaWZuZGVmIF9feDg2XzY0X18KJiM0MzsjIGVycm9yIFRoaXMgdGVzdCBpcyA2NC1iaXQgb25seQomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qCiYjNDM7ICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsCiYjNDM7ICogYWRkcmVzcyByYWlzZXMgdGhlIHZlcnkgc2FtZSAjR1AgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiwgc28gdGhlCiYjNDM7ICogYWRkcmVzcyBoYXMgdG8gYmUgY2Fub25pY2FsIHRvIGF0dHJpYnV0ZSB0aGUgZmF1bHQgdG8gTEFTUy4KJiM0MzsgKgomIzQzOyAqIEJpdHMgNjM6NDcgYXJlIGFsbCBzZXQgaGVyZSwgd2hpY2ggaXMgY2Fub25pY2FsIHdpdGggNC1sZXZlbCBwYWdpbmcKJiM0MzsgKiBhcyB3ZWxsIGFzIDUtbGV2ZWwgcGFnaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS0VSTkVMX0FERFIJMHhmZmZmODAwMDAwMDAwMDAwVUwKJiM0MzsKJiM0MztzdGF0aWMgc2lnam1wX2J1ZiBqbXBidWY7CiYjNDM7CiYjNDM7c3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIsIGZhdWx0X3JpcDsKJiM0MzsKJiM0MzsvKiBIYW5kbGUgU0lHU0VHViAoI0dQIGFuZCAjUEYpIGFzIHdlbGwgYXMgU0lHQlVTICgjU1MpICovCiYjNDM7c3RhdGljIHZvaWQgZmF1bHRfaGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QgKmluZm8sIHZvaWQgKmN0eF92b2lkKQomIzQzO3sKJiM0MzsJdWNvbnRleHRfdCAqY3R4ID0gKHVjb250ZXh0X3QgKiljdHhfdm9pZDsKJiM0MzsKJiM0MzsJZmF1bHRfdHJhcG5vID0gY3R4LSZndDt1Y19tY29udGV4dC5ncmVnc1tSRUdfVFJBUE5PXTsKJiM0MzsJZmF1bHRfZXJyID0gY3R4LSZndDt1Y19tY29udGV4dC5ncmVnc1tSRUdfRVJSXTsKJiM0MzsJZmF1bHRfcmlwID0gY3R4LSZndDt1Y19tY29udGV4dC5ncmVnc1tSRUdfUklQXTsKJiM0MzsJc2lnbG9uZ2ptcChqbXBidWYsIDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgZGVsaW1zW10gPSAmIzM0OyBcbiYjMzQ7OwomIzQzOwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CWNoYXIgbGluZVs0MDk2XTsKJiM0MzsJRklMRSAqY3B1aW5mbzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25seSB0aGUgY3B1aW5mbyBmbGFnIHJlZmxlY3RzIHdoZXRoZXIgdGhlIGtlcm5lbCBhY3R1YWxseQomIzQzOwkgKiBlbmFibGVkIExBU1MuCiYjNDM7CSAqLwomIzQzOwljcHVpbmZvID0gZm9wZW4oJiMzNDsvcHJvYy9jcHVpbmZvJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFjcHVpbmZvKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7ZmFpbGVkIHRvIG9wZW4gL3Byb2MvY3B1aW5mb1xuJiMzNDspOwomIzQzOwomIzQzOwl3aGlsZSAoIWZvdW5kICZhbXA7JmFtcDsgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBjcHVpbmZvKSkgewomIzQzOwkJY2hhciAqZmxhZzsKJiM0MzsKJiM0MzsJCWlmIChzdHJuY21wKGxpbmUsICYjMzQ7ZmxhZ3MmIzM0OywgNSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBNYXRjaCB3aG9sZSB3b3JkcyBvbmx5LCBub3QgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBmbGFnLiAqLwomIzQzOwkJZm9yIChmbGFnID0gc3RydG9rKGxpbmUsIGRlbGltcyk7IGZsYWc7IGZsYWcgPSBzdHJ0b2soTlVMTCwgZGVsaW1zKSkgewomIzQzOwkJCWlmICghc3RyY21wKGZsYWcsICYjMzQ7bGFzcyYjMzQ7KSkgewomIzQzOwkJCQlmb3VuZCA9IHRydWU7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlmY2xvc2UoY3B1aW5mbyk7CiYjNDM7CiYjNDM7CWlmIChmb3VuZCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBDaGVjayBDUFVJRC4oRUFYPTA3SCxFQ1g9MSk6RUFYLkxBU1NbYml0IDZdICovCiYjNDM7CV9fY3B1aWRfY291bnQoMHg3LCAweDEsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CiYjNDM7CWlmIChlYXggJmFtcDsgKDEgJmx0OyZsdDsgNikpCiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0xBU1MgaXMgc3VwcG9ydGVkIGJ5IHRoZSBDUFUgYnV0IG5vdCBlbmFibGVkIGJ5IHRoZSBrZXJuZWxcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHZW5lcmFsIFByb3RlY3Rpb24gRmF1bHQgKHRyYXBuci5oIGlzIG5vdCBleHBvcnRlZCB0byB1YXBpKSAqLwomIzQzOyNkZWZpbmUgWDg2X1RSQVBfR1AJMTMKJiM0MzsKJiM0MzsvKiBBIExBU1MgdmlvbGF0aW9uIHJhaXNlcyBhICNHUCB3aXRoIGEgbnVsbCBlcnJvciBjb2RlLiAqLwomIzQzO3N0YXRpYyBib29sIGlzX2xhc3NfdmlvbGF0aW9uKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmF1bHRfdHJhcG5vID09IFg4Nl9UUkFQX0dQICZhbXA7JmFtcDsgIWZhdWx0X2VycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfcmVhZCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHsKJiM0MzsJCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUtFUk5FTF9BRERSOwomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7dGhlIHJlYWQgZGlkIG5vdCBmYXVsdFxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSwKJiM0MzsJCQkgJiMzNDt0aGUgcmVhZCBmYXVsdGVkIHdpdGggdHJhcD0lbGQsIGVycm9yPTB4JWx4XG4mIzM0OywKJiM0MzsJCQkgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF93cml0ZSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHsKJiM0MzsJCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUtFUk5FTF9BRERSID0gMHgxYTU1OwomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7dGhlIHdyaXRlIGRpZCBub3QgZmF1bHRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksCiYjNDM7CQkJICYjMzQ7dGhlIHdyaXRlIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcbiYjMzQ7LAomIzQzOwkJCSBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVXNlIGlubGluZSBhc20gcmF0aGVyIHRoYW4gYSBjYWxsIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyOiBhIGRpcmVjdAomIzQzOyAqICYjMzk7Y2FsbCByZWwzMiYjMzk7IGNhbm5vdCByZWFjaCBhIGtlcm5lbCBhZGRyZXNzLCBhbmQgbGV0dGluZyB0aGUgY29tcGlsZXIgbG93ZXIKJiM0MzsgKiB0aGUgaW5kaXJlY3QgYnJhbmNoIHJpc2tzIHJvdXRpbmcgaXQgdGhyb3VnaCBhIHRodW5rLCBvciBlbGlkaW5nIGl0CiYjNDM7ICogYWx0b2dldGhlciwgZWl0aGVyIG9mIHdoaWNoIHdvdWxkIHN0b3AgdGVzdGluZyB0aGUgZmV0Y2guCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZG9fZmV0Y2godW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0O2NhbGwgKiVbZm5dJiMzNDsKJiM0MzsJCSAgICAgIDogOiBbZm5dICYjMzQ7ciYjMzQ7IChhZGRyKQomIzQzOwkJICAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmF4JiMzNDssICYjMzQ7cmN4JiMzNDssICYjMzQ7cmR4JiMzNDssICYjMzQ7cnNpJiMzNDssICYjMzQ7cmRpJiMzNDssCiYjNDM7CQkJJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssICYjMzQ7cjExJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF9mZXRjaCh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHsKJiM0MzsJCWRvX2ZldGNoKEtFUk5FTF9BRERSKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFeGVjdXRpb24gcmVzdW1lZCBhdCBhbiB1bmtub3duIHBvaW50IHdpdGggYW4gdW5kZWZpbmVkCiYjNDM7CQkgKiByZWdpc3RlciBzdGF0ZSwgc28gZG9uJiMzOTt0IHRyeSB0byBydW4gdGhlIHJlc3Qgb2YgdGhlIHRlc3RzLgomIzQzOwkJICovCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDt0aGUgZmV0Y2ggcmV0dXJuZWQgd2l0aG91dCBmYXVsdGluZ1xuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJyYW5jaCBpbnN0cnVjdGlvbnMgZG8gbm90IGNoZWNrIHRoZWlyIHRhcmdldCBhZ2FpbnN0IExBU1MuIFRoZQomIzQzOwkgKiB2aW9sYXRpb24gaGFwcGVucyB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBpcyB1c2VkIHRvIGZldGNoIHRoZQomIzQzOwkgKiBuZXh0IGluc3RydWN0aW9uLCBzbyB0aGUgZmF1bHQgbXVzdCBiZSByZXBvcnRlZCBhdCB0aGUgdGFyZ2V0CiYjNDM7CSAqIHJhdGhlciB0aGFuIGF0IHRoZSBicmFuY2guCiYjNDM7CSAqLwomIzQzOwlpZiAoZmF1bHRfcmlwICE9IEtFUk5FTF9BRERSKSB7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDt0aGUgZmV0Y2ggZmF1bHRlZCBhdCBSSVAgMHglbHggaW5zdGVhZCBvZiAweCVseFxuJiMzNDssCiYjNDM7CQkJCSAgICAgIGZhdWx0X3JpcCwgKHVuc2lnbmVkIGxvbmcpS0VSTkVMX0FERFIpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSwKJiM0MzsJCQkgJiMzNDt0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxuJiMzNDssCiYjNDM7CQkJIGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBUT1RBTF9URVNUUyAzCiYjNDM7CiYjNDM7aW50IG1haW4odm9pZCkKJiM0Mzt7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CiYjNDM7CWlmICghaXNfbGFzc19hY3RpdmUoKSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TEFTUyBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlrc2Z0X3NldF9wbGFuKFRPVEFMX1RFU1RTKTsKJiM0MzsKJiM0MzsJc2V0aGFuZGxlcihTSUdTRUdWLCBmYXVsdF9oYW5kbGVyLCAwKTsKJiM0MzsJLyogT25seSB0byByZXBvcnQgYSAjU1M7IExBU1Mgc2hvdWxkbiYjMzk7dCBjYXVzZSBvbmUgaGVyZS4gKi8KJiM0MzsJc2V0aGFuZGxlcihTSUdCVVMsIGZhdWx0X2hhbmRsZXIsIDApOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O0FjY2Vzc2luZyB0aGUga2VybmVsIGFkZHJlc3MgMHglbHggZnJvbSB1c2Vyc3BhY2VcbiYjMzQ7LAomIzQzOwkJICAgICAgICh1bnNpZ25lZCBsb25nKUtFUk5FTF9BRERSKTsKJiM0MzsJdGVzdF9rZXJuZWxfcmVhZCgpOwomIzQzOwl0ZXN0X2tlcm5lbF93cml0ZSgpOwomIzQzOwl0ZXN0X2tlcm5lbF9mZXRjaCgpOwomIzQzOwomIzQzOwljbGVhcmhhbmRsZXIoU0lHQlVTKTsKJiM0MzsJY2xlYXJoYW5kbGVyKFNJR1NFR1YpOwomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMQVNTIFN1cHBvcnQgaW4gS1ZNOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGJyaW5naW5nIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIHN1cHBvcnQgaW50byBLVk0gb24geDg2LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IEtWTSBoYW5kbGVzIGFkZHJlc3Mgc3BhY2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIHNwcmF3bGluZyBhY3Jvc3MgYSBwcmV0dHkgZXh0ZW5zaXZlIHJhbmdlIG9mIGZpbGVzLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gbG9naWMuIFdlJiMzOTtyZSB0YWxraW5nIGhlYWRlciBmaWxlcywgdGhlIENQVUlEIGhhbmRsaW5nLCB0aGUgZW11bGF0b3IsIHJlZ2lzdGVyIGhhbmRsaW5nLCBhbmQgVk1YLXNwZWNpZmljIGNvZGUg4oCTIGV2ZW4gdGhlIHNlbGZ0ZXN0cyBhcmUgaW52b2x2ZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgYWRkZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExBU1MgZmVhdHVyZSBpcyBiZWluZyBpbnRyb2R1Y2VkIGFuZCB3aGF0IHRoZSBlbXVsYXRvciBkb2VzIHdoZW4gdGhlcmUmIzM5O3MgYW4gTEFTUyB2aW9sYXRpb24uIEl0IGxvb2tzIGxpa2UgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYCBpcyBhZGRpbmcgdGhlIGBYODZfNjRfRihMQVNTKWAgQ1BVIGZlYXR1cmUgZmxhZywgd2hpY2ggaXMgdGhlIGJhc2VsaW5lLiAKCkkmIzM5O20gemVyb2luZyBpbiBvbiBmdW5jdGlvbnMgbGlrZSBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYCwgYF9fa3ZtX2lzX3ZhbGlkX2NyNGAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGhhbmRsZV9pbnZ2cGlkYCwgYHNneF9nZXRfZW5jbHNfZ3ZhYCwgYG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlYCwgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAsIGFuZCB0aGUgbmV3IGZ1bmN0aW9ucyBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBhbmQgYGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uYCBhcyB0aGUga2V5IGFyZWFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBhbmQgYWxzbyB3aGF0IGBrdm1faGFuZGxlX2ludnBjaWRgIGRvZXMgaGVyZS4KClRoZSBrZXkgcXVlc3Rpb25zIGhlcmUgYXJlOgoKMS4gIEhvdyBpcyB0aGUgTEFTUyBmZWF0dXJlIGV4cG9zZWQgdG8gdGhlIGd1ZXN0PwoyLiAgSG93IGFyZSBMQVNTIHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYW5kIGhhbmRsZWQ/CjMuICBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZW11bGF0b3IgYW5kIHRoZSBWTVggY29kZSBpbiBkZWFsaW5nIHdpdGggTEFTUyBpc3N1ZXM/CjQuICBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIFNHWD8KCkl0IGxvb2tzIGxpa2UgdGhlIGBjdHh0LSZndDtvcHMtJmd0O2lzX2xhc3NfdmlvbGF0aW9uYCBmbGFnIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgZW11bGF0aW9uIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgc3RydWN0dXJlLCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhlIGJ1aWxkIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcy4gVGhlIGZpbGUgbG9jYXRpb25zIGluZGljYXRlIHRoYXQgYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgbmVlZGVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHRoZSBvbmx5IGNyaXRpY2FsIGRlcGVuZGVuY3ksIG9yIGlmIG1vcmUgZ3JhbnVsYXIgS1ZNIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHNob3VsZCBjb25maXJtIHRoYXQsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZ2V0IGFsbCB0aGUgcGllY2VzIGZvciBpdCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLCBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AsIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9zZ3guY2AuIEdpdmVuIHRoYXQgdGhlc2UgZmlsZXMgbGl2ZSB3aXRoaW4gdGhlIGB2bXhgIGRpcmVjdG9yeSwgdGhhdCBzY3JlYW1zIEludGVsIFZNWCBtb2RpZmljYXRpb25zLCByaWdodD8gVGhlcmVmb3JlLCBgS1ZNX0lOVEVMYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBBbmQgc2luY2UgYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgIGlzIGluY2x1ZGVkLCBJJiMzOTtkIHdhZ2VyIGBYODZfU0dYX0tWTWAgd2lsbCBiZSBuZWVkZWQgdG9vLiBCdXQgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGJ5IGV4YW1pbmluZyBgYXJjaC94ODYva3ZtL3ZteC9zZ3guY2AgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWDg2X1NHWF9LVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk0vVk1YL1NHWCBJbnRlZ3JhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIEtWTS9WTVgvU0dYIGludGVncmF0aW9uIHNwZWNpZmljYWxseS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBwcmFjdGljYWwgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGZpbGVzIGFyZSBidWlsdCBhbmQgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGFyY2gveDg2L2t2bS92bXhgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyBgc2d4LmNgIGlzIGhhbmRsZWQgaW4gdGhhdCBtYWtlIGZpbGUuIEtub3dpbmcgaG93IHRoZSBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIHRoYXQgZmlsZSBpcyBsaWtlbHkgdG8gcmV2ZWFsIGEgbG90IGFib3V0IGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZNWCBjb21wb25lbnRzIGFuZCB0aGUgb3ZlcmFsbCBrZXJuZWwgYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NneFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlPTE3PWt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTE5LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIwOmt2bS1pbnRlbC0kKENPTkZJR19YODZfU0dYX0tWTSlcdCYjNDM7PSB2bXgvc2d4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMS1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLgoKKipEaXZpbmcgaW50byB0aGUgWDg2X1NHWF9LVk0gQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIHRvIGNvbXBpbGUgYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgLCBJIGRlZmluaXRlbHkgbmVlZCB0aGUgYFg4Nl9TR1hfS1ZNYCBkZWZpbmUuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIHdoZXJlIGVsc2UgbWlnaHQgdGhpcyBjb21lIGludG8gcGxheT8gV2hlcmUgaXMgaXQgdXNlZCBvciByZWxhdGVkPyBMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoYXQgZmlsZSBvZnRlbiBoYW5kbGVzIHRoZSBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHNvIGl0IG1pZ2h0IGdpdmUgbWUgc29tZSBjbHVlcyBhcyB0byB0aGUgY29udGV4dCBhbmQgZmxvdyBhcm91bmQgdGhlc2UgU0dYIGludGVyYWN0aW9ucy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgcmVsYXRlZCBlbXVsYXRpb24gbG9naWMsIG9yIHBlcmhhcHMgY2hlY2tzIHRoYXQgYXJlIGdvdmVybmVkIGJ5IHRoYXQgZGVmaW5lLiBJdCYjMzk7cyBhIHNlbnNpYmxlIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT02PWluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS03LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjg6a3ZtLXlcdFx0XHQmIzQzOz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtOS1cdFx0XHQgICBtdHJyLm8gZGVidWdmcy5vIG1tdS9tbXUubyBtbXUvcGFnZV90cmFjay5vIG1tdS9zcHRlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBDb3JlIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEtWTSBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgYXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmxhZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCYjMzk7cyBzZWUsIHdoaWNoIG9uZXMgc3RhbmQgb3V0IGFzIGNydWNpYWw/IEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBsaXN0OgoKKiAgIGBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwc2Ag4oCTIFRoaXMgc291bmRzIGNyaXRpY2FsIGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudC4KKiAgIFRoZW4gYSBidW5jaCBvZiAqc3RhdGljKiBmdW5jdGlvbnMsIHRob3NlIHRoYXQgc2VlbSBpbnRlcm5hbGx5LXNjb3BlZCwgbGlrZTogYF9fbGluZWFyaXplYCwgYGFzc2lnbl9laXBgLCBgbGluZWFyX3JlYWRfc3lzdGVtYCwgYGxpbmVhcl93cml0ZV9zeXN0ZW1gLCBgZW11bGF0b3JfaW9fcG9ydF9hY2Nlc3NfYWxsb3dlZGAsIGBfX2t2bV9pc192YWxpZF9jcjRgLCBgaGFuZGxlX2ludnZwaWRgLCBgc2d4X2dldF9lbmNsc19ndmFgLCBgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGVgIGFuZCBgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25gLgoqICAgQW5kIHRoZW4gc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvbmVzIHRvbywgbGlrZSBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCwgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBrdm1faGFuZGxlX2ludnBjaWRgCgpOb3csIGxldCYjMzk7cyBmaWx0ZXIgb3V0IGFsbCB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCBsZWF2ZXMgbWUgd2l0aCB0aGUgZm9sbG93aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGNhbGxlZCBmcm9tIGVsc2V3aGVyZToKCiogICBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgCiogICBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AKKiAgIGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgCiogICBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYAoqICAgYGt2bV9oYW5kbGVfaW52cGNpZGAKCk9rYXksIEkgdGhpbmsgYGdldF92bXhfbWVtX2FkZHJlc3NgIGlzIHdvcnRoIGZvY3VzaW5nIG9uLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgaXQgaW4gdGhlIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MjIzPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfdHJpcGxlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyMzQtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUyMzU6aW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTIzNi1cdFx0XHR1MzIgdm14X2luc3RydWN0aW9uX2luZm8sIGJvb2wgd3IsIGludCBsZW4sIGd2YV90ICpyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MzYxPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTM2ODpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MzY5LVx0XHRcdFx0dm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3MjUtXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU3MjY6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNy1cdFx0XHRcdFx0aW5zdHJfaW5mbywgdHJ1ZSwgbGVuLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTc2Mj1zdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3OTktXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4MDA6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTgwMS1cdFx0XHRcdFx0aW5zdHJfaW5mbywgZmFsc2UsIGxlbiwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NTM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY3LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTY4Olx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY5LVx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5ODE9c3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwMTUtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjAxNjpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE3LVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjA2MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwOTgtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjA5OTpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTAwLVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU2MQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiB0aGUgVk1YIE1lbW9yeSBBZGRyZXNzKioKCk9rYXksIHNvIGBnZXRfdm14X21lbV9hZGRyZXNzYCBzZWVtcyBsaWtlIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS4gVGhhdCYjMzk7cyBhIHNvbGlkIGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIE5vdywgd2hlcmUgZG9lcyBpdCBmaXQgd2l0aGluIHRoZSBicm9hZGVyIFZNWCBjb250ZXh0PyBSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBmdW5jdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSYjMzk7cyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHBvdGVudGlhbCBtZW1vcnkgYWRkcmVzcyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9pc19sYXNzX3Zpb2xhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTcwPWd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwNy1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODYwODpib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwOS1cdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk5MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgS1ZNIEludnBjaWQgSXNzdWVzKioKCk9rYXksIHNvIGB2bXhfaXNfbGFzc192aW9sYXRpb25gIGlzIG9uIG15IHJhZGFyIGFzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiDigJMgdGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE5vdywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRpdmUgaW50byBga3ZtX2hhbmRsZV9pbnZwY2lkYCBiZWNhdXNlIGl0JiMzOTtzIHRoZSB1c3VhbCBzdXNwZWN0IGludm9sdmVkIGluIG1hbmFnaW5nIHRoZSBJbnZhbGlkYXRlIFByb2Nlc3MtQ29udGV4dCBJZGVudGlmaWVyIChJTlZQQ0lEKSBpbnN0cnVjdGlvbiB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIHN1YnRsZSwgZXhwbG9pdGFibGUgZmxhdy4gV2UgbmVlZCB0byBjaGVjayBldmVyeXRoaW5nOiB0aGUgaGFuZGxpbmcgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWTVggY29kZSwgYW55IHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyBpbnZhbGlkIG9yIG1hbGljaW91cyBpbnB1dCBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX2ludnBjaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTEwNzI2PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faGFuZGxlX21lbW9yeV9mYWlsdXJlKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyNy1cbmFyY2gveDg2L2t2bS94ODYuYzoxMDcyODppbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3Mjkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDgwNC19XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA4MDU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfaW52cGNpZCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTA3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk0mIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gS1ZNLiBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nIGBrdm1faGFuZGxlX2ludnBjaWRgLCBhbmQgSSB0aGluayB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHRvIGV4cGxvcmUgZnVydGhlci4gSXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgVExCIGludmFsaWRhdGlvbiwgYW5kLCBieSBleHRlbnNpb24sIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHNlZSB3aGF0IGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgIGlzIGFsbCBhYm91dC4gVW5kZXJzdGFuZGluZyBob3cgYWRkcmVzc2VzIGFyZSBoYW5kbGVkLCBhbmQgcGFydGljdWxhcmx5IHRoZSB1bnRhZ2dlZCBvbmVzLCBpcyBsaWtlbHkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZWVwZXIgd29ya2luZ3Mgb2YgdGhlIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ3kuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9nZXRfdW50YWdnZWRfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTU2PXZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU2OS0gKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODU3MDpndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncylcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlRoaW5raW5nIFRocm91Z2ggS1ZNIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IEtWTSBpbml0aWFsaXphdGlvbiwgYW5kIGEga2V5IGFyZWEgaXMgaG93IHdlIGhhbmRsZSBtZW1vcnkgYWRkcmVzc2VzLiBJJiMzOTt2ZSBiZWVuIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25zIGludm9sdmVkLiBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNhbmRpZGF0ZSBpbiB0aGlzIGFyZWE7IGl0JiMzOTtzIGdvdCBhIHNvbGlkIHJlcHV0YXRpb24uIE5vdywgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjYXBhYmlsaXRpZXMgd2UmIzM5O3JlIHNldHRpbmcgdXAgZm9yIHRoZSB2aXJ0dWFsIENQVXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgdGllcyBpbnRvIGNyaXRpY2FsIGFzcGVjdHMgb2YgZ3Vlc3QtaG9zdCBpbnRlcmFjdGlvbnMgYW5kIHBlcmZvcm1hbmNlLiBOZWVkIHRvIGVuc3VyZSB3ZSYjMzk7cmUgZ2V0dGluZyB0aG9zZSBDUFUgY2FwYWJpbGl0aWVzIHNldCBjb3JyZWN0bHkgZnJvbSB0aGUgZ2V0IGdvISBJJiMzOTtsbCBkaXZlIGludG8gYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYCBhbmQgc2VlIHdoYXQgaXQgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2luaXRpYWxpemVfY3B1X2NhcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vY3B1aWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vY3B1aWQuYz03MzM9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtODM1LVxuYXJjaC94ODYva3ZtL2NwdWlkLmM6ODM2OnZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTgzNy17XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTMxMy19XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxMzE0OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwcyk7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xMzE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBGdXp6aW5nIFRhcmdldHMqKgoKUmlnaHQsIHNvIGBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwc2AgaXMgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIHBoYXNlLiBUaGF0IG1lYW5zIGl04oCZcyBwcmV0dHkgbXVjaCBhIG9uZS1zaG90IGRlYWwuIERvZXNuJiMzOTt0IHNlZW0gbGlrZSB0aGUgYmVzdCBwbGFjZSB0byBzaW5rIHJlc291cmNlcyBpbnRvIGZ1enppbmcuIEEgc2luZ2xlIGNhbGwgZHVyaW5nIGluaXRpYWxpemF0aW9uIHVzdWFsbHkgaXNuJiMzOTt0IGZydWl0ZnVsIGZvciB0aGUgdHlwZSBvZiBpdGVyYXRpdmUgdGVzdGluZyBJJiMzOTttIGFmdGVyLCB3aGVyZSBJIGNhbiByZXBlYXRlZGx5IGhhbW1lciB0aGUgZnVuY3Rpb24gd2l0aCBkaWZmZXJlbnQgaW5wdXRzIGFuZCBzZWUgaG93IGl0IHJlc3BvbmRzLgoKSW5zdGVhZCwgbGV0JiMzOTtzIHBpdm90IGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWV0aGluZyBlbHNlLiBOb3csIHdoZXJlIHRvIGxvb2s/IEFscmlnaHQsIEkmIzM5O3ZlIGdvdCBpdC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBzb3VuZHMgYSBiaXQgbW9yZSBwcm9taXNpbmcgZm9yIGEgcG90ZW50aWFsIGZ1enppbmcgY2FtcGFpZ24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uJiMzOTtzIGRvaW5nIGFuZCBpZiBpdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IGNoYXJhY3RlcmlzdGljcyB0byBiZW5lZml0IGZyb20gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTU3OTM9c3RhdGljIGd2YV90IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODAyLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4MDM6c3RhdGljIGJvb2wgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTgwNC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODY3LVx0LmdldF91bnRhZ2dlZF9hZGRyICAgPSBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcixcbmFyY2gveDg2L2t2bS94ODYuYzo1ODY4Olx0LmlzX2xhc3NfdmlvbGF0aW9uICAgPSBlbXVsYXRvcl9pc19sYXNzX3Zpb2xhdGlvbixcbmFyY2gveDg2L2t2bS94ODYuYy01ODY5LVx0LmlzX2Nhbm9uaWNhbF9hZGRyICAgPSBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBTdGF0aWMgTGFuZHNjYXBlKioKCk9rYXksIHRoaXMgZmVlbHMgc3RhdGljLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2bXhfaXNfbGFzc192aW9sYXRpb25gLCBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AsIGBrdm1faGFuZGxlX2ludnBjaWRgLCBhbmQgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAuIFRoZXkgYXJlIHRoZSBsaWtlbHkgY3VscHJpdHMuCgpCZWZvcmUgSSBkaWcgaW50byB0aG9zZSBkZWVwbHksIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhlIGJyb2FkZXIgY29udGV4dC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIHNlZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgWDg2X1NHWF9LVk1gIGZsYWdnZWQuIEludGVyZXN0aW5nLiBCZXlvbmQgdGhvc2UsIGFyZSB0aGVyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcz8gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoZSBgWDg2X1NHWF9LVk1gIGRlcGVuZGVuY2llcyBpbW1lZGlhdGVseS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWDg2X1NHWF9LVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ1MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYFg4Nl9TR1hfS1ZNYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgYFg4Nl9TR1hfS1ZNYCBjb25jZXB0LiBNeSB1bmRlcnN0YW5kaW5nLCBiYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgdGVsbHMgbWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIGZhc2NpbmF0aW5nIGludGVyc2VjdGlvbi4gSSBpbW1lZGlhdGVseSBzdGFydCBwaWN0dXJpbmcgdGhlIGNvbXBsZXhpdGllcyBvZiBTZWN1cmUgZW5jbGF2ZXMgKFNHWCkgcnVubmluZyB3aXRoaW4gYSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGVudmlyb25tZW50LCBvbiBhbiB4ODYgYXJjaGl0ZWN0dXJlLiBUaGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBpbW1lbnNlLCBhbmQgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgYXJlIGVxdWFsbHkgaW50ZXJlc3RpbmcuIEkgaW1hZ2luZSB0aGVyZSYjMzk7cyBhIGRlbGljYXRlIGRhbmNlIGhhcHBlbmluZyBiZXR3ZWVuIGhhcmR3YXJlLWxldmVsIHNlY3VyaXR5IGZlYXR1cmVzIGFuZCB0aGUgdmlydHVhbGl6YXRpb24gbGF5ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZW5jbGF2ZXMgYXJlIGlzb2xhdGVkLCBob3cgdGhleSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBWTSwgYW5kIHdoYXQgdGhlIGF0dGFjayBzdXJmYWNlIGxvb2tzIGxpa2UgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXN0ZWQgdmlydHVhbGl6YXRpb24/IE9yIGEgbW9yZSBpbnRlZ3JhdGVkIGFwcHJvYWNoPyBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3MgdGhleSYjMzk7cmUgbGlrZWx5IGZvY3VzaW5nIG9uPyBMYXRlbmN5LCB0aHJvdWdocHV0LCBlbmNsYXZlIHN3aXRjaGluZyBvdmVyaGVhZC4uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZGVlcCBkaXZlLiBJJiMzOTttIGV4Y2l0ZWQgdG8gc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgWDg2X1NHWF9LVk1cbiAxMjM6XHRcdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuIDEyNDpcdFx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbiAxMjU6XHRcdGhlbHBcbiAxMjY6XHRcbiAxMjc6XHRcdCAgRW5hYmxlcyBLVk0gZ3Vlc3RzIHRvIGNyZWF0ZSBTR1ggZW5jbGF2ZXMuXG4gMTI4Olx0XG4gMTI5Olx0XHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXCYjMzQ7cmF3XCYjMzQ7IHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFkZGluZyBBbm90aGVyIFBpZWNlIHRvIHRoZSBQdXp6bGU6IFg4Nl9TR1gqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSByZXF1aXJlbWVudHMsIHRoZSBhcmNoaXRlY3R1cmUuLi4gYW5kIGl0JiMzOTtzIGJlY29taW5nIGNsZWFyIHRoYXQgYFg4Nl9TR1hgIGlzIGFsc28gYSBjcml0aWNhbCBjb21wb25lbnQgaGVyZS4gSSYjMzk7dmUgYmVlbiB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGN1cnJlbnQgZGVzaWduIGFuZCBpdCYjMzk7cyBhcHBhcmVudCB0aGF0IHdlIGNhbiYjMzk7dCBpZ25vcmUgdGhlIG5lZWQgZm9yIHNlY3VyZSBlbmNsYXZlcy4gV2l0aG91dCBgWDg2X1NHWGAsIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgd2UmIzM5O3JlIGxlYXZpbmcgYSBnYXBpbmcgaG9sZSBpbiBvdXIgc2VjdXJpdHkgbW9kZWwuIFdlIG1pZ2h0IGJlIGFibGUgdG8gZmluZCBhIHN1aXRhYmxlIHNvZnR3YXJlLWJhc2VkIGFsdGVybmF0aXZlLCBidXQgdGhhdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uLiBXZSBtdXN0IGhhdmUgYSBoYXJkd2FyZS1lbmZvcmNlZCB0cnVzdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gVGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogaW5jbHVkaW5nIHRoaXMgYXJlIGp1c3QgdG9vIHNpZ25pZmljYW50IHRvIG92ZXJsb29rLiBXZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMsIHRoZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGV4aXN0aW5nIGNvZGUgYmFzZSwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgd2l0aCB0aGlzIGluIG1pbmQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbmljZS10by1oYXZlOyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGZvciB0aGUga2luZCBvZiByb2J1c3Qgc2VjdXJpdHkgZ3VhcmFudGVlcyB3ZSYjMzk7cmUgYWltaW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFg4Nl9TR1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTgyNT1lbmRjaG9pY2VcbmFyY2gveDg2L0tjb25maWctMTgyNi1cbmFyY2gveDg2L0tjb25maWc6MTgyNzpjb25maWcgWDg2X1NHWFxuYXJjaC94ODYvS2NvbmZpZy0xODI4LVx0Ym9vbCBcJiMzNDtTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGBYODZfU0dYYCBkZXBlbmRlbmNpZXM6CgoqKk15IE1lbnRhbCBDaGVja2xpc3QgZm9yIHg4Nl9TR1ggRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bnBhY2sgdGhlIHdvcmxkIG9mIGRlcGVuZGVuY2llcyBmb3IgYFg4Nl9TR1hgLiBGaXJzdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgaGFyZHdhcmUgbGV2ZWwuIFdlJiMzOTtyZSB0YWxraW5nIEludGVsJiMzOTtzIGFyY2hpdGVjdHVyZSBoZXJlLCBzbyB0aGUgZmlyc3QgdGhvdWdodCBpcyB0aGUgKkNQVSBzdXBwb3J0IGl0c2VsZiouIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IGhhdmluZyBhbiB4ODYgcHJvY2Vzc29yOyBpdCBuZWVkcyB0byBiZSAqc3BlY2lmaWMqIHg4NiB3aXRoIFNHWCBlbmFibGVkLiBUaGF0IGltcGxpZXMgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwcm9jZXNzb3ImIzM5O3MgZ2VuZXJhdGlvbiBhbmQgbWljcm9hcmNoaXRlY3R1cmUgYXMgZnVuZGFtZW50YWwuIEkgc2hvdWxkIGJlIG5vdGluZyB0aGUgc3BlY2lmaWMgQ1BVIG1vZGVscyBzdXBwb3J0ZWQgYW5kIGFueSBrbm93biBsaW1pdGF0aW9ucyBvZiBlYWNoLgoKTmV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgKlNESyosIGFuZCB0aGUgYXNzb2NpYXRlZCBkcml2ZXJzIGFuZCBsaWJyYXJpZXMuIEl0JiMzOTtzIG5vdCBqdXN0IHRoZSBTREsmIzM5O3MgcHJlc2VuY2UsIGJ1dCBpdHMgdmVyc2lvbi4gSG93IGRvZXMgdGhpcyBwYXJ0aWN1bGFyIHZlcnNpb24gaW50ZXJhY3Qgd2l0aCBkaWZmZXJlbnQgT1Nlcz8gV2hhdCBhYm91dCB0aGUgc3BlY2lmaWMgY29tcGlsZXIgdmVyc2lvbnMgaXQmIzM5O3MgY29tcGF0aWJsZSB3aXRoPyBJIG5lZWQgdG8ga25vdyB3aGljaCBJbnRlbCBTREsgdmVyc2lvbnMgYXJlIGFjdGl2ZWx5IG1haW50YWluZWQgYW5kIHdoaWNoIGFyZSBkZXByZWNhdGVkLiBBcmUgdGhlcmUgZGlmZmVyZW50IFNES3MgZm9yIFdpbmRvd3MsIExpbnV4LCBldGMuPyBIb3cgZG8gdGhleSBoYW5kbGUgZGlmZmVyZW5jZXMgaW4gc3lzdGVtIGNhbGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudD8KClRoZW4gdGhlICpvcGVyYXRpbmcgc3lzdGVtKiBjb21lcyBpbnRvIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIE9TZXMgdGhlIFNESyBzdXBwb3J0cyBvZmZpY2lhbGx5LCBhbmQgaG93IHRoZWlyIGtlcm5lbCB2ZXJzaW9ucyBpbXBhY3QgU0dYIGZ1bmN0aW9uYWxpdHkuIERvZXMgdGhlIE9TIHByb3ZpZGUgbmF0aXZlIHN1cHBvcnQgdGhyb3VnaCBkcml2ZXJzIG9yIGxpYnJhcmllcywgb3IgZG9lcyB0aGUgU0RLIG1hbmFnZSBhbGwgb2YgdGhhdD8gV2hhdCBhYm91dCB0aGUgKmh5cGVydmlzb3IqIGlmIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBzcGVjaWZpYyBoeXBlcnZpc29yIHZlcnNpb25zIHRoYXQgYXJlIGNvbXBhdGlibGUsIG9yIGV2ZW4gcHJlZmVycmVkLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zIHRoZXJlPwoKQW5kIHNwZWFraW5nIG9mIE9TZXMsIHRoZXJlJiMzOTtzIHRoZSAqc2VjdXJlIGVuY2xhdmUgaW5mcmFzdHJ1Y3R1cmUqIGl0c2VsZi4gVGhlIE9TLXNwZWNpZmljIGNhbGxzIHRvIGludm9rZSB0aGUgZW5jbGF2ZXMsIHRvIG1hbmFnZSB0aGVpciBtZW1vcnksIGV0Yy4gSG93IGRvZXMgdGhpcyB2YXJ5IGJldHdlZW4sIHNheSwgTGludXggYW5kIFdpbmRvd3M/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiBTRUxpbnV4IG9yIEFwcEFybW9yIG9uIExpbnV4PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgYXBwbGljYXRpb24gc2VjdXJpdHkgaW4gZWFjaCBlbnZpcm9ubWVudD8KCkJleW9uZCB0aG9zZSBjb3JlIGNvbXBvbmVudHMsIEkgbmVlZCB0byBjb25zaWRlciAqc29mdHdhcmUgZGVwZW5kZW5jaWVzKi4gV2hhdCBhcmUgdGhlIGxpYnJhcmllcyB0aGF0IGFwcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGVuY2xhdmVzIHdpbGwgbmVlZD8gV2lsbCB0aGV5IGJlIGFibGUgdG8gcmVseSBvbiBzdGFuZGFyZCBsaWJyYXJpZXMsIG9yIGRvIHRoZXkgbmVlZCBzcGVjaWFsIFNHWC1hd2FyZSB2ZXJzaW9ucz8gQXJlIHRoZXJlIHRoaXJkLXBhcnR5IGxpYnJhcmllcyB0aGF0IGhhdmUgYmVlbiBoYXJkZW5lZCBmb3IgU0dYPyBXaGF0JiMzOTtzIHRoZSBlY29zeXN0ZW0gbGlrZSBmb3IgY3J5cHRvZ3JhcGhpYyBsaWJyYXJpZXMgY29tcGF0aWJsZSB3aXRoIFNHWD8gV2hhdCBhYm91dCB0aGluZ3MgbGlrZSBuZXR3b3JraW5nIG9yIGZpbGUgc3lzdGVtIGFjY2VzcyAqZnJvbSB3aXRoaW4qIHRoZSBlbmNsYXZlPyBXaGF0IGFyZSB0aGUgbGltaXRhdGlvbnM/CgpBbmQgZmluYWxseSwgKnNlY3VyaXR5Ki4gV2hhdCBhcmUgdGhlIGtub3duIHZ1bG5lcmFiaWxpdGllcyBhbmQgbWl0aWdhdGlvbnMgZm9yIHRoZXNlIGRlcGVuZGVuY2llcz8gSG93IGFyZSB1cGRhdGVzIGhhbmRsZWQgYW5kIGRpc3RyaWJ1dGVkPyBIb3cgZG9lcyB0aGUgU0dYIGF0dGVzdGF0aW9uIHByb2Nlc3MgcmVsYXRlIHRvIHRoZXNlIGRlcGVuZGVuY2llcz8gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHN5c3RlbSBhbmQgcHJvdGVjdGluZyBhZ2FpbnN0IGF0dGFja3MuIEkgbXVzdCBrbm93IHRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBhbmQgd2hhdCBtZXRob2RzIGFyZSBpbiBwbGFjZSB0byBjb3VudGVyYWN0IHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgyNTpcdGVuZGNob2ljZVxuMTgyNjpcdFxuMTgyNzpcdGNvbmZpZyBYODZfU0dYXG4xODI4Olx0XHRib29sIFwmIzM0O1NvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWClcJiMzNDtcbjE4Mjk6XHRcdGRlcGVuZHMgb24gWDg2XzY0IFx1MDAyNlx1MDAyNiBDUFVfU1VQX0lOVEVMIFx1MDAyNlx1MDAyNiBYODZfWDJBUElDXG4xODMwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbjE4MzE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbjE4MzI6XHRcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG4xODMzOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xODM0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzY2VuYXJpby4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uIEkgc2VlIGBYODZfNjRgLCBgQ1BVX1NVUF9JTlRFTGAsIGFuZCBgWDg2X1gyQVBJQ2AgbWVudGlvbmVkIGFzIHJlcXVpcmVtZW50cy4gQnV0IHdhaXQgYSBtaW51dGUsIGBYODZfNjRgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gZm9yIHN5emthbGxlciwgYW5kIGBDUFVfU1VQX0lOVEVMYCBhbmQgYFg4Nl9YMkFQSUNgIGFyZSBhbHNvIHByZXR0eSBtdWNoIHN0YW5kYXJkIG5vd2FkYXlzLiBUaGF0IG1lYW5zIHRoYXQgaWYgdGhvc2UgYXJlIGltcGxpZWQsIEkgcmVhbGx5IG9ubHkgbmVlZCB0byBtYWtlIHN1cmUgYFg4Nl9TR1hgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBzeXprYWxsZXIgY29uZmlndXJhdGlvbi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9JTlRFTGAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgbmVjZXNzYXJ5LiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKklBMzJfRkVBVF9DVEw6IE15IE1lbnRhbCBDaGVja2xpc3QqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY3VycmVudCBwcm9qZWN0IGFuZCBJIGltbWVkaWF0ZWx5IGhpdCBvbiBgSUEzMl9GRUFUX0NUTGAuIEl0JiMzOTtzIGEga2V5IHJlZ2lzdGVyLCBhbmQgbXkgbWluZCYjMzk7cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgdGhpbmcuIEkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgZmVhdHVyZXMgaXQgY29udHJvbHMg4oCTIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQsIHBvc3NpYmx5IHNvbWUgc2VjdXJpdHkgZXh0ZW5zaW9ucywgZGVmaW5pdGVseSB0aGluZ3MgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBhbmQgbWF5YmUgc29tZSBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdHMsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgQ1BVLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBhbSBJIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgQ1BVIG1vZGVsIHRvIGV2ZW4gbWFrZSB0aGlzIGEgY29uc2lkZXJhdGlvbj8gSWYgbm90LCB0aGVuIEkmIzM5O3ZlIGdvbmUgZG93biB0aGUgd3JvbmcgcGF0aCwgYW5kIEkgbmVlZCB0byBjaGVjayBteSBDUFVJRCBvdXRwdXQgYmVmb3JlIEkgd2FzdGUgYW55IG1vcmUgdGltZS4gSWYgSSAqYW0qIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgaGFyZHdhcmUsIHRoZW4gSSBuZWVkIHRvIGNhcmVmdWxseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGJpdHMgd2l0aGluIGBJQTMyX0ZFQVRfQ1RMYCBuZWVkIHNwZWNpZmljIG1hbmlwdWxhdGlvbiBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gV2hhdCBmZWF0dXJlcyBhbSBJIHRhcmdldGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgKnRob3NlKiBmZWF0dXJlcz8gV2hhdCYjMzk7cyB0aGUgcmVjb21tZW5kZWQgcG93ZXItb24gZGVmYXVsdCB2YWx1ZSwgYW5kIGlzIHRoYXQgZ29pbmcgdG8gd29yayBmb3IgbXkgcGFydGljdWxhciB1c2FnZSBzY2VuYXJpbz8gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoaXMgY29udHJvbCByZWdpc3RlciBpcyBhcHByb3ByaWF0ZWx5IHNldCB0byBtYXhpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWQgYW55IHVuYW50aWNpcGF0ZWQgYmVoYXZpb3JzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgYW55IGNoYW5nZXMgaGVyZSB3b24mIzM5O3QgY3JlYXRlIGFueSBpbmNvbXBhdGliaWxpdGllcyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLCBsaWtlIHRoZSBoeXBlcnZpc29yIG9yIEJJT1MuIEkgbmVlZCB0byByZXZpZXcgYWxsIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9uZSBtb3JlIHRpbWUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycmF0YSB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIHJlZ2lzdGVyLCBhbmQgdGhlbiBtYWtlIGEgdmVyeSBjYWxjdWxhdGVkIGRlY2lzaW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElBMzJfRkVBVF9DVEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBBcmNoYWVvbG9neTogTG9jYXRpbmcgSUEzMl9GRUFUX0NUTCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgSUEzMl9GRUFUX0NUTGAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpc24mIzM5O3QgZXhhY3RseSBhIGdyb3VuZGJyZWFraW5nIHRhc2ssIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkga25vdyBhIGZhaXIgYml0IGFib3V0IGhvdyB0aGUgS2NvbmZpZyBzeXN0ZW0gaXMgc3RydWN0dXJlZCwgYnV0IHNvbWV0aW1lcyBhIHNwZWNpZmljIHN5bWJvbCBjYW4gYmUgdHJpY2t5IHRvIHRyYWNrIGRvd24gaWYgaXQmIzM5O3MgZGVlcGx5IG5lc3RlZCwgb3IgaGlkZGVuIGJlaGluZCBzb21lIG9ic2N1cmUgZGVwZW5kZW5jeS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gbGV2ZXJhZ2UgdGhlIHBvd2VyIG9mIGBncmVwYCAob3IgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29sKS4gSSYjMzk7bGwgZXhlY3V0ZSBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBLY29uZmlnIGhpZXJhcmNoeS4gSSYjMzk7bSB0aGlua2luZyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgc2ltcGxlIGBncmVwICYjMzQ7SUEzMl9GRUFUX0NUTCYjMzQ7ICpLY29uZmlnKmAgKG9yIHdoYXRldmVyIHRoZSBhY3R1YWwgZmlsZSBleHRlbnNpb24vbmFtaW5nIGNvbnZlbnRpb24gaXMgdXNlZCkuIEkgbWlnaHQgbmVlZCB0byByZWZpbmUgdGhpcyBiYXNlZCBvbiB0aGUgcmVzdWx0cy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGludG8gYW55IGNvbW1vbiBhYmJyZXZpYXRpb25zIG9yIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiB0aGUgdGVybS4KCklmIEkgZG9uJiMzOTt0IGltbWVkaWF0ZWx5IGZpbmQgaXQsIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2guIFBlcmhhcHMgdGhlIHN5bWJvbCBpcyBkZWZpbmVkIGNvbmRpdGlvbmFsbHksIGJhc2VkIG9uIGFub3RoZXIgc3ltYm9sIG9yIGFyY2hpdGVjdHVyZS4gSW4gdGhhdCBjYXNlLCBJIG1pZ2h0IGhhdmUgdG8gZXhwYW5kIG15IHNlYXJjaCB0byBpbmNsdWRlIHJlbGV2YW50IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGxvb2sgZm9yIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMgd2hpY2ggY291bGQgcHJvdmlkZSBoaW50cy4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUgcG9zc2libGUgZGVwZW5kZW5jeSBjaGFpbnMuCgpCZXlvbmQgc2ltcGxlIHN0cmluZyBtYXRjaGluZywgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaGVzIGlmIEkgaGl0IGEgd2FsbC4gVXNpbmcgYSBLY29uZmlnIHBhcnNpbmcgdG9vbCB3b3VsZCBiZSBpZGVhbCB0byBwYXJzZSB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlbiBJIGNhbiB1c2UgdGhlIHRvb2wgdG8gcXVlcnkgdGhlIGNvbmZpZyBzeW1ib2wgZGF0YWJhc2UgYW5kIGZpbmQgaG93IGBJQTMyX0ZFQVRfQ1RMYCBpcyBkZWZpbmVkLiBUaGlzIGxldmVsIG9mIGFuYWx5c2lzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgZG93biB0aGUgc3ltYm9sIGFuZCB1bmRlcnN0YW5kIHdoZXJlIGl0cyBkZWZpbml0aW9uIGxpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUEzMl9GRUFUX0NUTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdT0yODU9Y29uZmlnIFg4Nl9ERUJVR0NUTE1TUlxuLS1cbmFyY2gveDg2L0tjb25maWcuY3B1LTI4OC1cbmFyY2gveDg2L0tjb25maWcuY3B1OjI4OTpjb25maWcgSUEzMl9GRUFUX0NUTFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMjkwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtWTSBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gYGRlZl9ib29sIHlgIG1lYW5zIHRoaXMgZmVhdHVyZSBpcyBhbHdheXMgb24sIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYFg4Nl9TR1hgLCBhbmQgYFg4Nl9TR1hfS1ZNYC4gUmlnaHQsIGdvdCBpdC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhvc2UgZnVuY3Rpb25zIEkgd2FzIGxvb2tpbmcgYXQuCgpJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGVzZTogYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGt2bV9oYW5kbGVfaW52cGNpZGAsIGFuZCBgdm14X2dldF91bnRhZ2dlZF9hZGRyYC4gSSBzaG91bGQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdGhhdCBtaWdodCBiZSBoaWRpbmcuCgpIbW0sIG9rYXksIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gc2VlaW5nIGEgZmV3IG90aGVyIGZ1bmN0aW9ucywgYnV0IHRoZXNlIGFyZSBhbGwgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBleHBvc2VkOiBgbmVzdGVkX3ZteF9jcl9maXhlZDFfYml0c191cGRhdGVgLCBgaGFuZGxlX2ludnZwaWRgLCBgc2d4X2dldF9lbmNsc19ndmFgLCBgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25gLCBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGFuZCBgZW11bGF0b3JfaW9fcG9ydF9hY2Nlc3NfYWxsb3dlZGAuIFRoZXNlIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgY29uY2VybmluZyBmcm9tIGFuIGV4dGVybmFsIGV4cGxvaXQgcGVyc3BlY3RpdmUsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVtLgoKTm93LCBhIGNydWNpYWwgcG9pbnQ6IEkgbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIGlmIGB2bXhfaXNfbGFzc192aW9sYXRpb25gIGlzIGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIG1lcmVseSBub24tc3RhdGljLiBUaGUgZXhwb3J0IHN0YXR1cyBvZiB0aGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiBkZXRlcm1pbmluZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9pc19sYXNzX3Zpb2xhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTcwPWd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwNy1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODYwODpib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwOS1cdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFRhcmdldCBmb3IgT3B0aW1pemF0aW9uKioKClJpZ2h0LCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGFyZWEgaXNuJiMzOTt0IHN0YXRpYyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgd29ydGggaW52ZXN0aWdhdGluZy4gTm9uLXN0YXRpYyBvZnRlbiBpbXBsaWVzIGR5bmFtaWMgYmVoYXZpb3IsIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiwgb3IgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcyBhbmQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbi4gSXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaHVuY2ggYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYGt2bV9oYW5kbGVfaW52cGNpZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZ28gdG8gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIHB1bGwgdXAgdGhhdCBmdW5jdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxpa2VseSBjb2RlIHBhdGhzLCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIEludnBjaWQgaW5zdHJ1Y3Rpb24sIGFuZCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBLVk0uIFRoaXMgc2hvdWxkIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCBndWlkZSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIHRoYXQmIzM5O3MgcHJvZmlsaW5nLCBjb2RlIGFuYWx5c2lzLCBvciB0YXJnZXRlZCBpbnN0cnVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9oYW5kbGVfaW52cGNpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MTA3MjY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzI3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzI4OmludCBrdm1faGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHR5cGUsIGd2YV90IGd2YSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyOS17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODA0LX1cbmFyY2gveDg2L2t2bS94ODYuYzoxMDgwNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2hhbmRsZV9pbnZwY2lkKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDgwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MTIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqQ2hlY2tpbmcgS1ZNJiMzOTtzIEludGVybmFsIE1lbW9yeSBBZGRyZXNzaW5nKioKClJpZ2h0LCB0aGlzIGlzIGJlaW5nIHVzZWQgaW50ZXJuYWxseSBieSBLVk0sIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBtZW1vcnkgYWRkcmVzc2luZyBzY2hlbWUgaXMgY29ycmVjdC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gdmVyaWZ5IGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gSXQmIzM5O3MgY3J1Y2lhbCB0aGlzIGZ1bmN0aW9uIGRvZXMgZXhhY3RseSB3aGF0JiMzOTtzIGV4cGVjdGVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBhbnkgZXJyb3JzIGhlcmUgY2FuIGNhdXNlIHNlcmlvdXMgaXNzdWVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MjIzPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfdHJpcGxlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyMzQtICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUyMzU6aW50IGdldF92bXhfbWVtX2FkZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTIzNi1cdFx0XHR1MzIgdm14X2luc3RydWN0aW9uX2luZm8sIGJvb2wgd3IsIGludCBsZW4sIGd2YV90ICpyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MzYxPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTM2ODpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MzY5LVx0XHRcdFx0dm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3MjUtXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU3MjY6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNy1cdFx0XHRcdFx0aW5zdHJfaW5mbywgdHJ1ZSwgbGVuLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTc2Mj1zdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3OTktXHRcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4MDA6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTgwMS1cdFx0XHRcdFx0aW5zdHJfaW5mbywgZmFsc2UsIGxlbiwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NTM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY3LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTY4Olx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTY5LVx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5ODE9c3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwMTUtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjAxNjpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE3LVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjA2MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwOTgtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjA5OTpcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTAwLVx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI2NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipDaGVja2luZyB0aGUgTm9uLVN0YXRpYyBBc3N1bXB0aW9uIGluIHg4NiBLVk0vVk1YKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoYXQgd2hhdGV2ZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpc24mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyBkeW5hbWljLCBjaGFuZ2luZywgKm5vdCogZml4ZWQuIFRoaXMgaXMgY3J1Y2lhbDsgaWYgaXQgd2VyZSBzdGF0aWMsIHdlIGNvdWxkIG1ha2Ugc29tZSBkaWZmZXJlbnQgYXNzdW1wdGlvbnMuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgbmVlZHMgdG8gYmUgY29uZmlybWVkLgoKVG8gcGluIHRoaXMgZG93biwgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHRha2UgYSBsb29rIGF0IGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEgc3VnZ2VzdHMgdGhpcyBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHRoZSBkeW5hbWljcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QgYnkgdmVyaWZ5aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSBleHBlY3QuIExldCYjMzk7cyBleGFtaW5lIGl0IGFuZCBzZWUgaWYgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9nZXRfdW50YWdnZWRfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz04NTU2PXZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU2OS0gKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODU3MDpndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncylcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzIyCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMQVNTIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIHN1cHBvcnQgd2l0aGluIEtWTSBmb3IgeDg2LiBUaGUgY29yZSBvZiB0aGlzIGlzIG1vZGlmeWluZyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUga2VybmVsIGxvZ2ljIOKAkyB0aGlzIGFic29sdXRlbHkgbmVlZHMgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBrZXkgYXJlYXMgYW5kIGNvbmZpZ3VyYXRpb25zLiAgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBGb2N1c1N5bWJvbHMgdGhhdCBzZWVtIGNyaXRpY2FsOiBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCwgYGdldF92bXhfbWVtX2FkZHJlc3NgLCBga3ZtX2hhbmRsZV9pbnZwY2lkYCwgYW5kIGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgLiBUaGV5IGFyZSB0aGUgZnVuY3Rpb25hbCBlbGVtZW50cyB0aGF0IEkgYmVsaWV2ZSB3aWxsIHdhcnJhbnQgdGhlIG1vc3QgYXR0ZW50aW9uLgoKTm93LCBmb3IgY29uZmlndXJhdGlvbnMuICBJIHNlZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBYODZfU0dYYCwgYW5kIGBYODZfU0dYX0tWTWAgbWVudGlvbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIG1pbmltdW0gY29uZmlndXJhdGlvbiBmb3IgZWZmZWN0aXZlIHRlc3Rpbmcgb2YgdGhpcyBMQVNTIGltcGxlbWVudGF0aW9uLiAgU3BlY2lmaWNhbGx5LCBpcyBgWDg2X1NHWGAgYW5kIGBYODZfU0dYX0tWTWAgc3RyaWN0bHkgcmVxdWlyZWQ/CgpBaCwgbG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBtb2RpZmljYXRpb24gdG8gYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBjaGVjayB3aXRoaW4gYHNneF9nZXRfZW5jbHNfZ3ZhYCwgaXQgaXMgY2xlYXIgdGhhdCB0ZXN0aW5nIHRoaXMgc3BlY2lmaWMgcGF0aCAqZG9lcyogcmVxdWlyZSBgWDg2X1NHWF9LVk1gLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoZSBvdGhlciBjb25maWdzLiBgQ09ORklHX1g4Nl82NGAgaXMgc3RhbmRhcmQuIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fSU5URUxgIGFyZSBhbHNvIHN0YW5kYXJkLiBgQ09ORklHX1g4Nl9TR1hgIGlzIGFsc28gYSBzdGFuZGFyZCBjb25maWcuIFRoZXJlZm9yZSwgdGhlIGVzc2VudGlhbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgYXBwZWFyIHRvIGJlIGBDT05GSUdfWDg2XzY0YCwgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9JTlRFTGAsIGFuZCBgQ09ORklHX1g4Nl9TR1hfS1ZNYC4KCkkmIzM5O3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBpbnZvbHZlZCBhbmQgY2FuIHNldCB1cCB0aGUgZnV6emVyIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtYODZfU0dYJiMzNDssCiAgICAmIzM0O1g4Nl9TR1hfS1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2lzX2xhc3NfdmlvbGF0aW9uJiMzNDssCiAgICAmIzM0O2dldF92bXhfbWVtX2FkZHJlc3MmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9pbnZwY2lkJiMzNDssCiAgICAmIzM0O3ZteF9nZXRfdW50YWdnZWRfYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIGluIEtWTSBvbiB4ODYuIEl0IG1vZGlmaWVzIHRoZSBpbnN0cnVjdGlvbiBlbXVsYXRvciBhbmQgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB0byBlbmZvcmNlIExBU1MgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O1g4Nl9TR1gmIzM0OywKICAgICYjMzQ7WDg2X1NHWF9LVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bXhfaXNfbGFzc192aW9sYXRpb24mIzM0OywKICAgICYjMzQ7Z2V0X3ZteF9tZW1fYWRkcmVzcyYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX2ludnBjaWQmIzM0OywKICAgICYjMzQ7dm14X2dldF91bnRhZ2dlZF9hZGRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTozOC40OTc1ODU3MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzEyMTg2NDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiWDg2X1NHWFwiLFxuICAgIFwiWDg2X1NHWF9LVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bXhfaXNfbGFzc192aW9sYXRpb25cIixcbiAgICBcImdldF92bXhfbWVtX2FkZHJlc3NcIixcbiAgICBcImt2bV9oYW5kbGVfaW52cGNpZFwiLFxuICAgIFwidm14X2dldF91bnRhZ2dlZF9hZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBpbiBLVk0gb24geDg2LiBJdCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6MzguNDk3NTkzNDEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2MzQ2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzRiMTg1ZDcwOWEwNmFmNzg4ZmQ3ZGE4MWY4ZjY4ZGIzMzY4ODYwNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjE1OjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggZTIxM2M5YWUzZTMwMS4uYTgyYjIwMjgxZjMxYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC0xNDYsNiArMTQ2LDcgQEAgS1ZNX1g4Nl9PUChjb21wbGV0ZV9lbXVsYXRlZF9tc3IpXFxuIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGlzX2xhc3NfdmlvbGF0aW9uKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21ha2VfcHJpdmF0ZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCAyODM4NDc2MTlmZjg4Li5kMjE4MWE4MDVhY2U0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE3MjcsNiArMTcyNyw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKCp2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBcXHRndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFx0Ym9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gXFx0dm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbiBcXHRpbnQgKCpnbWVtX21ha2VfcHJpdmF0ZSkoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG5pbmRleCA5ZTljZjY1MzhhOTZlLi5jNGRiZDAwZjVlNGU5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG5AQCAtMTAyOSw2ICsxMDI5LDcgQEAgdm9pZCBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwcyh2b2lkKVxcbiBcXHRcXHRGKFNNNCksXFxuIFxcdFxcdEYoQVZYX1ZOTkkpLFxcbiBcXHRcXHRGKEFWWDUxMl9CRjE2KSxcXG4rXFx0XFx0WDg2XzY0X0YoTEFTUyksXFxuIFxcdFxcdEYoQ01QQ0NYQUREKSxcXG4gXFx0XFx0RihGWlJNKSxcXG4gXFx0XFx0RihGU1JTKSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG5pbmRleCA4MDcxYjM3MmQyMzNlLi45Y2JmZGU2NDkwNjQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXFxuQEAgLTY3Miw3ICs2NzIsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0XFx0ICAgIChmbGFncyBcXHUwMDI2IFg4NkVNVUxfRl9XUklURSkpXFxuIFxcdFxcdFxcdGdvdG8gYmFkO1xcbiBcXHRcXHQvKiB1bnJlYWRhYmxlIGNvZGUgc2VnbWVudCAqL1xcbi1cXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IFg4NkVNVUxfRl9GRVRDSCkgXFx1MDAyNlxcdTAwMjYgKGRlc2MudHlwZSBcXHUwMDI2IDgpIFxcdTAwMjZcXHUwMDI2ICEoZGVzYy50eXBlIFxcdTAwMjYgMikpXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgKFg4NkVNVUxfRl9GRVRDSCB8IFg4NkVNVUxfRl9CUkFOQ0gpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGRlc2MudHlwZSBcXHUwMDI2IDgpIFxcdTAwMjZcXHUwMDI2ICEoZGVzYy50eXBlIFxcdTAwMjYgMikpXFxuIFxcdFxcdFxcdGdvdG8gYmFkO1xcbiBcXHRcXHRsaW0gPSBkZXNjX2xpbWl0X3NjYWxlZChcXHUwMDI2ZGVzYyk7XFxuIFxcdFxcdGlmICghKGRlc2MudHlwZSBcXHUwMDI2IDgpIFxcdTAwMjZcXHUwMDI2IChkZXNjLnR5cGUgXFx1MDAyNiA0KSkge1xcbkBAIC02OTIsNiArNjkzLDE2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fbGluZWFyaXplKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBMQVNTIGFuZCBjYW5vbmljYWxpdHkgY2hlY2tzIGdlbmVyYXRlIHRoZSBzYW1lIGZhdWx0IGFuZFxcbitcXHQgKiB0aGVpciByZWxhdGl2ZSBvcmRlciBpcyBub3QgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQuIEFsc28sXFxuK1xcdCAqIHRoZSBTRE0gZG9lc24ndCBwcmlvcml0aXplIExBU1MgdmlvbGF0aW9ucyBhZ2FpbnN0XFxuK1xcdCAqIGFsaWdubWVudC1jaGVjayBmYXVsdHMsIHNvIGFueSBvcmRlciBpcyBsZWdhbC5cXG4rXFx0ICovXFxuK1xcdGlmIChjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZWlzX2xhc3NfdmlvbGF0aW9uKGN0eHQsIGxhLCBzaXplLCBmbGFncykpXFxuK1xcdFxcdGdvdG8gYmFkO1xcbitcXG4gXFx0aWYgKGxhIFxcdTAwMjYgKGluc25fYWxpZ25tZW50KGN0eHQsIHNpemUpIC0gMSkpXFxuIFxcdFxcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xcbiBcXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcXG5AQCAtNzIzLDcgKzczNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFzc2lnbl9laXAoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGRzdClcXG4gXFx0aWYgKGN0eHQtXFx1MDAzZW9wX2J5dGVzICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSlcXG4gXFx0XFx0YWRkci5lYSA9IGRzdCBcXHUwMDI2ICgoMVVMIFxcdTAwM2NcXHUwMDNjIChjdHh0LVxcdTAwM2VvcF9ieXRlcyBcXHUwMDNjXFx1MDAzYyAzKSkgLSAxKTtcXG4gXFx0cmMgPSBfX2xpbmVhcml6ZShjdHh0LCBhZGRyLCBcXHUwMDI2bWF4X3NpemUsIDEsIGN0eHQtXFx1MDAzZW1vZGUsIFxcdTAwMjZsaW5lYXIsXFxuLVxcdFxcdFxcdCBYODZFTVVMX0ZfRkVUQ0gpO1xcbitcXHRcXHRcXHQgWDg2RU1VTF9GX0JSQU5DSCk7XFxuIFxcdGlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKVxcbiBcXHRcXHRjdHh0LVxcdTAwM2VfZWlwID0gYWRkci5lYTtcXG4gXFx0cmV0dXJuIHJjO1xcbkBAIC03OTgsNiArODA5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgam1wX3JlbChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IHJlbClcXG4gc3RhdGljIGludCBsaW5lYXJfcmVhZF9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGxpbmVhcixcXG4gXFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6ZSlcXG4ge1xcbitcXHRpZiAoY3R4dC1cXHUwMDNlb3BzLVxcdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsIFg4NkVNVUxfRl9JTVBMSUNJVCkpXFxuK1xcdFxcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xcbitcXG4gXFx0cmV0dXJuIGN0eHQtXFx1MDAzZW9wcy1cXHUwMDNlcmVhZF9zdGQoY3R4dCwgbGluZWFyLCBkYXRhLCBzaXplLCBcXHUwMDI2Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLCB0cnVlKTtcXG4gfVxcbiBcXG5AQCAtODA1LDYgKzgxOSwxMCBAQCBzdGF0aWMgaW50IGxpbmVhcl93cml0ZV9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuIFxcdFxcdFxcdCAgICAgICB1bG9uZyBsaW5lYXIsIHZvaWQgKmRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4ge1xcbitcXHRpZiAoY3R4dC1cXHUwMDNlb3BzLVxcdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCBYODZFTVVMX0ZfSU1QTElDSVQgfCBYODZFTVVMX0ZfV1JJVEUpKVxcbitcXHRcXHRyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTtcXG4rXFxuIFxcdHJldHVybiBjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZXdyaXRlX3N0ZChjdHh0LCBsaW5lYXIsIGRhdGEsIHNpemUsIFxcdTAwMjZjdHh0LVxcdTAwM2VleGNlcHRpb24sIHRydWUpO1xcbiB9XFxuIFxcbkBAIC0yNTcyLDEyICsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIFxcdGJhc2UgfD0gKCh1NjQpYmFzZTMpIFxcdTAwM2NcXHUwMDNjIDMyO1xcbiAjZW5kaWZcXG4tXFx0ciA9IG9wcy1cXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSArIDEwMiwgXFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIsIE5VTEwsIHRydWUpO1xcbitcXHRyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgKyAxMDIsIFxcdTAwMjZpb19iaXRtYXBfcHRyLCAyKTtcXG4gXFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCBcXHUwMDNlIGRlc2NfbGltaXRfc2NhbGVkKFxcdTAwMjZ0cl9zZWcpKVxcbitcXHRpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCArIDEgXFx1MDAzZSBkZXNjX2xpbWl0X3NjYWxlZChcXHUwMDI2dHJfc2VnKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRyID0gb3BzLVxcdTAwM2VyZWFkX3N0ZChjdHh0LCBiYXNlICsgaW9fYml0bWFwX3B0ciArIHBvcnQvOCwgXFx1MDAyNnBlcm0sIDIsIE5VTEwsIHRydWUpO1xcbitcXHRyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgKyBpb19iaXRtYXBfcHRyICsgcG9ydC84LCBcXHUwMDI2cGVybSwgMik7XFxuIFxcdGlmIChyICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKChwZXJtIFxcdTAwM2VcXHUwMDNlIGJpdF9pZHgpIFxcdTAwMjYgbWFzaylcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmYxMzZkM2QwYmE0MjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0xMDUsNiArMTA1LDcgQEAgc3RydWN0IHg4Nl9pbnN0cnVjdGlvbl9pbmZvIHtcXG4gI2RlZmluZSBYODZFTVVMX0ZfSU5WTFBHXFx0XFx0QklUKDMpXFxuICNkZWZpbmUgWDg2RU1VTF9GX01TUlxcdFxcdFxcdEJJVCg0KVxcbiAjZGVmaW5lIFg4NkVNVUxfRl9EVF9MT0FEXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgWDg2RU1VTF9GX0JSQU5DSFxcdFxcdEJJVCg2KVxcbiBcXG4gc3RydWN0IHg4Nl9lbXVsYXRlX29wcyB7XFxuIFxcdHZvaWQgKCp2bV9idWdnZWQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcXG5AQCAtMjQ4LDcgKzI0OSw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMge1xcbiBcXG4gXFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuLVxcbitcXHRib29sICgqaXNfbGFzc192aW9sYXRpb24pKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXHRib29sICgqaXNfY2Fub25pY2FsX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5oIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbmluZGV4IDQ0N2YwZWMzZTYzZTQuLmJlODYyMTY5NWM0MTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9yZWdzLmhcXG5AQCAtMjgsNyArMjgsNyBAQCBzdGF0aWNfYXNzZXJ0KCEoS1ZNX1BPU1NJQkxFX0NSMF9HVUVTVF9CSVRTIFxcdTAwMjYgWDg2X0NSMF9QRFBUUl9CSVRTKSk7XFxuIFxcdFxcdFxcdCAgfCBYODZfQ1I0X09TWFNBVkUgfCBYODZfQ1I0X1NNRVAgfCBYODZfQ1I0X0ZTR1NCQVNFIFxcXFxcXG4gXFx0XFx0XFx0ICB8IFg4Nl9DUjRfT1NYTU1FWENQVCB8IFg4Nl9DUjRfTEE1NyB8IFg4Nl9DUjRfVk1YRSBcXFxcXFxuIFxcdFxcdFxcdCAgfCBYODZfQ1I0X1NNQVAgfCBYODZfQ1I0X1BLRSB8IFg4Nl9DUjRfVU1JUCBcXFxcXFxuLVxcdFxcdFxcdCAgfCBYODZfQ1I0X0xBTV9TVVAgfCBYODZfQ1I0X0NFVCkpXFxuK1xcdFxcdFxcdCAgfCBYODZfQ1I0X0xBTV9TVVAgfCBYODZfQ1I0X0NFVCB8IFg4Nl9DUjRfTEFTUykpXFxuIFxcbiAjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpXFxuIFxcbkBAIC00MDUsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBib29sIF9fa3ZtX2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxcbiBcXHRcXHRfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9QQ0lERTsgICAgICAgXFxcXFxcbiBcXHRpZiAoIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0xBTSkpICAgICAgICAgICBcXFxcXFxuIFxcdFxcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0xBTV9TVVA7ICAgICBcXFxcXFxuK1xcdGlmICghX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfTEFTUykpICAgICAgICAgIFxcXFxcXG4rXFx0XFx0X19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFTUzsgICAgICAgIFxcXFxcXG4gXFx0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9TSFNUSykgXFx1MDAyNlxcdTAwMjYgICAgICAgXFxcXFxcbiBcXHQgICAgIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX0lCVCkpICAgICAgICAgICBcXFxcXFxuIFxcdFxcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0NFVDsgICAgICAgICBcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5pbmRleCAwZmYzMjMwZmQ5NWU4Li4zNTgwYWFkYThkMmM4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5AQCAtMTAzMSw2ICsxMDMxLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LnZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvciA9IGt2bV92Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IsXFxuIFxcbiBcXHQuZ2V0X3VudGFnZ2VkX2FkZHIgPSB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIsXFxuK1xcdC5pc19sYXNzX3Zpb2xhdGlvbiA9IHZteF9pc19sYXNzX3Zpb2xhdGlvbixcXG4gXFxuIFxcdC5tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkobWVtX2VuY19pb2N0bCksXFxuIFxcdC52Y3B1X21lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seSh2Y3B1X21lbV9lbmNfaW9jdGwpLFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5AQCAtNTI5OSwxMSArNTI5OSwxMiBAQCBpbnQgZ2V0X3ZteF9tZW1fYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbiBcXHRcXHRcXHQqcmV0ID0gb2ZmO1xcbiBcXG4gXFx0XFx0KnJldCA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqcmV0LCAwKTtcXG4tXFx0XFx0LyogTG9uZyBtb2RlOiAjR1AoMCkvI1NTKDApIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiBhXFxuLVxcdFxcdCAqIG5vbi1jYW5vbmljYWwgZm9ybS4gVGhpcyBpcyB0aGUgb25seSBjaGVjayBvbiB0aGUgbWVtb3J5XFxuLVxcdFxcdCAqIGRlc3RpbmF0aW9uIGZvciBsb25nIG1vZGUhXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIExvbmcgbW9kZTogI0dQKDApLyNTUygwKSBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgaXMgaW4gYVxcbitcXHRcXHQgKiBub24tY2Fub25pY2FsIGZvcm0sIG9yIGlmIHRoZSBhY2Nlc3MgdmlvbGF0ZXMgTEFTUy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGV4biA9IGlzX25vbmNhbm9uaWNhbF9hZGRyZXNzKCpyZXQsIHZjcHUsIDApO1xcbitcXHRcXHRleG4gPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqcmV0LCB2Y3B1LCAwKSB8fFxcbitcXHRcXHQgICAgICB2bXhfaXNfbGFzc192aW9sYXRpb24odmNwdSwgKnJldCwgbGVuLCAwKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2hlbiBub3QgaW4gbG9uZyBtb2RlLCB0aGUgdmlydHVhbC9saW5lYXIgYWRkcmVzcyBpc1xcbkBAIC02MTA4LDcgKzYxMDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHR5cGUgIT0gVk1YX1ZQSURfRVhURU5UX0FMTF9DT05URVhUIFxcdTAwMjZcXHUwMDI2ICFvcGVyYW5kLnZwaWQpXFxuIFxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7XFxuIFxcbi1cXHQvKiBMQU0gZG9lc24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovXFxuK1xcdC8qIExBTSBhbmQgTEFTUyBkb24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovXFxuIFxcdGlmICh0eXBlID09IFZNWF9WUElEX0VYVEVOVF9JTkRJVklEVUFMX0FERFIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGlzX25vbmNhbm9uaWNhbF9pbnZscGdfYWRkcmVzcyhvcGVyYW5kLmdsYSwgdmNwdSkpXFxuIFxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvc2d4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3NneC5jXFxuaW5kZXggNzcxYzc1YTU4MzQzNi4uNGFjMzA1ZWQ2ZGVhMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3NneC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xcbkBAIC0zOSw3ICszOSw4IEBAIHN0YXRpYyBpbnQgc2d4X2dldF9lbmNsc19ndmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4gXFx0XFx0ZmF1bHQgPSB0cnVlO1xcbiBcXHR9IGVsc2UgaWYgKGxpa2VseShpc182NF9iaXRfbW9kZSh2Y3B1KSkpIHtcXG4gXFx0XFx0Kmd2YSA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqZ3ZhLCAwKTtcXG4tXFx0XFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKTtcXG4rXFx0XFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fFxcbitcXHRcXHRcXHR2bXhfaXNfbGFzc192aW9sYXRpb24odmNwdSwgKmd2YSwgc2l6ZSwgMCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdCpndmEgXFx1MDAyNj0gMHhmZmZmZmZmZjtcXG4gXFx0XFx0ZmF1bHQgPSAocy51bnVzYWJsZSkgfHxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCBlM2JmZTZhY2ExYTBlLi4zMDgyMTk1OTA2ZGE4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTc4ODUsNiArNzg4NSw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGVudHJ5ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnlfaW5kZXgodmNwdSwgMHg3LCAxKTtcXG4gXFx0Y3I0X2ZpeGVkMV91cGRhdGUoWDg2X0NSNF9MQU1fU1VQLCAgICBlYXgsIGZlYXR1cmVfYml0KExBTSkpO1xcbitcXHRjcjRfZml4ZWQxX3VwZGF0ZShYODZfQ1I0X0xBU1MsICAgICAgIGVheCwgZmVhdHVyZV9iaXQoTEFTUykpO1xcbiBcXG4gI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlXFxuIH1cXG5AQCAtODU3MSw3ICs4NTcyLDggQEAgZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3NcXG4gXFx0aW50IGxhbV9iaXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgY3IzX2JpdHM7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX0lOVkxQRykpXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lNUExJQ0lUIHxcXG4rXFx0XFx0ICAgICBYODZFTVVMX0ZfSU5WTFBHKSlcXG4gXFx0XFx0cmV0dXJuIGd2YTtcXG4gXFxuIFxcdGlmICghaXNfNjRfYml0X21vZGUodmNwdSkpXFxuQEAgLTg2MDMsNiArODYwNSw1MyBAQCBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFnc1xcbiBcXHRyZXR1cm4gKHNpZ25fZXh0ZW5kNjQoZ3ZhLCBsYW1fYml0KSBcXHUwMDI2IH5CSVRfVUxMKDYzKSkgfCAoZ3ZhIFxcdTAwMjYgQklUX1VMTCg2MykpO1xcbiB9XFxuIFxcbitib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRjb25zdCBib29sIGlzX3N1cGVydmlzb3JfYWRkcmVzcyA9ICEhKGd2YSBcXHUwMDI2IEJJVF9VTEwoNjMpKTtcXG4rXFx0Y29uc3QgYm9vbCBpbXBsaWNpdF9zdXBlcnZpc29yID0gISEoZmxhZ3MgXFx1MDAyNiBYODZFTVVMX0ZfSU1QTElDSVQpO1xcbitcXHRjb25zdCBib29sIGZldGNoID0gISEoZmxhZ3MgXFx1MDAyNiBYODZFTVVMX0ZfRkVUQ0gpO1xcbitcXG4rXFx0aWYgKCFrdm1faXNfY3I0X2JpdF9zZXQodmNwdSwgWDg2X0NSNF9MQVNTKSB8fCAhaXNfbG9uZ19tb2RlKHZjcHUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJTlZMUEcgaXNuJ3Qgc3ViamVjdCB0byBMQVNTLCBlLmcuIHRvIGFsbG93IGludmFsaWRhdGluZyB1c2Vyc3BhY2VcXG4rXFx0ICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbid0IHN1YmplY3RcXG4rXFx0ICogdG8gTEFTUyBpbiBvcmRlciB0byBzaW1wbGlmeSBmYXIgY29udHJvbCB0cmFuc2ZlcnMgKHRoZSBzdWJzZXF1ZW50XFxuK1xcdCAqIGZldGNoIHdpbGwgZW5mb3JjZSBMQVNTIGFzIGFwcHJvcHJpYXRlKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IChYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lOVkxQRykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghaW1wbGljaXRfc3VwZXJ2aXNvciBcXHUwMDI2XFx1MDAyNiB2bXhfZ2V0X2NwbCh2Y3B1KSA9PSAzKVxcbitcXHRcXHRyZXR1cm4gaXNfc3VwZXJ2aXNvcl9hZGRyZXNzO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTEFTUyBlbmZvcmNlbWVudCBmb3Igc3VwZXJ2aXNvci1tb2RlIGRhdGEgYWNjZXNzZXMgZGVwZW5kcyBvbiBTTUFQXFxuK1xcdCAqIGJlaW5nIGVuYWJsZWQsIGFuZCBsaWtlIFNNQVAgaWdub3JlcyBleHBsaWNpdCBhY2Nlc3NlcyBpZiBSRkxBR1MuQUM9MS5cXG4rXFx0ICovXFxuK1xcdGlmICghZmV0Y2gpIHtcXG4rXFx0XFx0aWYgKCFrdm1faXNfY3I0X2JpdF9zZXQodmNwdSwgWDg2X0NSNF9TTUFQKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yIFxcdTAwMjZcXHUwMDI2IChrdm1fZ2V0X3JmbGFncyh2Y3B1KSBcXHUwMDI2IFg4Nl9FRkxBR1NfQUMpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBlbnRpcmUgYWNjZXNzIG11c3QgYmUgaW4gdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3Mgc3BhY2UuICBOb3RlLFxcbitcXHQgKiBpZiBMQU0gaXMgc3VwcG9ydGVkLCBAZ3ZhIGhhcyBhbHJlYWR5IGJlZW4gdW50YWdnZWQsIHNvIGJhcnJpbmcgYVxcbitcXHQgKiBtYXNzaXZlIGFyY2hpdGVjdHVyZSBjaGFuZ2UgdG8gZXhwYW5kIHRoZSBjYW5vbmljYWwgYWRkcmVzcyByYW5nZSxcXG4rXFx0ICogaXQncyBpbXBvc3NpYmxlIGZvciBhIHVzZXIgYWNjZXNzIHRvIHN0cmFkZGxlIHVzZXIgYW5kIHN1cGVydmlzb3JcXG4rXFx0ICogYWRkcmVzcyBzcGFjZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2l6ZSBcXHUwMDI2XFx1MDAyNiAhKChndmEgKyBzaXplIC0gMSkgXFx1MDAyNiBCSVRfVUxMKDYzKSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuICFpc19zdXBlcnZpc29yX2FkZHJlc3M7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm14X2hhbmRsZV9pbnRlbF9wdF9pbnRyKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li40M2RmNzI1YTc3ZjBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTM5Nyw2ICszOTcsOSBAQCB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXG4rYm9vbCB2bXhfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbitcXG4gdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggZDk0YjU5MTQwYzQ1Mi4uYTZlYTczNmZkNDhmYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNTgwMCw2ICs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFkZHIsIGZsYWdzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBrdm1feDg2X2NhbGwoaXNfbGFzc192aW9sYXRpb24pKGVtdWxfdG9fdmNwdShjdHh0KSwgYWRkciwgc2l6ZSwgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGd2YV90IGFkZHIsIHVuc2lnbmVkIGludCBmbGFncylcXG4ge1xcbkBAIC01ODU5LDYgKzU4NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4gXFx0LmdldF94Y3IgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfeGNyLFxcbiBcXHQuc2V0X3hjciAgICAgICAgICAgICA9IGVtdWxhdG9yX3NldF94Y3IsXFxuIFxcdC5nZXRfdW50YWdnZWRfYWRkciAgID0gZW11bGF0b3JfZ2V0X3VudGFnZ2VkX2FkZHIsXFxuK1xcdC5pc19sYXNzX3Zpb2xhdGlvbiAgID0gZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24sXFxuIFxcdC5pc19jYW5vbmljYWxfYWRkciAgID0gZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIsXFxuIFxcdC5wYWdlX2FkZHJlc3NfdmFsaWQgID0gZW11bGF0b3JfcGFnZV9hZGRyZXNzX3ZhbGlkLFxcbiB9O1xcbkBAIC0xMDc0NSw3ICsxMDc1Miw3IEBAIGludCBrdm1faGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHR5cGUsIGd2YV90IGd2YSlcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuIFxcdGNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIExBTSBkb2Vzbid0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCXFxuK1xcdFxcdCAqIExBTSBhbmQgTEFTUyBkb24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxcbiBcXHRcXHQgKiBpbnZhbGlkYXRpb24uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoKCFwY2lkX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgKG9wZXJhbmQucGNpZCAhPSAwKSkgfHxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCAwMDEyMzE2OWExOTBhLi44NmZhOTNlMGY2YzA4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTkxLDYgKzkxLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fcHZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9sYXNzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9tb25pdG9yX213YWl0X3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9tc3JzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuaW5kZXggNmU2ZjcwMDM1NTA4YS4uZjQyNTE2NjE3NGY5ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5AQCAtNzksNiArNzksNyBAQCBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3Rvcik7XFxuICNkZWZpbmUgWDg2X0NSNF9TTUVQXFx0XFx0KDF1bCBcXHUwMDNjXFx1MDAzYyAyMClcXG4gI2RlZmluZSBYODZfQ1I0X1NNQVBcXHRcXHQoMXVsIFxcdTAwM2NcXHUwMDNjIDIxKVxcbiAjZGVmaW5lIFg4Nl9DUjRfUEtFXFx0XFx0KDF1bCBcXHUwMDNjXFx1MDAzYyAyMilcXG4rI2RlZmluZSBYODZfQ1I0X0xBU1NcXHRcXHQoMXVsIFxcdTAwM2NcXHUwMDNjIDI3KVxcbiBcXG4gc3RydWN0IHhzdGF0ZV9oZWFkZXIge1xcbiBcXHR1NjRcXHRcXHRcXHRcXHR4c3RhdGVfYnY7XFxuQEAgLTE5NSw2ICsxOTYsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9jcHVfZmVhdHVyZSB7XFxuICNkZWZpbmVcXHRYODZfRkVBVFVSRV9TUEVDX0NUUkxcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyNilcXG4gI2RlZmluZVxcdFg4Nl9GRUFUVVJFX0FSQ0hfQ0FQQUJJTElUSUVTXFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweDcsIDAsIEVEWCwgMjkpXFxuICNkZWZpbmVcXHRYODZfRkVBVFVSRV9QS1NcXHRcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRUNYLCAzMSlcXG4rI2RlZmluZVxcdFg4Nl9GRUFUVVJFX0xBU1NcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMSwgRUFYLCA2KVxcbiAjZGVmaW5lXFx0WDg2X0ZFQVRVUkVfWFRJTEVDRkdcXHRcXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4RCwgMCwgRUFYLCAxNylcXG4gI2RlZmluZVxcdFg4Nl9GRUFUVVJFX1hUSUxFREFUQVxcdFxcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE4KVxcbiAjZGVmaW5lXFx0WDg2X0ZFQVRVUkVfWFNBVkVTXFx0XFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweEQsIDEsIEVBWCwgMylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbGFzc190ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdjNWNmYTI0YzJiZGRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuY1xcbkBAIC0wLDAgKzEsNTYgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgdGVzdFxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uLlxcbisgKlxcbisgKiBPbmx5IHRlc3QgdGhhdCB0aGUgZ3Vlc3QgY2FuJ3Qgc2V0IENSNC5MQVNTIHdoZW4gTEFTUyBpc24ndFxcbisgKiBlbnVtZXJhdGVkIGluIHRoZSBndWVzdCdzIENQVUlELiAgS1ZNJ3MgaGFuZGxpbmcgb2YgQ1I0LkxBU1MgdmlhXFxuKyAqIEtWTV9TRVRfU1JFR1MgaXMgY292ZXJlZCBieSBzZXRfc3JlZ3NfdGVzdC5cXG4rICpcXG4rICogVGVzdGluZyBMQVNTIGVuZm9yY2VtZW50IHJlcXVpcmVzIHJ1bm5pbmcgc3VwZXJ2aXNvciBjb2RlIGluIHRoZVxcbisgKiB1cHBlciBoYWxmIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCB3aGljaCB0aGUgS1ZNIHNlbGZ0ZXN0cyBmcmFtZXdvcmtcXG4rICogZG9lc24ndCBzdXBwb3J0LiBFbmFibGluZyBDUjQuTEFTUyBpbiB0aGUgY3VycmVudCBmcmFtZXdvcmsgd291bGRcXG4rICogbWFrZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBmZXRjaCBhIHZpb2xhdGlvbiBhbmQgdHJpcGxlLWZhdWx0IHRoZVxcbisgKiBndWVzdC5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwcm9jZXNzb3IuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFdpdGhvdXQgTEFTUyBpbiBDUFVJRCwgYSBndWVzdCB3cml0ZSBtdXN0IGdlbmVyYXRlICNHUCB3aXRob3V0XFxuKyAqIGNoYW5naW5nIENSNC4gUmVzZXJ2ZWQgYml0cyBhcmUgb3duZWQgYnkgS1ZNIHNvIHRoZSB3cml0ZSBpc1xcbisgKiBndWFyYW50ZWVkIHRvIGV4aXQgdG8gS1ZNLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxcbit7XFxuK1xcdHU4IHZlY3RvcjtcXG4rXFxuK1xcdEdVRVNUX0FTU0VSVCghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTtcXG4rXFxuK1xcdHZlY3RvciA9IGt2bV9hc21fc2FmZShcXFwibW92ICVbY3I0XSwgJSVjcjRcXFwiLFxcbitcXHRcXHRcXHQgICAgICBbY3I0XSBcXFwiclxcXCIoZ2V0X2NyNCgpIHwgWDg2X0NSNF9MQVNTKSk7XFxuK1xcdF9fR1VFU1RfQVNTRVJUKHZlY3RvciA9PSBHUF9WRUNUT1IsXFxuK1xcdFxcdCAgICAgICBcXFwiV2FudGVkICNHUCBvbiBDUjQuTEFTUywgZ290ICVzXFxcIiwgZXhfc3RyKHZlY3RvcikpO1xcbitcXHRHVUVTVF9BU1NFUlQoIShnZXRfY3I0KCkgXFx1MDAyNiBYODZfQ1I0X0xBU1MpKTtcXG4rXFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xcbitcXHR2Y3B1X2NsZWFyX2NwdWlkX2ZlYXR1cmUodmNwdSwgWDg2X0ZFQVRVUkVfTEFTUyk7XFxuK1xcbitcXHR2Y3B1X3J1bih2Y3B1KTtcXG4rXFx0VEVTVF9BU1NFUlRfRVEoZ2V0X3VjYWxsKHZjcHUsIE5VTEwpLCBVQ0FMTF9ET05FKTtcXG4rXFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXFxuaW5kZXggNjAzMjI2ZmZlNDM3NC4uOGIzNzVmZWE4NGQwMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcXG5AQCAtNzIsNiArNzIsOCBAQCBzdGF0aWMgdTY0IGNhbGNfc3VwcG9ydGVkX2NyNF9mZWF0dXJlX2JpdHModm9pZClcXG4gXFx0XFx0Y3I0IHw9IFg4Nl9DUjRfU01BUDtcXG4gXFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BLVSkpXFxuIFxcdFxcdGNyNCB8PSBYODZfQ1I0X1BLRTtcXG4rXFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKVxcbitcXHRcXHRjcjQgfD0gWDg2X0NSNF9MQVNTO1xcbiBcXG4gXFx0cmV0dXJuIGNyNDtcXG4gfVxcbkBAIC0xMjgsNiArMTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNClcXG4gXFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfU01FUCk7XFxuIFxcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjQsIHNyZWdzLCBYODZfQ1I0X1NNQVApO1xcbiBcXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9QS0UpO1xcbitcXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9MQVNTKTtcXG4gXFxuIFxcdGZvciAoaSA9IDMyOyBpIFxcdTAwM2MgNjQ7IGkrKylcXG4gXFx0XFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIEJJVChpKSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9NYWtlZmlsZVxcbmluZGV4IDQzNDA2NTIxNWQxMjcuLjI1MmQ3NTdmYzFiMmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXFxuQEAgLTE5LDcgKzE5LDggQEAgVEFSR0VUU19DXzMyQklUX09OTFkgOj0gZW50cnlfZnJvbV92bTg2IHRlc3Rfc3lzY2FsbF92ZHNvIHVud2luZF92ZHNvIFxcXFxcXG4gXFx0XFx0XFx0dGVzdF9GQ01PViB0ZXN0X0ZDT01JIHRlc3RfRklTVFRQIFxcXFxcXG4gXFx0XFx0XFx0dmRzb19yZXN0b3JlclxcbiBUQVJHRVRTX0NfNjRCSVRfT05MWSA6PSBmc2dzYmFzZSBzeXNyZXRfcmlwIHN5c2NhbGxfbnVtYmVyaW5nIFxcXFxcXG4tXFx0XFx0XFx0Y29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweFxcbitcXHRcXHRcXHRjb3JydXB0X3hzdGF0ZV9oZWFkZXIgYW14IGxhbSB0ZXN0X3NoYWRvd19zdGFjayBhdnggYXB4IFxcXFxcXG4rXFx0XFx0XFx0bGFzc1xcbiAjIFNvbWUgc2VsZnRlc3RzIHJlcXVpcmUgMzJiaXQgc3VwcG9ydCBlbmFibGVkIGFsc28gb24gNjRiaXQgc3lzdGVtc1xcbiBUQVJHRVRTX0NfMzJCSVRfTkVFREVEIDo9IGxkdF9nZHQgcHRyYWNlX3N5c2NhbGxcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFzcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZGQzZGM4ZTQxZDFkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmNcXG5AQCAtMCwwICsxLDE5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBsYXNzLmMgLSBUZXN0IExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIGVuZm9yY2VtZW50XFxuKyAqXFxuKyAqIFdpdGggTEFTUyBlbmFibGVkLCBhIHVzZXItbW9kZSByZWFkLCB3cml0ZSBvciBpbnN0cnVjdGlvbiBmZXRjaCBhdCBhXFxuKyAqIGtlcm5lbCBhZGRyZXNzIHJhaXNlcyBhICNHUCBpbnN0ZWFkIG9mIHRoZSAjUEYgdGhhdCBTTUFQL1NNRVAgd291bGRcXG4rICogcHJvZHVjZS5cXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3Vjb250ZXh0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiaGVscGVycy5oXFxcIlxcbitcXG4rI2lmbmRlZiBfX3g4Nl82NF9fXFxuKyMgZXJyb3IgVGhpcyB0ZXN0IGlzIDY0LWJpdCBvbmx5XFxuKyNlbmRpZlxcbitcXG4rLypcXG4rICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsXFxuKyAqIGFkZHJlc3MgcmFpc2VzIHRoZSB2ZXJ5IHNhbWUgI0dQIGZvciBhIGRpZmZlcmVudCByZWFzb24sIHNvIHRoZVxcbisgKiBhZGRyZXNzIGhhcyB0byBiZSBjYW5vbmljYWwgdG8gYXR0cmlidXRlIHRoZSBmYXVsdCB0byBMQVNTLlxcbisgKlxcbisgKiBCaXRzIDYzOjQ3IGFyZSBhbGwgc2V0IGhlcmUsIHdoaWNoIGlzIGNhbm9uaWNhbCB3aXRoIDQtbGV2ZWwgcGFnaW5nXFxuKyAqIGFzIHdlbGwgYXMgNS1sZXZlbCBwYWdpbmcuXFxuKyAqL1xcbisjZGVmaW5lIEtFUk5FTF9BRERSXFx0MHhmZmZmODAwMDAwMDAwMDAwVUxcXG4rXFxuK3N0YXRpYyBzaWdqbXBfYnVmIGptcGJ1ZjtcXG4rXFxuK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGZhdWx0X3RyYXBubywgZmF1bHRfZXJyLCBmYXVsdF9yaXA7XFxuK1xcbisvKiBIYW5kbGUgU0lHU0VHViAoI0dQIGFuZCAjUEYpIGFzIHdlbGwgYXMgU0lHQlVTICgjU1MpICovXFxuK3N0YXRpYyB2b2lkIGZhdWx0X2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICppbmZvLCB2b2lkICpjdHhfdm9pZClcXG4re1xcbitcXHR1Y29udGV4dF90ICpjdHggPSAodWNvbnRleHRfdCAqKWN0eF92b2lkO1xcbitcXG4rXFx0ZmF1bHRfdHJhcG5vID0gY3R4LVxcdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfVFJBUE5PXTtcXG4rXFx0ZmF1bHRfZXJyID0gY3R4LVxcdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfRVJSXTtcXG4rXFx0ZmF1bHRfcmlwID0gY3R4LVxcdTAwM2V1Y19tY29udGV4dC5ncmVnc1tSRUdfUklQXTtcXG4rXFx0c2lnbG9uZ2ptcChqbXBidWYsIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyIGRlbGltc1tdID0gXFxcIiBcXFxcblxcXCI7XFxuK1xcdHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7XFxuK1xcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4rXFx0Y2hhciBsaW5lWzQwOTZdO1xcbitcXHRGSUxFICpjcHVpbmZvO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSB0aGUgY3B1aW5mbyBmbGFnIHJlZmxlY3RzIHdoZXRoZXIgdGhlIGtlcm5lbCBhY3R1YWxseVxcbitcXHQgKiBlbmFibGVkIExBU1MuXFxuK1xcdCAqL1xcbitcXHRjcHVpbmZvID0gZm9wZW4oXFxcIi9wcm9jL2NwdWluZm9cXFwiLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWNwdWluZm8pXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZmFpbGVkIHRvIG9wZW4gL3Byb2MvY3B1aW5mb1xcXFxuXFxcIik7XFxuK1xcbitcXHR3aGlsZSAoIWZvdW5kIFxcdTAwMjZcXHUwMDI2IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgY3B1aW5mbykpIHtcXG4rXFx0XFx0Y2hhciAqZmxhZztcXG4rXFxuK1xcdFxcdGlmIChzdHJuY21wKGxpbmUsIFxcXCJmbGFnc1xcXCIsIDUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIE1hdGNoIHdob2xlIHdvcmRzIG9ubHksIG5vdCBhIHN1YnN0cmluZyBvZiBhbm90aGVyIGZsYWcuICovXFxuK1xcdFxcdGZvciAoZmxhZyA9IHN0cnRvayhsaW5lLCBkZWxpbXMpOyBmbGFnOyBmbGFnID0gc3RydG9rKE5VTEwsIGRlbGltcykpIHtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoZmxhZywgXFxcImxhc3NcXFwiKSkge1xcbitcXHRcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGNwdWluZm8pO1xcbitcXG4rXFx0aWYgKGZvdW5kKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIENoZWNrIENQVUlELihFQVg9MDdILEVDWD0xKTpFQVguTEFTU1tiaXQgNl0gKi9cXG4rXFx0X19jcHVpZF9jb3VudCgweDcsIDB4MSwgZWF4LCBlYngsIGVjeCwgZWR4KTtcXG4rXFx0aWYgKGVheCBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIDYpKVxcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiTEFTUyBpcyBzdXBwb3J0ZWQgYnkgdGhlIENQVSBidXQgbm90IGVuYWJsZWQgYnkgdGhlIGtlcm5lbFxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qIEdlbmVyYWwgUHJvdGVjdGlvbiBGYXVsdCAodHJhcG5yLmggaXMgbm90IGV4cG9ydGVkIHRvIHVhcGkpICovXFxuKyNkZWZpbmUgWDg2X1RSQVBfR1BcXHQxM1xcbitcXG4rLyogQSBMQVNTIHZpb2xhdGlvbiByYWlzZXMgYSAjR1Agd2l0aCBhIG51bGwgZXJyb3IgY29kZS4gKi9cXG4rc3RhdGljIGJvb2wgaXNfbGFzc192aW9sYXRpb24odm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmF1bHRfdHJhcG5vID09IFg4Nl9UUkFQX0dQIFxcdTAwMjZcXHUwMDI2ICFmYXVsdF9lcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3JlYWQodm9pZClcXG4re1xcbitcXHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xcbitcXHRcXHQqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilLRVJORUxfQUREUjtcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCJ0aGUgcmVhZCBkaWQgbm90IGZhdWx0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXFxuK1xcdFxcdFxcdCBcXFwidGhlIHJlYWQgZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfd3JpdGUodm9pZClcXG4re1xcbitcXHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xcbitcXHRcXHQqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilLRVJORUxfQUREUiA9IDB4MWE1NTtcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCJ0aGUgd3JpdGUgZGlkIG5vdCBmYXVsdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChpc19sYXNzX3Zpb2xhdGlvbigpLFxcbitcXHRcXHRcXHQgXFxcInRoZSB3cml0ZSBmYXVsdGVkIHdpdGggdHJhcD0lbGQsIGVycm9yPTB4JWx4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIpO1xcbit9XFxuK1xcbisvKlxcbisgKiBVc2UgaW5saW5lIGFzbSByYXRoZXIgdGhhbiBhIGNhbGwgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXI6IGEgZGlyZWN0XFxuKyAqICdjYWxsIHJlbDMyJyBjYW5ub3QgcmVhY2ggYSBrZXJuZWwgYWRkcmVzcywgYW5kIGxldHRpbmcgdGhlIGNvbXBpbGVyIGxvd2VyXFxuKyAqIHRoZSBpbmRpcmVjdCBicmFuY2ggcmlza3Mgcm91dGluZyBpdCB0aHJvdWdoIGEgdGh1bmssIG9yIGVsaWRpbmcgaXRcXG4rICogYWx0b2dldGhlciwgZWl0aGVyIG9mIHdoaWNoIHdvdWxkIHN0b3AgdGVzdGluZyB0aGUgZmV0Y2guXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkb19mZXRjaCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiY2FsbCAqJVtmbl1cXFwiXFxuK1xcdFxcdCAgICAgIDogOiBbZm5dIFxcXCJyXFxcIiAoYWRkcilcXG4rXFx0XFx0ICAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJheFxcXCIsIFxcXCJyY3hcXFwiLCBcXFwicmR4XFxcIiwgXFxcInJzaVxcXCIsIFxcXCJyZGlcXFwiLFxcbitcXHRcXHRcXHRcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIiwgXFxcInIxMVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2tlcm5lbF9mZXRjaCh2b2lkKVxcbit7XFxuK1xcdGlmIChzaWdzZXRqbXAoam1wYnVmLCAxKSA9PSAwKSB7XFxuK1xcdFxcdGRvX2ZldGNoKEtFUk5FTF9BRERSKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEV4ZWN1dGlvbiByZXN1bWVkIGF0IGFuIHVua25vd24gcG9pbnQgd2l0aCBhbiB1bmRlZmluZWRcXG4rXFx0XFx0ICogcmVnaXN0ZXIgc3RhdGUsIHNvIGRvbid0IHRyeSB0byBydW4gdGhlIHJlc3Qgb2YgdGhlIHRlc3RzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJ0aGUgZmV0Y2ggcmV0dXJuZWQgd2l0aG91dCBmYXVsdGluZ1xcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJyYW5jaCBpbnN0cnVjdGlvbnMgZG8gbm90IGNoZWNrIHRoZWlyIHRhcmdldCBhZ2FpbnN0IExBU1MuIFRoZVxcbitcXHQgKiB2aW9sYXRpb24gaGFwcGVucyB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBpcyB1c2VkIHRvIGZldGNoIHRoZVxcbitcXHQgKiBuZXh0IGluc3RydWN0aW9uLCBzbyB0aGUgZmF1bHQgbXVzdCBiZSByZXBvcnRlZCBhdCB0aGUgdGFyZ2V0XFxuK1xcdCAqIHJhdGhlciB0aGFuIGF0IHRoZSBicmFuY2guXFxuK1xcdCAqL1xcbitcXHRpZiAoZmF1bHRfcmlwICE9IEtFUk5FTF9BRERSKSB7XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcXFwidGhlIGZldGNoIGZhdWx0ZWQgYXQgUklQIDB4JWx4IGluc3RlYWQgb2YgMHglbHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGZhdWx0X3JpcCwgKHVuc2lnbmVkIGxvbmcpS0VSTkVMX0FERFIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSxcXG4rXFx0XFx0XFx0IFxcXCJ0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGZhdWx0X3RyYXBubywgZmF1bHRfZXJyKTtcXG4rfVxcbitcXG4rI2RlZmluZSBUT1RBTF9URVNUUyAzXFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcbitcXHRpZiAoIWlzX2xhc3NfYWN0aXZlKCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJMQVNTIGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGtzZnRfc2V0X3BsYW4oVE9UQUxfVEVTVFMpO1xcbitcXG4rXFx0c2V0aGFuZGxlcihTSUdTRUdWLCBmYXVsdF9oYW5kbGVyLCAwKTtcXG4rXFx0LyogT25seSB0byByZXBvcnQgYSAjU1M7IExBU1Mgc2hvdWxkbid0IGNhdXNlIG9uZSBoZXJlLiAqL1xcbitcXHRzZXRoYW5kbGVyKFNJR0JVUywgZmF1bHRfaGFuZGxlciwgMCk7XFxuK1xcbitcXHRrc2Z0X3ByaW50X21zZyhcXFwiQWNjZXNzaW5nIHRoZSBrZXJuZWwgYWRkcmVzcyAweCVseCBmcm9tIHVzZXJzcGFjZVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgICh1bnNpZ25lZCBsb25nKUtFUk5FTF9BRERSKTtcXG4rXFx0dGVzdF9rZXJuZWxfcmVhZCgpO1xcbitcXHR0ZXN0X2tlcm5lbF93cml0ZSgpO1xcbitcXHR0ZXN0X2tlcm5lbF9mZXRjaCgpO1xcbitcXG4rXFx0Y2xlYXJoYW5kbGVyKFNJR0JVUyk7XFxuK1xcdGNsZWFyaGFuZGxlcihTSUdTRUdWKTtcXG4rXFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTozOS45MTQ1NTI5NzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NTcwNDg4OTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiWDg2X1NHWFwiLFxuICAgIFwiWDg2X1NHWF9LVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bXhfaXNfbGFzc192aW9sYXRpb25cIixcbiAgICBcImdldF92bXhfbWVtX2FkZHJlc3NcIixcbiAgICBcImt2bV9oYW5kbGVfaW52cGNpZFwiLFxuICAgIFwidm14X2dldF91bnRhZ2dlZF9hZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBpbiBLVk0gb24geDg2LiBJdCBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzRiMTg1ZDcwOWEwNmFmNzg4ZmQ3ZGE4MWY4ZjY4ZGIzMzY4ODYwNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDI6MTU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggZTIxM2M5YWUzZTMwMS4uYTgyYjIwMjgxZjMxYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xNDYsNiArMTQ2LDcgQEAgS1ZNX1g4Nl9PUChjb21wbGV0ZV9lbXVsYXRlZF9tc3IpXG4gS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoaXNfbGFzc192aW9sYXRpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWFrZV9wcml2YXRlKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAyODM4NDc2MTlmZjg4Li5kMjE4MWE4MDVhY2U0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE3MjcsNiArMTcyNyw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHR1bnNpZ25lZCBsb25nICgqdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4rXHRib29sICgqaXNfbGFzc192aW9sYXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBcdHZvaWQgKigqYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuIFx0aW50ICgqZ21lbV9tYWtlX3ByaXZhdGUpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IDllOWNmNjUzOGE5NmUuLmM0ZGJkMDBmNWU0ZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC0xMDI5LDYgKzEwMjksNyBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXG4gXHRcdEYoU000KSxcbiBcdFx0RihBVlhfVk5OSSksXG4gXHRcdEYoQVZYNTEyX0JGMTYpLFxuK1x0XHRYODZfNjRfRihMQVNTKSxcbiBcdFx0RihDTVBDQ1hBREQpLFxuIFx0XHRGKEZaUk0pLFxuIFx0XHRGKEZTUlMpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5pbmRleCA4MDcxYjM3MmQyMzNlLi45Y2JmZGU2NDkwNjQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuQEAgLTY3Miw3ICs2NzIsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0ICAgIChmbGFncyBcdTAwMjYgWDg2RU1VTF9GX1dSSVRFKSlcbiBcdFx0XHRnb3RvIGJhZDtcbiBcdFx0LyogdW5yZWFkYWJsZSBjb2RlIHNlZ21lbnQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IFg4NkVNVUxfRl9GRVRDSCkgXHUwMDI2XHUwMDI2IChkZXNjLnR5cGUgXHUwMDI2IDgpIFx1MDAyNlx1MDAyNiAhKGRlc2MudHlwZSBcdTAwMjYgMikpXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiAoWDg2RU1VTF9GX0ZFVENIIHwgWDg2RU1VTF9GX0JSQU5DSCkpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2ICEoZGVzYy50eXBlIFx1MDAyNiAyKSlcbiBcdFx0XHRnb3RvIGJhZDtcbiBcdFx0bGltID0gZGVzY19saW1pdF9zY2FsZWQoXHUwMDI2ZGVzYyk7XG4gXHRcdGlmICghKGRlc2MudHlwZSBcdTAwMjYgOCkgXHUwMDI2XHUwMDI2IChkZXNjLnR5cGUgXHUwMDI2IDQpKSB7XG5AQCAtNjkyLDYgKzY5MywxNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBMQVNTIGFuZCBjYW5vbmljYWxpdHkgY2hlY2tzIGdlbmVyYXRlIHRoZSBzYW1lIGZhdWx0IGFuZFxuK1x0ICogdGhlaXIgcmVsYXRpdmUgb3JkZXIgaXMgbm90IGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkLiBBbHNvLFxuK1x0ICogdGhlIFNETSBkb2Vzbid0IHByaW9yaXRpemUgTEFTUyB2aW9sYXRpb25zIGFnYWluc3RcbitcdCAqIGFsaWdubWVudC1jaGVjayBmYXVsdHMsIHNvIGFueSBvcmRlciBpcyBsZWdhbC5cbitcdCAqL1xuK1x0aWYgKGN0eHQtXHUwMDNlb3BzLVx1MDAzZWlzX2xhc3NfdmlvbGF0aW9uKGN0eHQsIGxhLCBzaXplLCBmbGFncykpXG4rXHRcdGdvdG8gYmFkO1xuK1xuIFx0aWYgKGxhIFx1MDAyNiAoaW5zbl9hbGlnbm1lbnQoY3R4dCwgc2l6ZSkgLSAxKSlcbiBcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbkBAIC03MjMsNyArNzM0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXNzaWduX2VpcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdWxvbmcgZHN0KVxuIFx0aWYgKGN0eHQtXHUwMDNlb3BfYnl0ZXMgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxuIFx0XHRhZGRyLmVhID0gZHN0IFx1MDAyNiAoKDFVTCBcdTAwM2NcdTAwM2MgKGN0eHQtXHUwMDNlb3BfYnl0ZXMgXHUwMDNjXHUwMDNjIDMpKSAtIDEpO1xuIFx0cmMgPSBfX2xpbmVhcml6ZShjdHh0LCBhZGRyLCBcdTAwMjZtYXhfc2l6ZSwgMSwgY3R4dC1cdTAwM2Vtb2RlLCBcdTAwMjZsaW5lYXIsXG4tXHRcdFx0IFg4NkVNVUxfRl9GRVRDSCk7XG4rXHRcdFx0IFg4NkVNVUxfRl9CUkFOQ0gpO1xuIFx0aWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpXG4gXHRcdGN0eHQtXHUwMDNlX2VpcCA9IGFkZHIuZWE7XG4gXHRyZXR1cm4gcmM7XG5AQCAtNzk4LDYgKzgwOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGptcF9yZWwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCByZWwpXG4gc3RhdGljIGludCBsaW5lYXJfcmVhZF9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVsb25nIGxpbmVhcixcbiBcdFx0XHQgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXplKVxuIHtcbitcdGlmIChjdHh0LVx1MDAzZW9wcy1cdTAwM2Vpc19sYXNzX3Zpb2xhdGlvbihjdHh0LCBsaW5lYXIsIHNpemUsIFg4NkVNVUxfRl9JTVBMSUNJVCkpXG4rXHRcdHJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApO1xuK1xuIFx0cmV0dXJuIGN0eHQtXHUwMDNlb3BzLVx1MDAzZXJlYWRfc3RkKGN0eHQsIGxpbmVhciwgZGF0YSwgc2l6ZSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24sIHRydWUpO1xuIH1cbiBcbkBAIC04MDUsNiArODE5LDEwIEBAIHN0YXRpYyBpbnQgbGluZWFyX3dyaXRlX3N5c3RlbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0XHQgICAgICAgdWxvbmcgbGluZWFyLCB2b2lkICpkYXRhLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4rXHRpZiAoY3R4dC1cdTAwM2VvcHMtXHUwMDNlaXNfbGFzc192aW9sYXRpb24oY3R4dCwgbGluZWFyLCBzaXplLFxuK1x0XHRcdFx0XHQgWDg2RU1VTF9GX0lNUExJQ0lUIHwgWDg2RU1VTF9GX1dSSVRFKSlcbitcdFx0cmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7XG4rXG4gXHRyZXR1cm4gY3R4dC1cdTAwM2VvcHMtXHUwMDNld3JpdGVfc3RkKGN0eHQsIGxpbmVhciwgZGF0YSwgc2l6ZSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24sIHRydWUpO1xuIH1cbiBcbkBAIC0yNTcyLDEyICsyNTkwLDEyIEBAIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdGJhc2UgfD0gKCh1NjQpYmFzZTMpIFx1MDAzY1x1MDAzYyAzMjtcbiAjZW5kaWZcbi1cdHIgPSBvcHMtXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSArIDEwMiwgXHUwMDI2aW9fYml0bWFwX3B0ciwgMiwgTlVMTCwgdHJ1ZSk7XG4rXHRyID0gbGluZWFyX3JlYWRfc3lzdGVtKGN0eHQsIGJhc2UgKyAxMDIsIFx1MDAyNmlvX2JpdG1hcF9wdHIsIDIpO1xuIFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKGlvX2JpdG1hcF9wdHIgKyBwb3J0LzggXHUwMDNlIGRlc2NfbGltaXRfc2NhbGVkKFx1MDAyNnRyX3NlZykpXG4rXHRpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCArIDEgXHUwMDNlIGRlc2NfbGltaXRfc2NhbGVkKFx1MDAyNnRyX3NlZykpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdHIgPSBvcHMtXHUwMDNlcmVhZF9zdGQoY3R4dCwgYmFzZSArIGlvX2JpdG1hcF9wdHIgKyBwb3J0LzgsIFx1MDAyNnBlcm0sIDIsIE5VTEwsIHRydWUpO1xuK1x0ciA9IGxpbmVhcl9yZWFkX3N5c3RlbShjdHh0LCBiYXNlICsgaW9fYml0bWFwX3B0ciArIHBvcnQvOCwgXHUwMDI2cGVybSwgMik7XG4gXHRpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoKHBlcm0gXHUwMDNlXHUwMDNlIGJpdF9pZHgpIFx1MDAyNiBtYXNrKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmYxMzZkM2QwYmE0MjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuKysrIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0xMDUsNiArMTA1LDcgQEAgc3RydWN0IHg4Nl9pbnN0cnVjdGlvbl9pbmZvIHtcbiAjZGVmaW5lIFg4NkVNVUxfRl9JTlZMUEdcdFx0QklUKDMpXG4gI2RlZmluZSBYODZFTVVMX0ZfTVNSXHRcdFx0QklUKDQpXG4gI2RlZmluZSBYODZFTVVMX0ZfRFRfTE9BRFx0XHRCSVQoNSlcbisjZGVmaW5lIFg4NkVNVUxfRl9CUkFOQ0hcdFx0QklUKDYpXG4gXG4gc3RydWN0IHg4Nl9lbXVsYXRlX29wcyB7XG4gXHR2b2lkICgqdm1fYnVnZ2VkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XG5AQCAtMjQ4LDcgKzI0OSw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMge1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLVxuK1x0Ym9vbCAoKmlzX2xhc3NfdmlvbGF0aW9uKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgZ3ZhX3QgYWRkcixcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXHRib29sICgqaXNfY2Fub25pY2FsX2FkZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmggYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5pbmRleCA0NDdmMGVjM2U2M2U0Li5iZTg2MjE2OTVjNDE5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuaFxuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxuQEAgLTI4LDcgKzI4LDcgQEAgc3RhdGljX2Fzc2VydCghKEtWTV9QT1NTSUJMRV9DUjBfR1VFU1RfQklUUyBcdTAwMjYgWDg2X0NSMF9QRFBUUl9CSVRTKSk7XG4gXHRcdFx0ICB8IFg4Nl9DUjRfT1NYU0FWRSB8IFg4Nl9DUjRfU01FUCB8IFg4Nl9DUjRfRlNHU0JBU0UgXFxcbiBcdFx0XHQgIHwgWDg2X0NSNF9PU1hNTUVYQ1BUIHwgWDg2X0NSNF9MQTU3IHwgWDg2X0NSNF9WTVhFIFxcXG4gXHRcdFx0ICB8IFg4Nl9DUjRfU01BUCB8IFg4Nl9DUjRfUEtFIHwgWDg2X0NSNF9VTUlQIFxcXG4tXHRcdFx0ICB8IFg4Nl9DUjRfTEFNX1NVUCB8IFg4Nl9DUjRfQ0VUKSlcbitcdFx0XHQgIHwgWDg2X0NSNF9MQU1fU1VQIHwgWDg2X0NSNF9DRVQgfCBYODZfQ1I0X0xBU1MpKVxuIFxuICNkZWZpbmUgQ1I4X1JFU0VSVkVEX0JJVFMgKH4odW5zaWduZWQgbG9uZylYODZfQ1I4X1RQUilcbiBcbkBAIC00MDUsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBib29sIF9fa3ZtX2lzX3ZhbGlkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuIFx0XHRfX3Jlc2VydmVkX2JpdHMgfD0gWDg2X0NSNF9QQ0lERTsgICAgICAgXFxcbiBcdGlmICghX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfTEFNKSkgICAgICAgICAgIFxcXG4gXHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0xBTV9TVVA7ICAgICBcXFxuK1x0aWYgKCFfX2NwdV9oYXMoX19jLCBYODZfRkVBVFVSRV9MQVNTKSkgICAgICAgICAgXFxcbitcdFx0X19yZXNlcnZlZF9iaXRzIHw9IFg4Nl9DUjRfTEFTUzsgICAgICAgIFxcXG4gXHRpZiAoIV9fY3B1X2hhcyhfX2MsIFg4Nl9GRUFUVVJFX1NIU1RLKSBcdTAwMjZcdTAwMjYgICAgICAgXFxcbiBcdCAgICAhX19jcHVfaGFzKF9fYywgWDg2X0ZFQVRVUkVfSUJUKSkgICAgICAgICAgIFxcXG4gXHRcdF9fcmVzZXJ2ZWRfYml0cyB8PSBYODZfQ1I0X0NFVDsgICAgICAgICBcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDBmZjMyMzBmZDk1ZTguLjM1ODBhYWRhOGQyYzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xMDMxLDYgKzEwMzEsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LnZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvciA9IGt2bV92Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IsXG4gXG4gXHQuZ2V0X3VudGFnZ2VkX2FkZHIgPSB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIsXG4rXHQuaXNfbGFzc192aW9sYXRpb24gPSB2bXhfaXNfbGFzc192aW9sYXRpb24sXG4gXG4gXHQubWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KG1lbV9lbmNfaW9jdGwpLFxuIFx0LnZjcHVfbWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY19pb2N0bCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDdlZDc5ODk0ZDExZDIuLjYxY2YyMGNjNDcwNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTI5OSwxMSArNTI5OSwxMiBAQCBpbnQgZ2V0X3ZteF9tZW1fYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxuIFx0XHRcdCpyZXQgPSBvZmY7XG4gXG4gXHRcdCpyZXQgPSB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIodmNwdSwgKnJldCwgMCk7XG4tXHRcdC8qIExvbmcgbW9kZTogI0dQKDApLyNTUygwKSBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgaXMgaW4gYVxuLVx0XHQgKiBub24tY2Fub25pY2FsIGZvcm0uIFRoaXMgaXMgdGhlIG9ubHkgY2hlY2sgb24gdGhlIG1lbW9yeVxuLVx0XHQgKiBkZXN0aW5hdGlvbiBmb3IgbG9uZyBtb2RlIVxuK1x0XHQvKlxuK1x0XHQgKiBMb25nIG1vZGU6ICNHUCgwKS8jU1MoMCkgaWYgdGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIGFcbitcdFx0ICogbm9uLWNhbm9uaWNhbCBmb3JtLCBvciBpZiB0aGUgYWNjZXNzIHZpb2xhdGVzIExBU1MuXG4gXHRcdCAqL1xuLVx0XHRleG4gPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqcmV0LCB2Y3B1LCAwKTtcbitcdFx0ZXhuID0gaXNfbm9uY2Fub25pY2FsX2FkZHJlc3MoKnJldCwgdmNwdSwgMCkgfHxcbitcdFx0ICAgICAgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHZjcHUsICpyZXQsIGxlbiwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIG5vdCBpbiBsb25nIG1vZGUsIHRoZSB2aXJ0dWFsL2xpbmVhciBhZGRyZXNzIGlzXG5AQCAtNjEwOCw3ICs2MTA5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodHlwZSAhPSBWTVhfVlBJRF9FWFRFTlRfQUxMX0NPTlRFWFQgXHUwMDI2XHUwMDI2ICFvcGVyYW5kLnZwaWQpXG4gXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX0lOVkFMSURfT1BFUkFORF9UT19JTlZFUFRfSU5WVlBJRCk7XG4gXG4tXHQvKiBMQU0gZG9lc24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQiBpbnZhbGlkYXRpb24uICovXG4rXHQvKiBMQU0gYW5kIExBU1MgZG9uJ3QgYXBwbHkgdG8gYWRkcmVzc2VzIHRoYXQgYXJlIGlucHV0cyB0byBUTEIgaW52YWxpZGF0aW9uLiAqL1xuIFx0aWYgKHR5cGUgPT0gVk1YX1ZQSURfRVhURU5UX0lORElWSURVQUxfQUREUiBcdTAwMjZcdTAwMjZcbiBcdCAgICBpc19ub25jYW5vbmljYWxfaW52bHBnX2FkZHJlc3Mob3BlcmFuZC5nbGEsIHZjcHUpKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9JTlZBTElEX09QRVJBTkRfVE9fSU5WRVBUX0lOVlZQSUQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvc2d4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3NneC5jXG5pbmRleCA3NzFjNzVhNTgzNDM2Li40YWMzMDVlZDZkZWExIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9zZ3guY1xuQEAgLTM5LDcgKzM5LDggQEAgc3RhdGljIGludCBzZ3hfZ2V0X2VuY2xzX2d2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuIFx0XHRmYXVsdCA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKGxpa2VseShpc182NF9iaXRfbW9kZSh2Y3B1KSkpIHtcbiBcdFx0Kmd2YSA9IHZteF9nZXRfdW50YWdnZWRfYWRkcih2Y3B1LCAqZ3ZhLCAwKTtcbi1cdFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKTtcbitcdFx0ZmF1bHQgPSBpc19ub25jYW5vbmljYWxfYWRkcmVzcygqZ3ZhLCB2Y3B1LCAwKSB8fFxuK1x0XHRcdHZteF9pc19sYXNzX3Zpb2xhdGlvbih2Y3B1LCAqZ3ZhLCBzaXplLCAwKTtcbiBcdH0gZWxzZSB7XG4gXHRcdCpndmEgXHUwMDI2PSAweGZmZmZmZmZmO1xuIFx0XHRmYXVsdCA9IChzLnVudXNhYmxlKSB8fFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBlM2JmZTZhY2ExYTBlLi4zMDgyMTk1OTA2ZGE4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTc4ODUsNiArNzg4NSw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdGVudHJ5ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnlfaW5kZXgodmNwdSwgMHg3LCAxKTtcbiBcdGNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFNX1NVUCwgICAgZWF4LCBmZWF0dXJlX2JpdChMQU0pKTtcbitcdGNyNF9maXhlZDFfdXBkYXRlKFg4Nl9DUjRfTEFTUywgICAgICAgZWF4LCBmZWF0dXJlX2JpdChMQVNTKSk7XG4gXG4gI3VuZGVmIGNyNF9maXhlZDFfdXBkYXRlXG4gfVxuQEAgLTg1NzEsNyArODU3Miw4IEBAIGd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzXG4gXHRpbnQgbGFtX2JpdDtcbiBcdHVuc2lnbmVkIGxvbmcgY3IzX2JpdHM7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IChYODZFTVVMX0ZfRkVUQ0ggfCBYODZFTVVMX0ZfSU1QTElDSVQgfCBYODZFTVVMX0ZfSU5WTFBHKSlcbitcdGlmIChmbGFncyBcdTAwMjYgKFg4NkVNVUxfRl9GRVRDSCB8IFg4NkVNVUxfRl9CUkFOQ0ggfCBYODZFTVVMX0ZfSU1QTElDSVQgfFxuK1x0XHQgICAgIFg4NkVNVUxfRl9JTlZMUEcpKVxuIFx0XHRyZXR1cm4gZ3ZhO1xuIFxuIFx0aWYgKCFpc182NF9iaXRfbW9kZSh2Y3B1KSlcbkBAIC04NjAzLDYgKzg2MDUsNTMgQEAgZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3NcbiBcdHJldHVybiAoc2lnbl9leHRlbmQ2NChndmEsIGxhbV9iaXQpIFx1MDAyNiB+QklUX1VMTCg2MykpIHwgKGd2YSBcdTAwMjYgQklUX1VMTCg2MykpO1xuIH1cbiBcbitib29sIHZteF9pc19sYXNzX3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdGNvbnN0IGJvb2wgaXNfc3VwZXJ2aXNvcl9hZGRyZXNzID0gISEoZ3ZhIFx1MDAyNiBCSVRfVUxMKDYzKSk7XG4rXHRjb25zdCBib29sIGltcGxpY2l0X3N1cGVydmlzb3IgPSAhIShmbGFncyBcdTAwMjYgWDg2RU1VTF9GX0lNUExJQ0lUKTtcbitcdGNvbnN0IGJvb2wgZmV0Y2ggPSAhIShmbGFncyBcdTAwMjYgWDg2RU1VTF9GX0ZFVENIKTtcbitcbitcdGlmICgha3ZtX2lzX2NyNF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjRfTEFTUykgfHwgIWlzX2xvbmdfbW9kZSh2Y3B1KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIElOVkxQRyBpc24ndCBzdWJqZWN0IHRvIExBU1MsIGUuZy4gdG8gYWxsb3cgaW52YWxpZGF0aW5nIHVzZXJzcGFjZVxuK1x0ICogYWRkcmVzc2VzIHdpdGhvdXQgdG9nZ2xpbmcgUkZMQUdTLkFDLiAgQnJhbmNoIHRhcmdldHMgYXJlbid0IHN1YmplY3RcbitcdCAqIHRvIExBU1MgaW4gb3JkZXIgdG8gc2ltcGxpZnkgZmFyIGNvbnRyb2wgdHJhbnNmZXJzICh0aGUgc3Vic2VxdWVudFxuK1x0ICogZmV0Y2ggd2lsbCBlbmZvcmNlIExBU1MgYXMgYXBwcm9wcmlhdGUpLlxuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IChYODZFTVVMX0ZfQlJBTkNIIHwgWDg2RU1VTF9GX0lOVkxQRykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghaW1wbGljaXRfc3VwZXJ2aXNvciBcdTAwMjZcdTAwMjYgdm14X2dldF9jcGwodmNwdSkgPT0gMylcbitcdFx0cmV0dXJuIGlzX3N1cGVydmlzb3JfYWRkcmVzcztcbitcbitcdC8qXG4rXHQgKiBMQVNTIGVuZm9yY2VtZW50IGZvciBzdXBlcnZpc29yLW1vZGUgZGF0YSBhY2Nlc3NlcyBkZXBlbmRzIG9uIFNNQVBcbitcdCAqIGJlaW5nIGVuYWJsZWQsIGFuZCBsaWtlIFNNQVAgaWdub3JlcyBleHBsaWNpdCBhY2Nlc3NlcyBpZiBSRkxBR1MuQUM9MS5cbitcdCAqL1xuK1x0aWYgKCFmZXRjaCkge1xuK1x0XHRpZiAoIWt2bV9pc19jcjRfYml0X3NldCh2Y3B1LCBYODZfQ1I0X1NNQVApKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aWYgKCFpbXBsaWNpdF9zdXBlcnZpc29yIFx1MDAyNlx1MDAyNiAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgXHUwMDI2IFg4Nl9FRkxBR1NfQUMpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgZW50aXJlIGFjY2VzcyBtdXN0IGJlIGluIHRoZSBhcHByb3ByaWF0ZSBhZGRyZXNzIHNwYWNlLiAgTm90ZSxcbitcdCAqIGlmIExBTSBpcyBzdXBwb3J0ZWQsIEBndmEgaGFzIGFscmVhZHkgYmVlbiB1bnRhZ2dlZCwgc28gYmFycmluZyBhXG4rXHQgKiBtYXNzaXZlIGFyY2hpdGVjdHVyZSBjaGFuZ2UgdG8gZXhwYW5kIHRoZSBjYW5vbmljYWwgYWRkcmVzcyByYW5nZSxcbitcdCAqIGl0J3MgaW1wb3NzaWJsZSBmb3IgYSB1c2VyIGFjY2VzcyB0byBzdHJhZGRsZSB1c2VyIGFuZCBzdXBlcnZpc29yXG4rXHQgKiBhZGRyZXNzIHNwYWNlcy5cbitcdCAqL1xuK1x0aWYgKHNpemUgXHUwMDI2XHUwMDI2ICEoKGd2YSArIHNpemUgLSAxKSBcdTAwMjYgQklUX1VMTCg2MykpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiAhaXNfc3VwZXJ2aXNvcl9hZGRyZXNzO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgaW50IHZteF9oYW5kbGVfaW50ZWxfcHRfaW50cih2b2lkKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbmluZGV4IGRjODUxN2YxNWJjNDYuLjQzZGY3MjVhNzdmMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5AQCAtMzk3LDYgKzM5Nyw5IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFxuK2Jvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxuK1x0XHRcdCAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1xuIHZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggZDk0YjU5MTQwYzQ1Mi4uYTZlYTczNmZkNDhmYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTgwMCw2ICs1ODAwLDEyIEBAIHN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdFx0XHRcdFx0ICAgICAgIGFkZHIsIGZsYWdzKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGd2YV90IGFkZHIsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKGlzX2xhc3NfdmlvbGF0aW9uKShlbXVsX3RvX3ZjcHUoY3R4dCksIGFkZHIsIHNpemUsIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZW11bGF0b3JfaXNfY2Fub25pY2FsX2FkZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRcdFx0XHQgICAgICAgZ3ZhX3QgYWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC01ODU5LDYgKzU4NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcbiBcdC5nZXRfeGNyICAgICAgICAgICAgID0gZW11bGF0b3JfZ2V0X3hjcixcbiBcdC5zZXRfeGNyICAgICAgICAgICAgID0gZW11bGF0b3Jfc2V0X3hjcixcbiBcdC5nZXRfdW50YWdnZWRfYWRkciAgID0gZW11bGF0b3JfZ2V0X3VudGFnZ2VkX2FkZHIsXG4rXHQuaXNfbGFzc192aW9sYXRpb24gICA9IGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uLFxuIFx0LmlzX2Nhbm9uaWNhbF9hZGRyICAgPSBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcixcbiBcdC5wYWdlX2FkZHJlc3NfdmFsaWQgID0gZW11bGF0b3JfcGFnZV9hZGRyZXNzX3ZhbGlkLFxuIH07XG5AQCAtMTA3NDUsNyArMTA3NTIsNyBAQCBpbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiBcdGNhc2UgSU5WUENJRF9UWVBFX0lORElWX0FERFI6XG4gXHRcdC8qXG4tXHRcdCAqIExBTSBkb2Vzbid0IGFwcGx5IHRvIGFkZHJlc3NlcyB0aGF0IGFyZSBpbnB1dHMgdG8gVExCXG4rXHRcdCAqIExBTSBhbmQgTEFTUyBkb24ndCBhcHBseSB0byBhZGRyZXNzZXMgdGhhdCBhcmUgaW5wdXRzIHRvIFRMQlxuIFx0XHQgKiBpbnZhbGlkYXRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoKCFwY2lkX2VuYWJsZWQgXHUwMDI2XHUwMDI2IChvcGVyYW5kLnBjaWQgIT0gMCkpIHx8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDAwMTIzMTY5YTE5MGEuLjg2ZmE5M2UwZjZjMDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtOTEsNiArOTEsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fcHZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2J1c2xvY2tfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvbGFzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9tb25pdG9yX213YWl0X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L21zcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCA2ZTZmNzAwMzU1MDhhLi5mNDI1MTY2MTc0ZjlmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbkBAIC03OSw2ICs3OSw3IEBAIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKTtcbiAjZGVmaW5lIFg4Nl9DUjRfU01FUFx0XHQoMXVsIFx1MDAzY1x1MDAzYyAyMClcbiAjZGVmaW5lIFg4Nl9DUjRfU01BUFx0XHQoMXVsIFx1MDAzY1x1MDAzYyAyMSlcbiAjZGVmaW5lIFg4Nl9DUjRfUEtFXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDIyKVxuKyNkZWZpbmUgWDg2X0NSNF9MQVNTXHRcdCgxdWwgXHUwMDNjXHUwMDNjIDI3KVxuIFxuIHN0cnVjdCB4c3RhdGVfaGVhZGVyIHtcbiBcdHU2NFx0XHRcdFx0eHN0YXRlX2J2O1xuQEAgLTE5NSw2ICsxOTYsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9jcHVfZmVhdHVyZSB7XG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfU1BFQ19DVFJMXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHg3LCAwLCBFRFgsIDI2KVxuICNkZWZpbmVcdFg4Nl9GRUFUVVJFX0FSQ0hfQ0FQQUJJTElUSUVTXHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRURYLCAyOSlcbiAjZGVmaW5lXHRYODZfRkVBVFVSRV9QS1NcdFx0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4NywgMCwgRUNYLCAzMSlcbisjZGVmaW5lXHRYODZfRkVBVFVSRV9MQVNTXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHg3LCAxLCBFQVgsIDYpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfWFRJTEVDRkdcdFx0S1ZNX1g4Nl9DUFVfRkVBVFVSRSgweEQsIDAsIEVBWCwgMTcpXG4gI2RlZmluZVx0WDg2X0ZFQVRVUkVfWFRJTEVEQVRBXHRcdEtWTV9YODZfQ1BVX0ZFQVRVUkUoMHhELCAwLCBFQVgsIDE4KVxuICNkZWZpbmVcdFg4Nl9GRUFUVVJFX1hTQVZFU1x0XHRLVk1fWDg2X0NQVV9GRUFUVVJFKDB4RCwgMSwgRUFYLCAzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbGFzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2xhc3NfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2M1Y2ZhMjRjMmJkZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9sYXNzX3Rlc3QuY1xuQEAgLTAsMCArMSw1NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSB0ZXN0XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uLlxuKyAqXG4rICogT25seSB0ZXN0IHRoYXQgdGhlIGd1ZXN0IGNhbid0IHNldCBDUjQuTEFTUyB3aGVuIExBU1MgaXNuJ3RcbisgKiBlbnVtZXJhdGVkIGluIHRoZSBndWVzdCdzIENQVUlELiAgS1ZNJ3MgaGFuZGxpbmcgb2YgQ1I0LkxBU1MgdmlhXG4rICogS1ZNX1NFVF9TUkVHUyBpcyBjb3ZlcmVkIGJ5IHNldF9zcmVnc190ZXN0LlxuKyAqXG4rICogVGVzdGluZyBMQVNTIGVuZm9yY2VtZW50IHJlcXVpcmVzIHJ1bm5pbmcgc3VwZXJ2aXNvciBjb2RlIGluIHRoZVxuKyAqIHVwcGVyIGhhbGYgb2YgdGhlIGFkZHJlc3Mgc3BhY2UsIHdoaWNoIHRoZSBLVk0gc2VsZnRlc3RzIGZyYW1ld29ya1xuKyAqIGRvZXNuJ3Qgc3VwcG9ydC4gRW5hYmxpbmcgQ1I0LkxBU1MgaW4gdGhlIGN1cnJlbnQgZnJhbWV3b3JrIHdvdWxkXG4rICogbWFrZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBmZXRjaCBhIHZpb2xhdGlvbiBhbmQgdHJpcGxlLWZhdWx0IHRoZVxuKyAqIGd1ZXN0LlxuKyAqL1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rXG4rLypcbisgKiBXaXRob3V0IExBU1MgaW4gQ1BVSUQsIGEgZ3Vlc3Qgd3JpdGUgbXVzdCBnZW5lcmF0ZSAjR1Agd2l0aG91dFxuKyAqIGNoYW5naW5nIENSNC4gUmVzZXJ2ZWQgYml0cyBhcmUgb3duZWQgYnkgS1ZNIHNvIHRoZSB3cml0ZSBpc1xuKyAqIGd1YXJhbnRlZWQgdG8gZXhpdCB0byBLVk0uXG4rICovXG4rc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuK3tcbitcdHU4IHZlY3RvcjtcbitcbitcdEdVRVNUX0FTU0VSVCghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0xBU1MpKTtcbitcbitcdHZlY3RvciA9IGt2bV9hc21fc2FmZShcIm1vdiAlW2NyNF0sICUlY3I0XCIsXG4rXHRcdFx0ICAgICAgW2NyNF0gXCJyXCIoZ2V0X2NyNCgpIHwgWDg2X0NSNF9MQVNTKSk7XG4rXHRfX0dVRVNUX0FTU0VSVCh2ZWN0b3IgPT0gR1BfVkVDVE9SLFxuK1x0XHQgICAgICAgXCJXYW50ZWQgI0dQIG9uIENSNC5MQVNTLCBnb3QgJXNcIiwgZXhfc3RyKHZlY3RvcikpO1xuK1x0R1VFU1RfQVNTRVJUKCEoZ2V0X2NyNCgpIFx1MDAyNiBYODZfQ1I0X0xBU1MpKTtcbitcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcbitcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9MQVNTKSk7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuK1x0dmNwdV9jbGVhcl9jcHVpZF9mZWF0dXJlKHZjcHUsIFg4Nl9GRUFUVVJFX0xBU1MpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xuaW5kZXggNjAzMjI2ZmZlNDM3NC4uOGIzNzVmZWE4NGQwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5AQCAtNzIsNiArNzIsOCBAQCBzdGF0aWMgdTY0IGNhbGNfc3VwcG9ydGVkX2NyNF9mZWF0dXJlX2JpdHModm9pZClcbiBcdFx0Y3I0IHw9IFg4Nl9DUjRfU01BUDtcbiBcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9QS1UpKVxuIFx0XHRjcjQgfD0gWDg2X0NSNF9QS0U7XG4rXHRpZiAoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEFTUykpXG4rXHRcdGNyNCB8PSBYODZfQ1I0X0xBU1M7XG4gXG4gXHRyZXR1cm4gY3I0O1xuIH1cbkBAIC0xMjgsNiArMTMwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNClcbiBcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjQsIHNyZWdzLCBYODZfQ1I0X1NNRVApO1xuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfU01BUCk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I0LCBzcmVncywgWDg2X0NSNF9QS0UpO1xuK1x0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyNCwgc3JlZ3MsIFg4Nl9DUjRfTEFTUyk7XG4gXG4gXHRmb3IgKGkgPSAzMjsgaSBcdTAwM2MgNjQ7IGkrKylcbiBcdFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIEJJVChpKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXG5pbmRleCA0MzQwNjUyMTVkMTI3Li4yNTJkNzU3ZmMxYjJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvTWFrZWZpbGVcbkBAIC0xOSw3ICsxOSw4IEBAIFRBUkdFVFNfQ18zMkJJVF9PTkxZIDo9IGVudHJ5X2Zyb21fdm04NiB0ZXN0X3N5c2NhbGxfdmRzbyB1bndpbmRfdmRzbyBcXFxuIFx0XHRcdHRlc3RfRkNNT1YgdGVzdF9GQ09NSSB0ZXN0X0ZJU1RUUCBcXFxuIFx0XHRcdHZkc29fcmVzdG9yZXJcbiBUQVJHRVRTX0NfNjRCSVRfT05MWSA6PSBmc2dzYmFzZSBzeXNyZXRfcmlwIHN5c2NhbGxfbnVtYmVyaW5nIFxcXG4tXHRcdFx0Y29ycnVwdF94c3RhdGVfaGVhZGVyIGFteCBsYW0gdGVzdF9zaGFkb3dfc3RhY2sgYXZ4IGFweFxuK1x0XHRcdGNvcnJ1cHRfeHN0YXRlX2hlYWRlciBhbXggbGFtIHRlc3Rfc2hhZG93X3N0YWNrIGF2eCBhcHggXFxcbitcdFx0XHRsYXNzXG4gIyBTb21lIHNlbGZ0ZXN0cyByZXF1aXJlIDMyYml0IHN1cHBvcnQgZW5hYmxlZCBhbHNvIG9uIDY0Yml0IHN5c3RlbXNcbiBUQVJHRVRTX0NfMzJCSVRfTkVFREVEIDo9IGxkdF9nZHQgcHRyYWNlX3N5c2NhbGxcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhc3MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkZDNkYzhlNDFkMWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYXNzLmNcbkBAIC0wLDAgKzEsMTk2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGxhc3MuYyAtIFRlc3QgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgZW5mb3JjZW1lbnRcbisgKlxuKyAqIFdpdGggTEFTUyBlbmFibGVkLCBhIHVzZXItbW9kZSByZWFkLCB3cml0ZSBvciBpbnN0cnVjdGlvbiBmZXRjaCBhdCBhXG4rICoga2VybmVsIGFkZHJlc3MgcmFpc2VzIGEgI0dQIGluc3RlYWQgb2YgdGhlICNQRiB0aGF0IFNNQVAvU01FUCB3b3VsZFxuKyAqIHByb2R1Y2UuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWNvbnRleHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiaGVscGVycy5oXCJcbitcbisjaWZuZGVmIF9feDg2XzY0X19cbisjIGVycm9yIFRoaXMgdGVzdCBpcyA2NC1iaXQgb25seVxuKyNlbmRpZlxuK1xuKy8qXG4rICogTEFTUyByZWplY3RzIGFuIGFkZHJlc3MgYmFzZWQgb24gYml0IDYzIGFsb25lLCBidXQgYSBub24tY2Fub25pY2FsXG4rICogYWRkcmVzcyByYWlzZXMgdGhlIHZlcnkgc2FtZSAjR1AgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiwgc28gdGhlXG4rICogYWRkcmVzcyBoYXMgdG8gYmUgY2Fub25pY2FsIHRvIGF0dHJpYnV0ZSB0aGUgZmF1bHQgdG8gTEFTUy5cbisgKlxuKyAqIEJpdHMgNjM6NDcgYXJlIGFsbCBzZXQgaGVyZSwgd2hpY2ggaXMgY2Fub25pY2FsIHdpdGggNC1sZXZlbCBwYWdpbmdcbisgKiBhcyB3ZWxsIGFzIDUtbGV2ZWwgcGFnaW5nLlxuKyAqL1xuKyNkZWZpbmUgS0VSTkVMX0FERFJcdDB4ZmZmZjgwMDAwMDAwMDAwMFVMXG4rXG4rc3RhdGljIHNpZ2ptcF9idWYgam1wYnVmO1xuK1xuK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGZhdWx0X3RyYXBubywgZmF1bHRfZXJyLCBmYXVsdF9yaXA7XG4rXG4rLyogSGFuZGxlIFNJR1NFR1YgKCNHUCBhbmQgI1BGKSBhcyB3ZWxsIGFzIFNJR0JVUyAoI1NTKSAqL1xuK3N0YXRpYyB2b2lkIGZhdWx0X2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICppbmZvLCB2b2lkICpjdHhfdm9pZClcbit7XG4rXHR1Y29udGV4dF90ICpjdHggPSAodWNvbnRleHRfdCAqKWN0eF92b2lkO1xuK1xuK1x0ZmF1bHRfdHJhcG5vID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19UUkFQTk9dO1xuK1x0ZmF1bHRfZXJyID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19FUlJdO1xuK1x0ZmF1bHRfcmlwID0gY3R4LVx1MDAzZXVjX21jb250ZXh0LmdyZWdzW1JFR19SSVBdO1xuK1x0c2lnbG9uZ2ptcChqbXBidWYsIDEpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19sYXNzX2FjdGl2ZSh2b2lkKVxuK3tcbitcdHN0YXRpYyBjb25zdCBjaGFyIGRlbGltc1tdID0gXCIgXFxuXCI7XG4rXHR1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4O1xuK1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1x0Y2hhciBsaW5lWzQwOTZdO1xuK1x0RklMRSAqY3B1aW5mbztcbitcbitcdC8qXG4rXHQgKiBPbmx5IHRoZSBjcHVpbmZvIGZsYWcgcmVmbGVjdHMgd2hldGhlciB0aGUga2VybmVsIGFjdHVhbGx5XG4rXHQgKiBlbmFibGVkIExBU1MuXG4rXHQgKi9cbitcdGNwdWluZm8gPSBmb3BlbihcIi9wcm9jL2NwdWluZm9cIiwgXCJyXCIpO1xuK1x0aWYgKCFjcHVpbmZvKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJmYWlsZWQgdG8gb3BlbiAvcHJvYy9jcHVpbmZvXFxuXCIpO1xuK1xuK1x0d2hpbGUgKCFmb3VuZCBcdTAwMjZcdTAwMjYgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBjcHVpbmZvKSkge1xuK1x0XHRjaGFyICpmbGFnO1xuK1xuK1x0XHRpZiAoc3RybmNtcChsaW5lLCBcImZsYWdzXCIsIDUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBNYXRjaCB3aG9sZSB3b3JkcyBvbmx5LCBub3QgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBmbGFnLiAqL1xuK1x0XHRmb3IgKGZsYWcgPSBzdHJ0b2sobGluZSwgZGVsaW1zKTsgZmxhZzsgZmxhZyA9IHN0cnRvayhOVUxMLCBkZWxpbXMpKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoZmxhZywgXCJsYXNzXCIpKSB7XG4rXHRcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGZjbG9zZShjcHVpbmZvKTtcbitcbitcdGlmIChmb3VuZClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBDaGVjayBDUFVJRC4oRUFYPTA3SCxFQ1g9MSk6RUFYLkxBU1NbYml0IDZdICovXG4rXHRfX2NwdWlkX2NvdW50KDB4NywgMHgxLCBlYXgsIGVieCwgZWN4LCBlZHgpO1xuK1x0aWYgKGVheCBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIDYpKVxuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkxBU1MgaXMgc3VwcG9ydGVkIGJ5IHRoZSBDUFUgYnV0IG5vdCBlbmFibGVkIGJ5IHRoZSBrZXJuZWxcXG5cIik7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qIEdlbmVyYWwgUHJvdGVjdGlvbiBGYXVsdCAodHJhcG5yLmggaXMgbm90IGV4cG9ydGVkIHRvIHVhcGkpICovXG4rI2RlZmluZSBYODZfVFJBUF9HUFx0MTNcbitcbisvKiBBIExBU1MgdmlvbGF0aW9uIHJhaXNlcyBhICNHUCB3aXRoIGEgbnVsbCBlcnJvciBjb2RlLiAqL1xuK3N0YXRpYyBib29sIGlzX2xhc3NfdmlvbGF0aW9uKHZvaWQpXG4re1xuK1x0cmV0dXJuIGZhdWx0X3RyYXBubyA9PSBYODZfVFJBUF9HUCBcdTAwMjZcdTAwMjYgIWZhdWx0X2Vycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfcmVhZCh2b2lkKVxuK3tcbitcdGlmIChzaWdzZXRqbXAoam1wYnVmLCAxKSA9PSAwKSB7XG4rXHRcdCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUtFUk5FTF9BRERSO1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCJ0aGUgcmVhZCBkaWQgbm90IGZhdWx0XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXG4rXHRcdFx0IFwidGhlIHJlYWQgZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcblwiLFxuK1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfa2VybmVsX3dyaXRlKHZvaWQpXG4re1xuK1x0aWYgKHNpZ3NldGptcChqbXBidWYsIDEpID09IDApIHtcbitcdFx0Kih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopS0VSTkVMX0FERFIgPSAweDFhNTU7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcInRoZSB3cml0ZSBkaWQgbm90IGZhdWx0XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGlzX2xhc3NfdmlvbGF0aW9uKCksXG4rXHRcdFx0IFwidGhlIHdyaXRlIGZhdWx0ZWQgd2l0aCB0cmFwPSVsZCwgZXJyb3I9MHglbHhcXG5cIixcbitcdFx0XHQgZmF1bHRfdHJhcG5vLCBmYXVsdF9lcnIpO1xuK31cbitcbisvKlxuKyAqIFVzZSBpbmxpbmUgYXNtIHJhdGhlciB0aGFuIGEgY2FsbCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcjogYSBkaXJlY3RcbisgKiAnY2FsbCByZWwzMicgY2Fubm90IHJlYWNoIGEga2VybmVsIGFkZHJlc3MsIGFuZCBsZXR0aW5nIHRoZSBjb21waWxlciBsb3dlclxuKyAqIHRoZSBpbmRpcmVjdCBicmFuY2ggcmlza3Mgcm91dGluZyBpdCB0aHJvdWdoIGEgdGh1bmssIG9yIGVsaWRpbmcgaXRcbisgKiBhbHRvZ2V0aGVyLCBlaXRoZXIgb2Ygd2hpY2ggd291bGQgc3RvcCB0ZXN0aW5nIHRoZSBmZXRjaC5cbisgKi9cbitzdGF0aWMgdm9pZCBkb19mZXRjaCh1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcImNhbGwgKiVbZm5dXCJcbitcdFx0ICAgICAgOiA6IFtmbl0gXCJyXCIgKGFkZHIpXG4rXHRcdCAgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJheFwiLCBcInJjeFwiLCBcInJkeFwiLCBcInJzaVwiLCBcInJkaVwiLFxuK1x0XHRcdFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLCBcInIxMVwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9rZXJuZWxfZmV0Y2godm9pZClcbit7XG4rXHRpZiAoc2lnc2V0am1wKGptcGJ1ZiwgMSkgPT0gMCkge1xuK1x0XHRkb19mZXRjaChLRVJORUxfQUREUik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEV4ZWN1dGlvbiByZXN1bWVkIGF0IGFuIHVua25vd24gcG9pbnQgd2l0aCBhbiB1bmRlZmluZWRcbitcdFx0ICogcmVnaXN0ZXIgc3RhdGUsIHNvIGRvbid0IHRyeSB0byBydW4gdGhlIHJlc3Qgb2YgdGhlIHRlc3RzLlxuK1x0XHQgKi9cbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwidGhlIGZldGNoIHJldHVybmVkIHdpdGhvdXQgZmF1bHRpbmdcXG5cIik7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQnJhbmNoIGluc3RydWN0aW9ucyBkbyBub3QgY2hlY2sgdGhlaXIgdGFyZ2V0IGFnYWluc3QgTEFTUy4gVGhlXG4rXHQgKiB2aW9sYXRpb24gaGFwcGVucyB3aGVuIHRoZSB0YXJnZXQgYWRkcmVzcyBpcyB1c2VkIHRvIGZldGNoIHRoZVxuK1x0ICogbmV4dCBpbnN0cnVjdGlvbiwgc28gdGhlIGZhdWx0IG11c3QgYmUgcmVwb3J0ZWQgYXQgdGhlIHRhcmdldFxuK1x0ICogcmF0aGVyIHRoYW4gYXQgdGhlIGJyYW5jaC5cbitcdCAqL1xuK1x0aWYgKGZhdWx0X3JpcCAhPSBLRVJORUxfQUREUikge1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCJ0aGUgZmV0Y2ggZmF1bHRlZCBhdCBSSVAgMHglbHggaW5zdGVhZCBvZiAweCVseFxcblwiLFxuK1x0XHRcdFx0ICAgICAgZmF1bHRfcmlwLCAodW5zaWduZWQgbG9uZylLRVJORUxfQUREUik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGtzZnRfdGVzdF9yZXN1bHQoaXNfbGFzc192aW9sYXRpb24oKSxcbitcdFx0XHQgXCJ0aGUgZmV0Y2ggZmF1bHRlZCB3aXRoIHRyYXA9JWxkLCBlcnJvcj0weCVseFxcblwiLFxuK1x0XHRcdCBmYXVsdF90cmFwbm8sIGZhdWx0X2Vycik7XG4rfVxuK1xuKyNkZWZpbmUgVE9UQUxfVEVTVFMgM1xuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcbitcdGlmICghaXNfbGFzc19hY3RpdmUoKSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJMQVNTIGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1xuK1x0a3NmdF9zZXRfcGxhbihUT1RBTF9URVNUUyk7XG4rXG4rXHRzZXRoYW5kbGVyKFNJR1NFR1YsIGZhdWx0X2hhbmRsZXIsIDApO1xuK1x0LyogT25seSB0byByZXBvcnQgYSAjU1M7IExBU1Mgc2hvdWxkbid0IGNhdXNlIG9uZSBoZXJlLiAqL1xuK1x0c2V0aGFuZGxlcihTSUdCVVMsIGZhdWx0X2hhbmRsZXIsIDApO1xuK1xuK1x0a3NmdF9wcmludF9tc2coXCJBY2Nlc3NpbmcgdGhlIGtlcm5lbCBhZGRyZXNzIDB4JWx4IGZyb20gdXNlcnNwYWNlXFxuXCIsXG4rXHRcdCAgICAgICAodW5zaWduZWQgbG9uZylLRVJORUxfQUREUik7XG4rXHR0ZXN0X2tlcm5lbF9yZWFkKCk7XG4rXHR0ZXN0X2tlcm5lbF93cml0ZSgpO1xuK1x0dGVzdF9rZXJuZWxfZmV0Y2goKTtcbitcbitcdGNsZWFyaGFuZGxlcihTSUdCVVMpO1xuK1x0Y2xlYXJoYW5kbGVyKFNJR1NFR1YpO1xuK1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE1OjM5LjkxNDU1NDYwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MDU2Nzc4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTEFTUyBTdXBwb3J0IGluIEtWTTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCdzIGFsbCBhYm91dCBicmluZ2luZyBMaW5lYXIgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uIChMQVNTKSBzdXBwb3J0IGludG8gS1ZNIG9uIHg4Ni4gVGhpcyBpc24ndCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IEtWTSBoYW5kbGVzIGFkZHJlc3Mgc3BhY2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIHNwcmF3bGluZyBhY3Jvc3MgYSBwcmV0dHkgZXh0ZW5zaXZlIHJhbmdlIG9mIGZpbGVzLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gbG9naWMuIFdlJ3JlIHRhbGtpbmcgaGVhZGVyIGZpbGVzLCB0aGUgQ1BVSUQgaGFuZGxpbmcsIHRoZSBlbXVsYXRvciwgcmVnaXN0ZXIgaGFuZGxpbmcsIGFuZCBWTVgtc3BlY2lmaWMgY29kZSDigJMgZXZlbiB0aGUgc2VsZnRlc3RzIGFyZSBpbnZvbHZlZCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIGFkZGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyB3aWxsIGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExBU1MgZmVhdHVyZSBpcyBiZWluZyBpbnRyb2R1Y2VkIGFuZCB3aGF0IHRoZSBlbXVsYXRvciBkb2VzIHdoZW4gdGhlcmUncyBhbiBMQVNTIHZpb2xhdGlvbi4gSXQgbG9va3MgbGlrZSBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIGlzIGFkZGluZyB0aGUgYFg4Nl82NF9GKExBU1MpYCBDUFUgZmVhdHVyZSBmbGFnLCB3aGljaCBpcyB0aGUgYmFzZWxpbmUuIFxuXG5JJ20gemVyb2luZyBpbiBvbiBmdW5jdGlvbnMgbGlrZSBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYCwgYF9fa3ZtX2lzX3ZhbGlkX2NyNGAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGhhbmRsZV9pbnZ2cGlkYCwgYHNneF9nZXRfZW5jbHNfZ3ZhYCwgYG5lc3RlZF92bXhfY3JfZml4ZWQxX2JpdHNfdXBkYXRlYCwgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAsIGFuZCB0aGUgbmV3IGZ1bmN0aW9ucyBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBhbmQgYGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uYCBhcyB0aGUga2V5IGFyZWFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCBhbHNvIHdoYXQgYGt2bV9oYW5kbGVfaW52cGNpZGAgZG9lcyBoZXJlLlxuXG5UaGUga2V5IHF1ZXN0aW9ucyBoZXJlIGFyZTpcblxuMS4gIEhvdyBpcyB0aGUgTEFTUyBmZWF0dXJlIGV4cG9zZWQgdG8gdGhlIGd1ZXN0P1xuMi4gIEhvdyBhcmUgTEFTUyB2aW9sYXRpb25zIGRldGVjdGVkIGFuZCBoYW5kbGVkP1xuMy4gIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGVtdWxhdG9yIGFuZCB0aGUgVk1YIGNvZGUgaW4gZGVhbGluZyB3aXRoIExBU1MgaXNzdWVzP1xuNC4gIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgU0dYP1xuXG5JdCBsb29rcyBsaWtlIHRoZSBgY3R4dC1cdTAwM2VvcHMtXHUwMDNlaXNfbGFzc192aW9sYXRpb25gIGZsYWcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRoZSBlbXVsYXRpb24gbG9naWMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIHN0cnVjdHVyZSwgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoZSBidWlsZCBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMuIFRoZSBmaWxlIGxvY2F0aW9ucyBpbmRpY2F0ZSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IGNyaXRpY2FsIGRlcGVuZGVuY3ksIG9yIGlmIG1vcmUgZ3JhbnVsYXIgS1ZNIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHNob3VsZCBjb25maXJtIHRoYXQsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byBnZXQgYWxsIHRoZSBwaWVjZXMgZm9yIGl0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6NDguNTIwMjM0ODAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTk4ODU3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTo0OS43MjAxMzM1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzgwMDUwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AsIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3NneC5jYC4gR2l2ZW4gdGhhdCB0aGVzZSBmaWxlcyBsaXZlIHdpdGhpbiB0aGUgYHZteGAgZGlyZWN0b3J5LCB0aGF0IHNjcmVhbXMgSW50ZWwgVk1YIG1vZGlmaWNhdGlvbnMsIHJpZ2h0PyBUaGVyZWZvcmUsIGBLVk1fSU5URUxgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIEFuZCBzaW5jZSBgYXJjaC94ODYva3ZtL3ZteC9zZ3guY2AgaXMgaW5jbHVkZWQsIEknZCB3YWdlciBgWDg2X1NHWF9LVk1gIHdpbGwgYmUgbmVlZGVkIHRvby4gQnV0IGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBieSBleGFtaW5pbmcgYGFyY2gveDg2L2t2bS92bXgvc2d4LmNgIHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBsb3ctbGV2ZWwgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6NTMuMTU4MTQyMzc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzU4OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYODZfU0dYX0tWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTU6NTMuMjI1OTA2MDg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwOTM2MTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBLVk0vVk1YL1NHWCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBLVk0vVk1YL1NHWCBpbnRlZ3JhdGlvbiBzcGVjaWZpY2FsbHkuIExldCdzIHN0YXJ0IHdpdGggYSBwcmFjdGljYWwgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGZpbGVzIGFyZSBidWlsdCBhbmQgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGFyY2gveDg2L2t2bS92bXhgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyBgc2d4LmNgIGlzIGhhbmRsZWQgaW4gdGhhdCBtYWtlIGZpbGUuIEtub3dpbmcgaG93IHRoZSBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIHRoYXQgZmlsZSBpcyBsaWtlbHkgdG8gcmV2ZWFsIGEgbG90IGFib3V0IGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVk1YIGNvbXBvbmVudHMgYW5kIHRoZSBvdmVyYWxsIGtlcm5lbCBhcmNoaXRlY3R1cmUuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNTo1Ni4xMzUyNzA2NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMTk5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2d4XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MTc9a3ZtLWludGVsLXlcXHRcXHQrPSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xOS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjA6a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMS1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE1OjU2LjIxNTQ5NzE4M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU4ODQ4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYODZfU0dYX0tWTSBDb21waWxhdGlvbioqXG5cblJpZ2h0LCBzbyB0byBjb21waWxlIGBhcmNoL3g4Ni9rdm0vdm14L3NneC5jYCwgSSBkZWZpbml0ZWx5IG5lZWQgdGhlIGBYODZfU0dYX0tWTWAgZGVmaW5lLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIHdoZXJlIGVsc2UgbWlnaHQgdGhpcyBjb21lIGludG8gcGxheT8gV2hlcmUgaXMgaXQgdXNlZCBvciByZWxhdGVkPyBMZXQncyBxdWlja2x5IGNoZWNrIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYC4gVGhhdCBmaWxlIG9mdGVuIGhhbmRsZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgc28gaXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFzIHRvIHRoZSBjb250ZXh0IGFuZCBmbG93IGFyb3VuZCB0aGVzZSBTR1ggaW50ZXJhY3Rpb25zLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSByZWxhdGVkIGVtdWxhdGlvbiBsb2dpYywgb3IgcGVyaGFwcyBjaGVja3MgdGhhdCBhcmUgZ292ZXJuZWQgYnkgdGhhdCBkZWZpbmUuIEl0J3MgYSBzZW5zaWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjAwLjA2MTM4NTgyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3NjcyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTY9aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS03LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo4Omt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtOS1cXHRcXHRcXHQgICBtdHJyLm8gZGVidWdmcy5vIG1tdS9tbXUubyBtbXUvcGFnZV90cmFjay5vIG1tdS9zcHRlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MDAuMTI2MTYxMDI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTAzNTUzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEtWTWAgYW5kIGBLVk1fSU5URUxgIGFyZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZsYWdzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBMZXQncyBzZWUsIHdoaWNoIG9uZXMgc3RhbmQgb3V0IGFzIGNydWNpYWw/IEkndmUgZ290IGEgZGVjZW50IGxpc3Q6XG5cbiogICBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIOKAkyBUaGlzIHNvdW5kcyBjcml0aWNhbCBmb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQuXG4qICAgVGhlbiBhIGJ1bmNoIG9mICpzdGF0aWMqIGZ1bmN0aW9ucywgdGhvc2UgdGhhdCBzZWVtIGludGVybmFsbHktc2NvcGVkLCBsaWtlOiBgX19saW5lYXJpemVgLCBgYXNzaWduX2VpcGAsIGBsaW5lYXJfcmVhZF9zeXN0ZW1gLCBgbGluZWFyX3dyaXRlX3N5c3RlbWAsIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYCwgYF9fa3ZtX2lzX3ZhbGlkX2NyNGAsIGBoYW5kbGVfaW52dnBpZGAsIGBzZ3hfZ2V0X2VuY2xzX2d2YWAsIGBuZXN0ZWRfdm14X2NyX2ZpeGVkMV9iaXRzX3VwZGF0ZWAgYW5kIGBlbXVsYXRvcl9pc19sYXNzX3Zpb2xhdGlvbmAuXG4qICAgQW5kIHRoZW4gc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvbmVzIHRvbywgbGlrZSBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCwgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBrdm1faGFuZGxlX2ludnBjaWRgXG5cbk5vdywgbGV0J3MgZmlsdGVyIG91dCBhbGwgdGhlIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbGVhdmVzIG1lIHdpdGggdGhlIGZvbGxvd2luZyBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBjYWxsZWQgZnJvbSBlbHNld2hlcmU6XG5cbiogICBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgXG4qICAgYGdldF92bXhfbWVtX2FkZHJlc3NgXG4qICAgYHZteF9nZXRfdW50YWdnZWRfYWRkcmBcbiogICBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYFxuKiAgIGBrdm1faGFuZGxlX2ludnBjaWRgXG5cbk9rYXksIEkgdGhpbmsgYGdldF92bXhfbWVtX2FkZHJlc3NgIGlzIHdvcnRoIGZvY3VzaW5nIG9uLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCBpdCBpbiB0aGUgYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGZpbGUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjA1LjgxNjUxODMzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MDk4ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF92bXhfbWVtX2FkZHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUyMjM9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF90cmlwbGVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjM0LSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTIzNTppbnQgZ2V0X3ZteF9tZW1fYWRkcmVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTIzNi1cXHRcXHRcXHR1MzIgdm14X2luc3RydWN0aW9uX2luZm8sIGJvb2wgd3IsIGludCBsZW4sIGd2YV90ICpyZXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUzNjE9c3RhdGljIGludCBuZXN0ZWRfdm14X2dldF92bXB0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICp2bXBvaW50ZXIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUzNjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MzY4OlxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2OS1cXHRcXHRcXHRcXHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NjU2PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3MjUtXFx0XFx0bGVuID0gaXNfNjRfYml0X21vZGUodmNwdSkgPyA4IDogNDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU3MjY6XFx0XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNy1cXHRcXHRcXHRcXHRcXHRpbnN0cl9pbmZvLCB0cnVlLCBsZW4sIFxcdTAwMjZndmEpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NzYyPXN0YXRpYyBpbnQgaGFuZGxlX3Ztd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01Nzk5LVxcdFxcdGxlbiA9IGlzXzY0X2JpdF9tb2RlKHZjcHUpID8gOCA6IDQ7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODAwOlxcdFxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4MDEtXFx0XFx0XFx0XFx0XFx0aW5zdHJfaW5mbywgZmFsc2UsIGxlbiwgXFx1MDAyNmd2YSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NTM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5NjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTY4OlxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5NjktXFx0XFx0XFx0XFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXFx1MDAyNmd2YSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5ODE9c3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjAxNS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYwMTY6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE3LVxcdFxcdFxcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2Z3ZhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjA2MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZ2cGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjA5OC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYwOTk6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTAwLVxcdFxcdFxcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2Z3ZhKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MDUuOTIwNjIxMTk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDk1NzQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBWTVggTWVtb3J5IEFkZHJlc3MqKlxuXG5Pa2F5LCBzbyBgZ2V0X3ZteF9tZW1fYWRkcmVzc2Agc2VlbXMgbGlrZSBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGhlcmUuIFRoYXQncyBhIHNvbGlkIGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIE5vdywgd2hlcmUgZG9lcyBpdCBmaXQgd2l0aGluIHRoZSBicm9hZGVyIFZNWCBjb250ZXh0PyBSaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGB2bXhfaXNfbGFzc192aW9sYXRpb25gIGZ1bmN0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lJ3MgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AuIExldCdzIGRpdmUgaW4gYW5kIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHBvdGVudGlhbCBtZW1vcnkgYWRkcmVzcyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTYxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MDkuMDcwMTk4MzU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ4MTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfaXNfbGFzc192aW9sYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC92bXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg1NzA9Z3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg2MDctXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NjA4OmJvb2wgdm14X2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwOS1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjowOS4xMzA2ODQ0NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MzMxMjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBLVk0gSW52cGNpZCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCBpcyBvbiBteSByYWRhciBhcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24g4oCTIHRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBOb3csIEknbSB0aGlua2luZywgbGV0J3MgZGl2ZSBpbnRvIGBrdm1faGFuZGxlX2ludnBjaWRgIGJlY2F1c2UgaXQncyB0aGUgdXN1YWwgc3VzcGVjdCBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgSW52YWxpZGF0ZSBQcm9jZXNzLUNvbnRleHQgSWRlbnRpZmllciAoSU5WUENJRCkgaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBzdWJ0bGUsIGV4cGxvaXRhYmxlIGZsYXcuIFdlIG5lZWQgdG8gY2hlY2sgZXZlcnl0aGluZzogdGhlIGhhbmRsaW5nIG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVk1YIGNvZGUsIGFueSByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgaW52YWxpZCBvciBtYWxpY2lvdXMgaW5wdXQgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5OTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjoxMi4zOTQwMDE3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjE2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9oYW5kbGVfaW52cGNpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTEwNzI2PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faGFuZGxlX21lbW9yeV9mYWlsdXJlKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MjctXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzI4OmludCBrdm1faGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHR5cGUsIGd2YV90IGd2YSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3Mjkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODA0LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA4MDU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfaW52cGNpZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjoxMi41MTgyMjI3NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyOTI5NjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBLVk0ncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gS1ZNLiBJJ3ZlIGJlZW4gY29uc2lkZXJpbmcgYGt2bV9oYW5kbGVfaW52cGNpZGAsIGFuZCBJIHRoaW5rIHRoYXQncyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlIGZ1cnRoZXIuIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdGhlIFRMQiBpbnZhbGlkYXRpb24sIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHNlZSB3aGF0IGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgIGlzIGFsbCBhYm91dC4gVW5kZXJzdGFuZGluZyBob3cgYWRkcmVzc2VzIGFyZSBoYW5kbGVkLCBhbmQgcGFydGljdWxhcmx5IHRoZSB1bnRhZ2dlZCBvbmVzLCBpcyBsaWtlbHkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZWVwZXIgd29ya2luZ3Mgb2YgdGhlIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ3kuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTA3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MTUuNjQ3NTIxNjU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzE4MzAxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfZ2V0X3VudGFnZ2VkX2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC92bXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg1NTY9dm9pZCB2bXhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg1NjktICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NTcwOmd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjE1LjcyNDcyMjE2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3Njc1OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIEtWTSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgS1ZNIGluaXRpYWxpemF0aW9uLCBhbmQgYSBrZXkgYXJlYSBpcyBob3cgd2UgaGFuZGxlIG1lbW9yeSBhZGRyZXNzZXMuIEkndmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucyBpbnZvbHZlZC4gYHZteF9nZXRfdW50YWdnZWRfYWRkcmAgaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUgaW4gdGhpcyBhcmVhOyBpdCdzIGdvdCBhIHNvbGlkIHJlcHV0YXRpb24uIE5vdywgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYC4gSXQncyBjcnVjaWFsIHdlIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNhcGFiaWxpdGllcyB3ZSdyZSBzZXR0aW5nIHVwIGZvciB0aGUgdmlydHVhbCBDUFVzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uIFRoYXQgZnVuY3Rpb24gbGlrZWx5IHRpZXMgaW50byBjcml0aWNhbCBhc3BlY3RzIG9mIGd1ZXN0LWhvc3QgaW50ZXJhY3Rpb25zIGFuZCBwZXJmb3JtYW5jZS4gTmVlZCB0byBlbnN1cmUgd2UncmUgZ2V0dGluZyB0aG9zZSBDUFUgY2FwYWJpbGl0aWVzIHNldCBjb3JyZWN0bHkgZnJvbSB0aGUgZ2V0IGdvISBJJ2xsIGRpdmUgaW50byBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIGFuZCBzZWUgd2hhdCBpdCBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjE4Ljc1MjQwMDk3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NTE3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2luaXRpYWxpemVfY3B1X2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2NwdWlkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2NwdWlkLmM9NzMzPWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy04MzUtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6ODM2OnZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy04Mzcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTMxMy19XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTMxNDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2luaXRpYWxpemVfY3B1X2NhcHMpO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTEzMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjE4LjgyMDg1NzI3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4Mjc3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRnV6emluZyBUYXJnZXRzKipcblxuUmlnaHQsIHNvIGBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwc2AgaXMgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIHBoYXNlLiBUaGF0IG1lYW5zIGl04oCZcyBwcmV0dHkgbXVjaCBhIG9uZS1zaG90IGRlYWwuIERvZXNuJ3Qgc2VlbSBsaWtlIHRoZSBiZXN0IHBsYWNlIHRvIHNpbmsgcmVzb3VyY2VzIGludG8gZnV6emluZy4gQSBzaW5nbGUgY2FsbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdXN1YWxseSBpc24ndCBmcnVpdGZ1bCBmb3IgdGhlIHR5cGUgb2YgaXRlcmF0aXZlIHRlc3RpbmcgSSdtIGFmdGVyLCB3aGVyZSBJIGNhbiByZXBlYXRlZGx5IGhhbW1lciB0aGUgZnVuY3Rpb24gd2l0aCBkaWZmZXJlbnQgaW5wdXRzIGFuZCBzZWUgaG93IGl0IHJlc3BvbmRzLlxuXG5JbnN0ZWFkLCBsZXQncyBwaXZvdCBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBzb21ldGhpbmcgZWxzZS4gTm93LCB3aGVyZSB0byBsb29rPyBBbHJpZ2h0LCBJJ3ZlIGdvdCBpdC4gSSdsbCB0YWtlIGEgbG9vayBhdCBgZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25gIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0IHNvdW5kcyBhIGJpdCBtb3JlIHByb21pc2luZyBmb3IgYSBwb3RlbnRpYWwgZnV6emluZyBjYW1wYWlnbi4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbidzIGRvaW5nIGFuZCBpZiBpdCdzIGdvdCB0aGUgcmlnaHQgY2hhcmFjdGVyaXN0aWNzIHRvIGJlbmVmaXQgZnJvbSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjIyLjQ2OTEzNzUzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MTY3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01NzkzPXN0YXRpYyBndmFfdCBlbXVsYXRvcl9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODAyLVxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODAzOnN0YXRpYyBib29sIGVtdWxhdG9yX2lzX2xhc3NfdmlvbGF0aW9uKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBndmFfdCBhZGRyLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODA0LVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU4MjA9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg2Ny1cXHQuZ2V0X3VudGFnZ2VkX2FkZHIgICA9IGVtdWxhdG9yX2dldF91bnRhZ2dlZF9hZGRyLFxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODY4OlxcdC5pc19sYXNzX3Zpb2xhdGlvbiAgID0gZW11bGF0b3JfaXNfbGFzc192aW9sYXRpb24sXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjktXFx0LmlzX2Nhbm9uaWNhbF9hZGRyICAgPSBlbXVsYXRvcl9pc19jYW5vbmljYWxfYWRkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MjIuNTI0NzYwOTEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODIwMzMzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBTdGF0aWMgTGFuZHNjYXBlKipcblxuT2theSwgdGhpcyBmZWVscyBzdGF0aWMuIE15IGZvY3VzIG5lZWRzIHRvIGJlIGxhc2VyLXNoYXJwIG9uIHRoZXNlIGZ1bmN0aW9uczogYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAsIGBnZXRfdm14X21lbV9hZGRyZXNzYCwgYGt2bV9oYW5kbGVfaW52cGNpZGAsIGFuZCBgdm14X2dldF91bnRhZ2dlZF9hZGRyYC4gVGhleSBhcmUgdGhlIGxpa2VseSBjdWxwcml0cy5cblxuQmVmb3JlIEkgZGlnIGludG8gdGhvc2UgZGVlcGx5LCBsZXQncyBlc3RhYmxpc2ggdGhlIGJyb2FkZXIgY29udGV4dC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIHNlZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgWDg2X1NHWF9LVk1gIGZsYWdnZWQuIEludGVyZXN0aW5nLiBCZXlvbmQgdGhvc2UsIGFyZSB0aGVyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcz8gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoZSBgWDg2X1NHWF9LVk1gIGRlcGVuZGVuY2llcyBpbW1lZGlhdGVseS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTk4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjI1LjkwNjc5NjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTM5MDY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWDg2X1NHWF9LVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTA3PWNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMjI6Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIzLVxcdGJvb2wgXFxcIlNvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjI2LjAxNjE5MjE0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODM4NDM2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBYODZfU0dYX0tWTWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBgWDg2X1NHWF9LVk1gIGNvbmNlcHQuIE15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCB0ZWxscyBtZSB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgZmFzY2luYXRpbmcgaW50ZXJzZWN0aW9uLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHBpY3R1cmluZyB0aGUgY29tcGxleGl0aWVzIG9mIFNlY3VyZSBlbmNsYXZlcyAoU0dYKSBydW5uaW5nIHdpdGhpbiBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgZW52aXJvbm1lbnQsIG9uIGFuIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGltbWVuc2UsIGFuZCB0aGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyBhcmUgZXF1YWxseSBpbnRlcmVzdGluZy4gSSBpbWFnaW5lIHRoZXJlJ3MgYSBkZWxpY2F0ZSBkYW5jZSBoYXBwZW5pbmcgYmV0d2VlbiBoYXJkd2FyZS1sZXZlbCBzZWN1cml0eSBmZWF0dXJlcyBhbmQgdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGVuY2xhdmVzIGFyZSBpc29sYXRlZCwgaG93IHRoZXkgY29tbXVuaWNhdGUgd2l0aCB0aGUgVk0sIGFuZCB3aGF0IHRoZSBhdHRhY2sgc3VyZmFjZSBsb29rcyBsaWtlIGluIHRoaXMgY29uZmlndXJhdGlvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uPyBPciBhIG1vcmUgaW50ZWdyYXRlZCBhcHByb2FjaD8gV2hhdCBhcmUgdGhlIGtleSBwZXJmb3JtYW5jZSBtZXRyaWNzIHRoZXkncmUgbGlrZWx5IGZvY3VzaW5nIG9uPyBMYXRlbmN5LCB0aHJvdWdocHV0LCBlbmNsYXZlIHN3aXRjaGluZyBvdmVyaGVhZC4uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZGVlcCBkaXZlLiBJJ20gZXhjaXRlZCB0byBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MzAuODU0NjMyNTMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIxOlxcdFxcbiAxMjI6XFx0Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuIDEyMzpcXHRcXHRib29sIFxcXCJTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpIFZpcnR1YWxpemF0aW9uXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbiAxMjU6XFx0XFx0aGVscFxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXFxcInJhd1xcXCIgdW5yZWNsYWltYWJsZSBlbmNsYXZlIG1lbW9yeSB0b1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjozMC44NTQ3MzAyODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NTgyNTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBZGRpbmcgQW5vdGhlciBQaWVjZSB0byB0aGUgUHV6emxlOiBYODZfU0dYKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJlcXVpcmVtZW50cywgdGhlIGFyY2hpdGVjdHVyZS4uLiBhbmQgaXQncyBiZWNvbWluZyBjbGVhciB0aGF0IGBYODZfU0dYYCBpcyBhbHNvIGEgY3JpdGljYWwgY29tcG9uZW50IGhlcmUuIEkndmUgYmVlbiB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGN1cnJlbnQgZGVzaWduIGFuZCBpdCdzIGFwcGFyZW50IHRoYXQgd2UgY2FuJ3QgaWdub3JlIHRoZSBuZWVkIGZvciBzZWN1cmUgZW5jbGF2ZXMuIFdpdGhvdXQgYFg4Nl9TR1hgLCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHdlJ3JlIGxlYXZpbmcgYSBnYXBpbmcgaG9sZSBpbiBvdXIgc2VjdXJpdHkgbW9kZWwuIFdlIG1pZ2h0IGJlIGFibGUgdG8gZmluZCBhIHN1aXRhYmxlIHNvZnR3YXJlLWJhc2VkIGFsdGVybmF0aXZlLCBidXQgdGhhdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uLiBXZSBtdXN0IGhhdmUgYSBoYXJkd2FyZS1lbmZvcmNlZCB0cnVzdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gVGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogaW5jbHVkaW5nIHRoaXMgYXJlIGp1c3QgdG9vIHNpZ25pZmljYW50IHRvIG92ZXJsb29rLiBXZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMsIHRoZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGV4aXN0aW5nIGNvZGUgYmFzZSwgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgd2l0aCB0aGlzIGluIG1pbmQuIEl0J3Mgbm90IGp1c3QgYSBuaWNlLXRvLWhhdmU7IGl0J3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgdGhlIGtpbmQgb2Ygcm9idXN0IHNlY3VyaXR5IGd1YXJhbnRlZXMgd2UncmUgYWltaW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjM0LjUwMDU1ODE0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYwNDEwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9TR1hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4MjU9ZW5kY2hvaWNlXFxuYXJjaC94ODYvS2NvbmZpZy0xODI2LVxcbmFyY2gveDg2L0tjb25maWc6MTgyNzpjb25maWcgWDg2X1NHWFxcbmFyY2gveDg2L0tjb25maWctMTgyOC1cXHRib29sIFxcXCJTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjozNC42MDY2MDM0OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4ODU0MTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGBYODZfU0dYYCBkZXBlbmRlbmNpZXM6XG5cbioqTXkgTWVudGFsIENoZWNrbGlzdCBmb3IgeDg2X1NHWCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5wYWNrIHRoZSB3b3JsZCBvZiBkZXBlbmRlbmNpZXMgZm9yIGBYODZfU0dYYC4gRmlyc3QsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGhhcmR3YXJlIGxldmVsLiBXZSdyZSB0YWxraW5nIEludGVsJ3MgYXJjaGl0ZWN0dXJlIGhlcmUsIHNvIHRoZSBmaXJzdCB0aG91Z2h0IGlzIHRoZSAqQ1BVIHN1cHBvcnQgaXRzZWxmKi4gSXQncyBub3QganVzdCBhYm91dCBoYXZpbmcgYW4geDg2IHByb2Nlc3NvcjsgaXQgbmVlZHMgdG8gYmUgKnNwZWNpZmljKiB4ODYgd2l0aCBTR1ggZW5hYmxlZC4gVGhhdCBpbXBsaWVzIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcHJvY2Vzc29yJ3MgZ2VuZXJhdGlvbiBhbmQgbWljcm9hcmNoaXRlY3R1cmUgYXMgZnVuZGFtZW50YWwuIEkgc2hvdWxkIGJlIG5vdGluZyB0aGUgc3BlY2lmaWMgQ1BVIG1vZGVscyBzdXBwb3J0ZWQgYW5kIGFueSBrbm93biBsaW1pdGF0aW9ucyBvZiBlYWNoLlxuXG5OZXh0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlICpTREsqLCBhbmQgdGhlIGFzc29jaWF0ZWQgZHJpdmVycyBhbmQgbGlicmFyaWVzLiBJdCdzIG5vdCBqdXN0IHRoZSBTREsncyBwcmVzZW5jZSwgYnV0IGl0cyB2ZXJzaW9uLiBIb3cgZG9lcyB0aGlzIHBhcnRpY3VsYXIgdmVyc2lvbiBpbnRlcmFjdCB3aXRoIGRpZmZlcmVudCBPU2VzPyBXaGF0IGFib3V0IHRoZSBzcGVjaWZpYyBjb21waWxlciB2ZXJzaW9ucyBpdCdzIGNvbXBhdGlibGUgd2l0aD8gSSBuZWVkIHRvIGtub3cgd2hpY2ggSW50ZWwgU0RLIHZlcnNpb25zIGFyZSBhY3RpdmVseSBtYWludGFpbmVkIGFuZCB3aGljaCBhcmUgZGVwcmVjYXRlZC4gQXJlIHRoZXJlIGRpZmZlcmVudCBTREtzIGZvciBXaW5kb3dzLCBMaW51eCwgZXRjLj8gSG93IGRvIHRoZXkgaGFuZGxlIGRpZmZlcmVuY2VzIGluIHN5c3RlbSBjYWxscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQ/XG5cblRoZW4gdGhlICpvcGVyYXRpbmcgc3lzdGVtKiBjb21lcyBpbnRvIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIE9TZXMgdGhlIFNESyBzdXBwb3J0cyBvZmZpY2lhbGx5LCBhbmQgaG93IHRoZWlyIGtlcm5lbCB2ZXJzaW9ucyBpbXBhY3QgU0dYIGZ1bmN0aW9uYWxpdHkuIERvZXMgdGhlIE9TIHByb3ZpZGUgbmF0aXZlIHN1cHBvcnQgdGhyb3VnaCBkcml2ZXJzIG9yIGxpYnJhcmllcywgb3IgZG9lcyB0aGUgU0RLIG1hbmFnZSBhbGwgb2YgdGhhdD8gV2hhdCBhYm91dCB0aGUgKmh5cGVydmlzb3IqIGlmIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEFyZSB0aGVyZSBzcGVjaWZpYyBoeXBlcnZpc29yIHZlcnNpb25zIHRoYXQgYXJlIGNvbXBhdGlibGUsIG9yIGV2ZW4gcHJlZmVycmVkLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zIHRoZXJlP1xuXG5BbmQgc3BlYWtpbmcgb2YgT1NlcywgdGhlcmUncyB0aGUgKnNlY3VyZSBlbmNsYXZlIGluZnJhc3RydWN0dXJlKiBpdHNlbGYuIFRoZSBPUy1zcGVjaWZpYyBjYWxscyB0byBpbnZva2UgdGhlIGVuY2xhdmVzLCB0byBtYW5hZ2UgdGhlaXIgbWVtb3J5LCBldGMuIEhvdyBkb2VzIHRoaXMgdmFyeSBiZXR3ZWVuLCBzYXksIExpbnV4IGFuZCBXaW5kb3dzPyBXaGF0J3MgdGhlIGltcGFjdCBvZiBTRUxpbnV4IG9yIEFwcEFybW9yIG9uIExpbnV4PyBBbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgYXBwbGljYXRpb24gc2VjdXJpdHkgaW4gZWFjaCBlbnZpcm9ubWVudD9cblxuQmV5b25kIHRob3NlIGNvcmUgY29tcG9uZW50cywgSSBuZWVkIHRvIGNvbnNpZGVyICpzb2Z0d2FyZSBkZXBlbmRlbmNpZXMqLiBXaGF0IGFyZSB0aGUgbGlicmFyaWVzIHRoYXQgYXBwbGljYXRpb25zIHdpdGhpbiB0aGUgZW5jbGF2ZXMgd2lsbCBuZWVkPyBXaWxsIHRoZXkgYmUgYWJsZSB0byByZWx5IG9uIHN0YW5kYXJkIGxpYnJhcmllcywgb3IgZG8gdGhleSBuZWVkIHNwZWNpYWwgU0dYLWF3YXJlIHZlcnNpb25zPyBBcmUgdGhlcmUgdGhpcmQtcGFydHkgbGlicmFyaWVzIHRoYXQgaGF2ZSBiZWVuIGhhcmRlbmVkIGZvciBTR1g/IFdoYXQncyB0aGUgZWNvc3lzdGVtIGxpa2UgZm9yIGNyeXB0b2dyYXBoaWMgbGlicmFyaWVzIGNvbXBhdGlibGUgd2l0aCBTR1g/IFdoYXQgYWJvdXQgdGhpbmdzIGxpa2UgbmV0d29ya2luZyBvciBmaWxlIHN5c3RlbSBhY2Nlc3MgKmZyb20gd2l0aGluKiB0aGUgZW5jbGF2ZT8gV2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zP1xuXG5BbmQgZmluYWxseSwgKnNlY3VyaXR5Ki4gV2hhdCBhcmUgdGhlIGtub3duIHZ1bG5lcmFiaWxpdGllcyBhbmQgbWl0aWdhdGlvbnMgZm9yIHRoZXNlIGRlcGVuZGVuY2llcz8gSG93IGFyZSB1cGRhdGVzIGhhbmRsZWQgYW5kIGRpc3RyaWJ1dGVkPyBIb3cgZG9lcyB0aGUgU0dYIGF0dGVzdGF0aW9uIHByb2Nlc3MgcmVsYXRlIHRvIHRoZXNlIGRlcGVuZGVuY2llcz8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgc3lzdGVtIGFuZCBwcm90ZWN0aW5nIGFnYWluc3QgYXR0YWNrcy4gSSBtdXN0IGtub3cgdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGFuZCB3aGF0IG1ldGhvZHMgYXJlIGluIHBsYWNlIHRvIGNvdW50ZXJhY3QgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjozOS41OTUxNDgyMzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgyNSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgyNTpcXHRlbmRjaG9pY2VcXG4xODI2OlxcdFxcbjE4Mjc6XFx0Y29uZmlnIFg4Nl9TR1hcXG4xODI4OlxcdFxcdGJvb2wgXFxcIlNvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWClcXFwiXFxuMTgyOTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0lOVEVMIFxcdTAwMjZcXHUwMDI2IFg4Nl9YMkFQSUNcXG4xODMwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbjE4MzE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjE4MzI6XFx0XFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG4xODMzOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xODM0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6MzkuNTk1MzgwMTM4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTE4ODU1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNldCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHNjZW5hcmlvLiBUaGlua2luZyB0aGlzIHRocm91Z2guLi4gSSBzZWUgYFg4Nl82NGAsIGBDUFVfU1VQX0lOVEVMYCwgYW5kIGBYODZfWDJBUElDYCBtZW50aW9uZWQgYXMgcmVxdWlyZW1lbnRzLiBCdXQgd2FpdCBhIG1pbnV0ZSwgYFg4Nl82NGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBmb3Igc3l6a2FsbGVyLCBhbmQgYENQVV9TVVBfSU5URUxgIGFuZCBgWDg2X1gyQVBJQ2AgYXJlIGFsc28gcHJldHR5IG11Y2ggc3RhbmRhcmQgbm93YWRheXMuIFRoYXQgbWVhbnMgdGhhdCBpZiB0aG9zZSBhcmUgaW1wbGllZCwgSSByZWFsbHkgb25seSBuZWVkIHRvIG1ha2Ugc3VyZSBgWDg2X1NHWGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9JTlRFTGAuIEknbGwgd2FudCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBuZWNlc3NhcnkuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjo0My4xNDcyNjg1MDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjQzLjE0NzM3MDk1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUxOTYwODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSUEzMl9GRUFUX0NUTDogTXkgTWVudGFsIENoZWNrbGlzdCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgY3VycmVudCBwcm9qZWN0IGFuZCBJIGltbWVkaWF0ZWx5IGhpdCBvbiBgSUEzMl9GRUFUX0NUTGAuIEl0J3MgYSBrZXkgcmVnaXN0ZXIsIGFuZCBteSBtaW5kJ3MgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGZvciB0aGlzIHRoaW5nLiBJIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGZlYXR1cmVzIGl0IGNvbnRyb2xzIOKAkyB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LCBwb3NzaWJseSBzb21lIHNlY3VyaXR5IGV4dGVuc2lvbnMsIGRlZmluaXRlbHkgdGhpbmdzIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UgYW5kIG1heWJlIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIENQVS4gTXkgZmlyc3QgdGhvdWdodCBpczogYW0gSSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IENQVSBtb2RlbCB0byBldmVuIG1ha2UgdGhpcyBhIGNvbnNpZGVyYXRpb24/IElmIG5vdCwgdGhlbiBJJ3ZlIGdvbmUgZG93biB0aGUgd3JvbmcgcGF0aCwgYW5kIEkgbmVlZCB0byBjaGVjayBteSBDUFVJRCBvdXRwdXQgYmVmb3JlIEkgd2FzdGUgYW55IG1vcmUgdGltZS4gSWYgSSAqYW0qIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgaGFyZHdhcmUsIHRoZW4gSSBuZWVkIHRvIGNhcmVmdWxseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGJpdHMgd2l0aGluIGBJQTMyX0ZFQVRfQ1RMYCBuZWVkIHNwZWNpZmljIG1hbmlwdWxhdGlvbiBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gV2hhdCBmZWF0dXJlcyBhbSBJIHRhcmdldGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgKnRob3NlKiBmZWF0dXJlcz8gV2hhdCdzIHRoZSByZWNvbW1lbmRlZCBwb3dlci1vbiBkZWZhdWx0IHZhbHVlLCBhbmQgaXMgdGhhdCBnb2luZyB0byB3b3JrIGZvciBteSBwYXJ0aWN1bGFyIHVzYWdlIHNjZW5hcmlvPyBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhpcyBjb250cm9sIHJlZ2lzdGVyIGlzIGFwcHJvcHJpYXRlbHkgc2V0IHRvIG1heGltaXplIHBlcmZvcm1hbmNlIGFuZCBhdm9pZCBhbnkgdW5hbnRpY2lwYXRlZCBiZWhhdmlvcnMuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCBhbnkgY2hhbmdlcyBoZXJlIHdvbid0IGNyZWF0ZSBhbnkgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cywgbGlrZSB0aGUgaHlwZXJ2aXNvciBvciBCSU9TLiBJIG5lZWQgdG8gcmV2aWV3IGFsbCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBvbmUgbW9yZSB0aW1lLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJhdGEgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyByZWdpc3RlciwgYW5kIHRoZW4gbWFrZSBhIHZlcnkgY2FsY3VsYXRlZCBkZWNpc2lvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU5MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6NDYuOTk5MzM0OTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5ODk0MTUzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSUEzMl9GRUFUX0NUTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjo0Ny4wOTkyNDI3MjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5MTYyOTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgQXJjaGFlb2xvZ3k6IExvY2F0aW5nIElBMzJfRkVBVF9DVEwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgSUEzMl9GRUFUX0NUTGAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzbid0IGV4YWN0bHkgYSBncm91bmRicmVha2luZyB0YXNrLCBidXQgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCBjb25maWd1cmVkLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkga25vdyBhIGZhaXIgYml0IGFib3V0IGhvdyB0aGUgS2NvbmZpZyBzeXN0ZW0gaXMgc3RydWN0dXJlZCwgYnV0IHNvbWV0aW1lcyBhIHNwZWNpZmljIHN5bWJvbCBjYW4gYmUgdHJpY2t5IHRvIHRyYWNrIGRvd24gaWYgaXQncyBkZWVwbHkgbmVzdGVkLCBvciBoaWRkZW4gYmVoaW5kIHNvbWUgb2JzY3VyZSBkZXBlbmRlbmN5LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGxldmVyYWdlIHRoZSBwb3dlciBvZiBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkuIEknbGwgZXhlY3V0ZSBhIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBLY29uZmlnIGhpZXJhcmNoeS4gSSdtIHRoaW5raW5nIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYSBzaW1wbGUgYGdyZXAgXCJJQTMyX0ZFQVRfQ1RMXCIgKktjb25maWcqYCAob3Igd2hhdGV2ZXIgdGhlIGFjdHVhbCBmaWxlIGV4dGVuc2lvbi9uYW1pbmcgY29udmVudGlvbiBpcyB1c2VkKS4gSSBtaWdodCBuZWVkIHRvIHJlZmluZSB0aGlzIGJhc2VkIG9uIHRoZSByZXN1bHRzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBpbnRvIGFueSBjb21tb24gYWJicmV2aWF0aW9ucyBvciBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgdGhlIHRlcm0uXG5cbklmIEkgZG9uJ3QgaW1tZWRpYXRlbHkgZmluZCBpdCwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLiBQZXJoYXBzIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCBjb25kaXRpb25hbGx5LCBiYXNlZCBvbiBhbm90aGVyIHN5bWJvbCBvciBhcmNoaXRlY3R1cmUuIEluIHRoYXQgY2FzZSwgSSBtaWdodCBoYXZlIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gaW5jbHVkZSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBvciBsb29rIGZvciBvdGhlciByZWxhdGVkIGZlYXR1cmVzIHdoaWNoIGNvdWxkIHByb3ZpZGUgaGludHMuIEknbGwgbWVudGFsbHkgbWFwIG91dCB0aGUgcG9zc2libGUgZGVwZW5kZW5jeSBjaGFpbnMuXG5cbkJleW9uZCBzaW1wbGUgc3RyaW5nIG1hdGNoaW5nLCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoZXMgaWYgSSBoaXQgYSB3YWxsLiBVc2luZyBhIEtjb25maWcgcGFyc2luZyB0b29sIHdvdWxkIGJlIGlkZWFsIHRvIHBhcnNlIHRoZSBLY29uZmlnIGZpbGVzLiBUaGVuIEkgY2FuIHVzZSB0aGUgdG9vbCB0byBxdWVyeSB0aGUgY29uZmlnIHN5bWJvbCBkYXRhYmFzZSBhbmQgZmluZCBob3cgYElBMzJfRkVBVF9DVExgIGlzIGRlZmluZWQuIFRoaXMgbGV2ZWwgb2YgYW5hbHlzaXMgd2lsbCBhbGxvdyBtZSB0byB0cmFjayBkb3duIHRoZSBzeW1ib2wgYW5kIHVuZGVyc3RhbmQgd2hlcmUgaXRzIGRlZmluaXRpb24gbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTY6NTEuMDkwODc1ODI5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM2NTQzNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJQTMyX0ZFQVRfQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnLmNwdT0yODU9Y29uZmlnIFg4Nl9ERUJVR0NUTE1TUlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMjg4LVxcbmFyY2gveDg2L0tjb25maWcuY3B1OjI4OTpjb25maWcgSUEzMl9GRUFUX0NUTFxcbmFyY2gveDg2L0tjb25maWcuY3B1LTI5MC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjU0LjQyNzQyNDAxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU1OTI4NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgS1ZNIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIGBkZWZfYm9vbCB5YCBtZWFucyB0aGlzIGZlYXR1cmUgaXMgYWx3YXlzIG9uLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYFg4Nl9TR1hgLCBhbmQgYFg4Nl9TR1hfS1ZNYC4gUmlnaHQsIGdvdCBpdC4gTm93LCBsZXQncyBkaXZlIGJhY2sgaW50byB0aG9zZSBmdW5jdGlvbnMgSSB3YXMgbG9va2luZyBhdC5cblxuSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlc2U6IGB2bXhfaXNfbGFzc192aW9sYXRpb25gLCBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AsIGBrdm1faGFuZGxlX2ludnBjaWRgLCBhbmQgYHZteF9nZXRfdW50YWdnZWRfYWRkcmAuIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdGhhdCBtaWdodCBiZSBoaWRpbmcuXG5cbkhtbSwgb2theSwgbGV0J3Mgc2VlLiBJJ20gc2VlaW5nIGEgZmV3IG90aGVyIGZ1bmN0aW9ucywgYnV0IHRoZXNlIGFyZSBhbGwgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkncmUgbm90IGRpcmVjdGx5IGV4cG9zZWQ6IGBuZXN0ZWRfdm14X2NyX2ZpeGVkMV9iaXRzX3VwZGF0ZWAsIGBoYW5kbGVfaW52dnBpZGAsIGBzZ3hfZ2V0X2VuY2xzX2d2YWAsIGBlbXVsYXRvcl9pc19sYXNzX3Zpb2xhdGlvbmAsIGBfX2xpbmVhcml6ZWAsIGBhc3NpZ25fZWlwYCwgYGxpbmVhcl9yZWFkX3N5c3RlbWAsIGBsaW5lYXJfd3JpdGVfc3lzdGVtYCwgYW5kIGBlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkYC4gVGhlc2UgYXJlbid0IGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcgZnJvbSBhbiBleHRlcm5hbCBleHBsb2l0IHBlcnNwZWN0aXZlLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVtLlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaWYgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAgaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBtZXJlbHkgbm9uLXN0YXRpYy4gVGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU0NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNjo1OS4xODMzNTY5NzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzE3MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9pc19sYXNzX3Zpb2xhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU3MD1ndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODYwNy1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg2MDg6Ym9vbCB2bXhfaXNfbGFzc192aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NjA5LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE2OjU5LjI1OTY4MjM1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcxOTY5NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgZm9yIE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIGZhY3QgdGhhdCB0aGlzIGFyZWEgaXNuJ3Qgc3RhdGljIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBOb24tc3RhdGljIG9mdGVuIGltcGxpZXMgZHluYW1pYyBiZWhhdmlvciwgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLCBvciBhIGZ1bmN0aW9uIHRoYXQncyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMgYW5kIGNvdWxkIGJlbmVmaXQgZnJvbSBvcHRpbWl6YXRpb24uIEl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGh1bmNoIGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGBrdm1faGFuZGxlX2ludnBjaWRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gdG8gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIHB1bGwgdXAgdGhhdCBmdW5jdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxpa2VseSBjb2RlIHBhdGhzLCB3aGF0IGl0J3MgZG9pbmcgd2l0aCB0aGUgSW52cGNpZCBpbnN0cnVjdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2Ygd2hlcmUgYW5kIGhvdyBpdCdzIGNhbGxlZCB3aXRoaW4gS1ZNLiBUaGlzIHNob3VsZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudCBhbmQgZ3VpZGUgbXkgbmV4dCBzdGVwcywgd2hldGhlciB0aGF0J3MgcHJvZmlsaW5nLCBjb2RlIGFuYWx5c2lzLCBvciB0YXJnZXRlZCBpbnN0cnVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mzc4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTc6MDMuMDMxNjUzOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MzMzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhbmRsZV9pbnZwY2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MTA3MjY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyNy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA3Mjg6aW50IGt2bV9oYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgZ3ZhX3QgZ3ZhKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcyOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MDQtfVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDgwNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2hhbmRsZV9pbnZwY2lkKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE3OjAzLjA3ODI5MjExN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTc5NzY1MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqQ2hlY2tpbmcgS1ZNJ3MgSW50ZXJuYWwgTWVtb3J5IEFkZHJlc3NpbmcqKlxuXG5SaWdodCwgdGhpcyBpcyBiZWluZyB1c2VkIGludGVybmFsbHkgYnkgS1ZNLCBzbyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgbWVtb3J5IGFkZHJlc3Npbmcgc2NoZW1lIGlzIGNvcnJlY3QuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZ2V0X3ZteF9tZW1fYWRkcmVzc2AuIEkga25vdyB0aGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byB2ZXJpZnkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiBJdCdzIGNydWNpYWwgdGhpcyBmdW5jdGlvbiBkb2VzIGV4YWN0bHkgd2hhdCdzIGV4cGVjdGVkIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBhbnkgZXJyb3JzIGhlcmUgY2FuIGNhdXNlIHNlcmlvdXMgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkxMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjE3OjA2LjA1ODA1OTYwNFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NjUyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3ZteF9tZW1fYWRkcmVzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTIyMz1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3RyaXBsZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyMzQtICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MjM1OmludCBnZXRfdm14X21lbV9hZGRyZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjM2LVxcdFxcdFxcdHUzMiB2bXhfaW5zdHJ1Y3Rpb25faW5mbywgYm9vbCB3ciwgaW50IGxlbiwgZ3ZhX3QgKnJldClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTM2MT1zdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlcixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTM2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUzNjg6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MzY5LVxcdFxcdFxcdFxcdHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKSwgZmFsc2UsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NTY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTcyNS1cXHRcXHRsZW4gPSBpc182NF9iaXRfbW9kZSh2Y3B1KSA/IDggOiA0O1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTcyNjpcXHRcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCBleGl0X3F1YWxpZmljYXRpb24sXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NzI3LVxcdFxcdFxcdFxcdFxcdGluc3RyX2luZm8sIHRydWUsIGxlbiwgXFx1MDAyNmd2YSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU3NjI9c3RhdGljIGludCBoYW5kbGVfdm13cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU3OTktXFx0XFx0bGVuID0gaXNfNjRfYml0X21vZGUodmNwdSkgPyA4IDogNDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4MDA6XFx0XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTgwMS1cXHRcXHRcXHRcXHRcXHRpbnN0cl9pbmZvLCBmYWxzZSwgbGVuLCBcXHUwMDI2Z3ZhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk1Mz1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5Njg6XFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2OS1cXHRcXHRcXHRcXHR0cnVlLCBzaXplb2YoZ3BhX3QpLCBcXHUwMDI2Z3ZhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk4MT1zdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDE1LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjAxNjpcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYwMTctXFx0XFx0XFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZndmEpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MDYxPXN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MDk4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjA5OTpcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYxMDAtXFx0XFx0XFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZndmEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNzowNi4xMDc5Mjk4N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3ODQ3NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgQXNzdW1wdGlvbiBpbiB4ODYgS1ZNL1ZNWCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoYXQgd2hhdGV2ZXIgd2UncmUgZGVhbGluZyB3aXRoIGlzbid0IHN0YXRpYy4gSXQncyBkeW5hbWljLCBjaGFuZ2luZywgKm5vdCogZml4ZWQuIFRoaXMgaXMgY3J1Y2lhbDsgaWYgaXQgd2VyZSBzdGF0aWMsIHdlIGNvdWxkIG1ha2Ugc29tZSBkaWZmZXJlbnQgYXNzdW1wdGlvbnMuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgbmVlZHMgdG8gYmUgY29uZmlybWVkLlxuXG5UbyBwaW4gdGhpcyBkb3duLCBsZXQncyBkcmlsbCBkb3duIGFuZCB0YWtlIGEgbG9vayBhdCBgdm14X2dldF91bnRhZ2dlZF9hZGRyYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBhcmVhIHN1Z2dlc3RzIHRoaXMgY291bGQgYmUgdGhlIHNvdXJjZSBvZiB0aGUgZHluYW1pY3MuIExldCdzIG1ha2Ugc3VyZSBvdXIgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QgYnkgdmVyaWZ5aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSBleHBlY3QuIExldCdzIGV4YW1pbmUgaXQgYW5kIHNlZSBpZiBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNjcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNzowOS4zNjU3Nzk1NjhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc3NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZteF9nZXRfdW50YWdnZWRfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU1Nj12b2lkIHZteF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODU2OS0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg1NzA6Z3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NTcxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDI6MTc6MDkuNDExNzU5NDA1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzY2MjU5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTEFTUyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIExpbmVhciBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24gKExBU1MpIHN1cHBvcnQgd2l0aGluIEtWTSBmb3IgeDg2LiBUaGUgY29yZSBvZiB0aGlzIGlzIG1vZGlmeWluZyB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gZW5mb3JjZSBMQVNTIGNoZWNrcy4gIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMg4oCTIHRoaXMgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUga2V5IGFyZWFzIGFuZCBjb25maWd1cmF0aW9ucy4gIEkndmUgaWRlbnRpZmllZCB0aGVzZSBGb2N1c1N5bWJvbHMgdGhhdCBzZWVtIGNyaXRpY2FsOiBgdm14X2lzX2xhc3NfdmlvbGF0aW9uYCwgYGdldF92bXhfbWVtX2FkZHJlc3NgLCBga3ZtX2hhbmRsZV9pbnZwY2lkYCwgYW5kIGB2bXhfZ2V0X3VudGFnZ2VkX2FkZHJgLiBUaGV5IGFyZSB0aGUgZnVuY3Rpb25hbCBlbGVtZW50cyB0aGF0IEkgYmVsaWV2ZSB3aWxsIHdhcnJhbnQgdGhlIG1vc3QgYXR0ZW50aW9uLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9ucy4gIEkgc2VlIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYFg4Nl9TR1hgLCBhbmQgYFg4Nl9TR1hfS1ZNYCBtZW50aW9uZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbWluaW11bSBjb25maWd1cmF0aW9uIGZvciBlZmZlY3RpdmUgdGVzdGluZyBvZiB0aGlzIExBU1MgaW1wbGVtZW50YXRpb24uICBTcGVjaWZpY2FsbHksIGlzIGBYODZfU0dYYCBhbmQgYFg4Nl9TR1hfS1ZNYCBzdHJpY3RseSByZXF1aXJlZD9cblxuQWgsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIHBhcnRpY3VsYXJseSB0aGUgbW9kaWZpY2F0aW9uIHRvIGBhcmNoL3g4Ni9rdm0vdm14L3NneC5jYCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYHZteF9pc19sYXNzX3Zpb2xhdGlvbmAgY2hlY2sgd2l0aGluIGBzZ3hfZ2V0X2VuY2xzX2d2YWAsIGl0IGlzIGNsZWFyIHRoYXQgdGVzdGluZyB0aGlzIHNwZWNpZmljIHBhdGggKmRvZXMqIHJlcXVpcmUgYFg4Nl9TR1hfS1ZNYC5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIG90aGVyIGNvbmZpZ3MuIGBDT05GSUdfWDg2XzY0YCBpcyBzdGFuZGFyZC4gYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAgYXJlIGFsc28gc3RhbmRhcmQuIGBDT05GSUdfWDg2X1NHWGAgaXMgYWxzbyBhIHN0YW5kYXJkIGNvbmZpZy4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIHNldCBvZiBjb25maWd1cmF0aW9ucyBhcHBlYXIgdG8gYmUgYENPTkZJR19YODZfNjRgLCBgQ09ORklHX0tWTWAsIGBDT05GSUdfS1ZNX0lOVEVMYCwgYW5kIGBDT05GSUdfWDg2X1NHWF9LVk1gLlxuXG5JJ3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGludm9sdmVkIGFuZCBjYW4gc2V0IHVwIHRoZSBmdXp6ZXIgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzIyLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjoxNzoxNS41NDgzODcxNzZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA1MjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIlg4Nl9TR1hcIixcbiAgICBcIlg4Nl9TR1hfS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2lzX2xhc3NfdmlvbGF0aW9uXCIsXG4gICAgXCJnZXRfdm14X21lbV9hZGRyZXNzXCIsXG4gICAgXCJrdm1faGFuZGxlX2ludnBjaWRcIixcbiAgICBcInZteF9nZXRfdW50YWdnZWRfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIlg4Nl9TR1hcIixcbiAgICBcIlg4Nl9TR1hfS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2lzX2xhc3NfdmlvbGF0aW9uXCIsXG4gICAgXCJnZXRfdm14X21lbV9hZGRyZXNzXCIsXG4gICAgXCJrdm1faGFuZGxlX2ludnBjaWRcIixcbiAgICBcInZteF9nZXRfdW50YWdnZWRfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTGluZWFyIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiAoTEFTUykgaW4gS1ZNIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHRvIGVuZm9yY2UgTEFTUyBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowvrx6l[1] Phase: Succeeded StartedAt: 2026-08-06 02:17:38 +0000 UTC FinishedAt: 2026-08-06 02:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 02:17:38 +0000 UTC FinishedAt: 2026-08-06 02:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2] Phase: Succeeded StartedAt: 2026-08-06 02:17:38 +0000 UTC FinishedAt: 2026-08-06 05:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 02:17:38 +0000 UTC FinishedAt: 2026-08-06 05:56:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 02:17:38 +0000 UTC FinishedAt: 2026-08-06 02:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 02:17:38 +0000 UTC FinishedAt: 2026-08-06 02:17:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-convert-artifact-1308384442/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 02:17:48 +0000 UTC FinishedAt: 2026-08-06 02:34:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 02:17:48 +0000 UTC FinishedAt: 2026-08-06 02:34:03 +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:*4e05f376-312b-4397-8689-11065e71162f,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-workflowvrx6l/series-workflowvrx6l-convert-artifact-1308384442/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": "5ce8a047-a15e-43ae-a77c-1a2913b16086", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-2285474408/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 02:17:48 +0000 UTC FinishedAt: 2026-08-06 02:33:53 +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:*4e05f376-312b-4397-8689-11065e71162f,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-workflowvrx6l/series-workflowvrx6l-convert-artifact-1308384442/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": "5ce8a047-a15e-43ae-a77c-1a2913b16086", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-2285474408/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 02:34:03 +0000 UTC FinishedAt: 2026-08-06 02:34:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 02:34:03 +0000 UTC FinishedAt: 2026-08-06 02:34:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 02:34:03 +0000 UTC FinishedAt: 2026-08-06 02:34:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 02:34:03 +0000 UTC FinishedAt: 2026-08-06 02:34:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-convert-artifact-1575373845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 02:34:13 +0000 UTC FinishedAt: 2026-08-06 02:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 02:34:13 +0000 UTC FinishedAt: 2026-08-06 02:36:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ce8a047-a15e-43ae-a77c-1a2913b16086,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-2285474408/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 02:36:22 +0000 UTC FinishedAt: 2026-08-06 02:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 02:36:22 +0000 UTC FinishedAt: 2026-08-06 02:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 02:36:22 +0000 UTC FinishedAt: 2026-08-06 02:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 02:36:22 +0000 UTC FinishedAt: 2026-08-06 02:52:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4e05f376-312b-4397-8689-11065e71162f,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-workflowvrx6l/series-workflowvrx6l-convert-artifact-1575373845/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": "e3232c80-8dd2-4822-a6c4-8434f89c51f9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-1689580193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 02:36:22 +0000 UTC FinishedAt: 2026-08-06 02:52:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4e05f376-312b-4397-8689-11065e71162f,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-workflowvrx6l/series-workflowvrx6l-convert-artifact-1575373845/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": "e3232c80-8dd2-4822-a6c4-8434f89c51f9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-1689580193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 02:52:47 +0000 UTC FinishedAt: 2026-08-06 02:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 02:52:47 +0000 UTC FinishedAt: 2026-08-06 02:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 02:52:47 +0000 UTC FinishedAt: 2026-08-06 02:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 02:52:47 +0000 UTC FinishedAt: 2026-08-06 02:54:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e3232c80-8dd2-4822-a6c4-8434f89c51f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-1689580193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 02:55:01 +0000 UTC FinishedAt: 2026-08-06 05:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 02:55:01 +0000 UTC FinishedAt: 2026-08-06 05:56:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5ce8a047-a15e-43ae-a77c-1a2913b16086,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e3232c80-8dd2-4822-a6c4-8434f89c51f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-2285474408/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-1689580193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 02:55:01 +0000 UTC FinishedAt: 2026-08-06 02:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 02:55:01 +0000 UTC FinishedAt: 2026-08-06 02:55:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-convert-artifact-3141314042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 02:55:01 +0000 UTC FinishedAt: 2026-08-06 02:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 02:55:01 +0000 UTC FinishedAt: 2026-08-06 02:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 02:55:01 +0000 UTC FinishedAt: 2026-08-06 02:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 02:55:11 +0000 UTC FinishedAt: 2026-08-06 05:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrx6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_is_lass_violation","get_vmx_mem_address","kvm_handle_invpcid","vmx_get_untagged_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51ba04112e93ac6e04c627eddcea5caf9cbc0134","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","X86_SGX","X86_SGX_KVM"],"series_id":"9b25f76e-1f9f-4fed-8e61-14584ea7a9ed","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 02:55:11 +0000 UTC FinishedAt: 2026-08-06 05:56:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ce8a047-a15e-43ae-a77c-1a2913b16086,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e3232c80-8dd2-4822-a6c4-8434f89c51f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-2285474408/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-build-action-1689580193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvrx6l/series-workflowvrx6l-convert-artifact-3141314042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}