Name: series-workflowj9clj Phase: Succeeded StartedAt: 2026-06-27 01:41:19 +0000 UTC FinishedAt: 2026-06-27 05:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[0] Phase: Succeeded StartedAt: 2026-06-27 01:41:19 +0000 UTC FinishedAt: 2026-06-27 01:51:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[0].run-triage Phase: Succeeded StartedAt: 2026-06-27 01:41:19 +0000 UTC FinishedAt: 2026-06-27 01:51:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV" ], "series_id": "4aa7878f-94d8-4f3a-a4f5-b47fffbfe070" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_flush_shadow_memslot", "__kvm_mmu_zap_all_fast_front_half", "__kvm_mmu_zap_all_fast_back_half", "sev_snp_init_protected_guest_state", "__sev_snp_reload_vmsa", "sev_snp_reload_vmsa", "sev_gmem_invalidate_range", "sev_gmem_free_folio" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNGRlYmM2MGNjNDczMjk2YWRkYzk1NjI5YjIwNDMyZDFjZjI1ODA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDE6NDk6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbmluZGV4IDgzZGM1MDg2MTM4YjM5Li5mZDA4NDU0Yzc1NTM2NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xMzQsNiAmIzQzOzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbilcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwocmVsb2FkX3Ztc2EpXG4gS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXG4gS1ZNX1g4Nl9PUChjaGVja19lbXVsYXRlX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1AoYXBpY19pbml0X3NpZ25hbF9ibG9ja2VkKVxuQEAgLTE0NSw5ICYjNDM7MTQ2LDE0IEBAIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpO1xuIEtWTV9YODZfT1BfT1BUSU9OQUwoZ2V0X3VudGFnZ2VkX2FkZHIpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbylcbiYjNDM7I2VuZGlmXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXG4tS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXG4gI2VuZGlmXG4gXG4gI3VuZGVmIEtWTV9YODZfT1BcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1MzIuLmVlNDdhMGQxZmViOTkwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTEyMiw2ICYjNDM7MTIyLDggQEBcbiBcdEtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfSFZfVExCX0ZMVVNIIFxcXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzIsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4mIzQzOyNkZWZpbmUgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEIFxcXG4mIzQzO1x0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMzLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxuICNkZWZpbmUgS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFIFxcXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzQsIEtWTV9SRVFVRVNUX1dBSVQpXG4gXG5AQCAtMTg3OCw2ICYjNDM7MTg4MCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHRpbnQgKCp2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHRpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHR2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTtcbiYjNDM7XHR2b2lkICgqcmVsb2FkX3Ztc2EpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gXHRpbnQgKCpnZXRfZmVhdHVyZV9tc3IpKHUzMiBtc3IsIHU2NCAqZGF0YSk7XG4gXG5AQCAtMTkwMCw4ICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXHR2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gXHRpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi1cdHZvaWQgKCpnbWVtX2ludmFsaWRhdGUpKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO1x0dm9pZCAoKmdtZW1faW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuJiM0MztcdHZvaWQgKCpnbWVtX2ZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MzsjZW5kaWZcbiBcdGludCAoKmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCA2YzEzZGE5NDJiZmNjYy4uOGQzNmNhMGEzODBiNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjkyMSwyMCAmIzQzOzY5MjEsMTEgQEAgc3RhdGljIHZvaWQga3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm1fbW11X2NvbW1pdF96YXBfcGFnZShrdm0sIFx1MDAyNmludmFsaWRfbGlzdCk7XG4gfVxuIFxuLS8qXG4tICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxuLSAqIHRvIHphcCBvYnNvbGV0ZSBwYWdlcy5cbi0gKlxuLSAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4tICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xuLSAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzXG4tICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4tICovXG4tc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdHRyYWNlX2t2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XG4gXG4gXHQvKlxuQEAgLTY5NzEsOCAmIzQzOzY5NjIsMTIgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMpO1xuIFxuIFx0a3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhrdm0pO1xuJiM0Mzt9XG4gXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbiBcdC8qXG4gXHQgKiBaYXAgdGhlIGludmFsaWRhdGVkIFREUCBNTVUgcm9vdHMsIGFsbCBTUFRFcyBtdXN0IGJlIGRyb3BwZWQgYmVmb3JlXG5AQCAtNjk4Niw2ICYjNDM7Njk4MSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGxfZmFzdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIHRydWUpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxuJiM0MzsgKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4mIzQzOyAqIGRlc3Ryb3llZCwgaW4gdGhlc2UgY2FzZXMsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCBLVk0gTU1VIGRvZXNcbiYjNDM7ICogbm90IHVzZSBhbnkgcmVzb3VyY2Ugb2YgdGhlIGJlaW5nLWRlbGV0ZWQgc2xvdCBvciBhbGwgc2xvdHNcbiYjNDM7ICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGxfZmFzdChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKGt2bSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9tbXVfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0aW50IHIsIGk7XG5AQCAtNzU2MCw4ICYjNDM7NzU3MywxNCBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90X3BhZ2VzX2FuZF9mbHVzaChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRrdm1fbW11X3JlbW90ZV9mbHVzaF9vcl96YXAoa3ZtLCBcdTAwMjZpbnZhbGlkX2xpc3QsIGZsdXNoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4ge1xuIFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgcmFuZ2UgPSB7XG4gXHRcdC5zbG90ID0gc2xvdCxcbkBAIC03NTczLDI0ICYjNDM7NzU5MiwyMyBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGJvb2wgZmx1c2g7XG4gXG4gXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXHRmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZyYW5nZSk7XG4tXHRrdm1fbW11X3phcF9tZW1zbG90X3BhZ2VzX2FuZF9mbHVzaChrdm0sIHNsb3QsIGZsdXNoKTtcbi1cdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLX1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4te1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4tfVxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO1x0aWYgKHNsb3QtXHUwMDNlZ21lbS5maWxlKVxuJiM0MztcdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2cmFuZ2UpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoa3ZtKSkge1xuJiM0MztcdFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsdXNoID0ga3ZtX3VubWFwX2dmbl9yYW5nZShrdm0sIFx1MDAyNnJhbmdlKTtcbiYjNDM7XHRcdGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKGt2bSwgc2xvdCwgZmx1c2gpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4tdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLXtcbiBcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpXG4tXHRcdGt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XG4tXHRlbHNlXG4tXHRcdGt2bV9tbXVfemFwX21lbXNsb3Qoa3ZtLCBzbG90KTtcbiYjNDM7XHRcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKGt2bSk7XG4gfVxuIFxuIHZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX21taW9fc3B0ZXMoc3RydWN0IGt2bSAqa3ZtLCB1NjQgZ2VuKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA3NGZiMTU1NTFlODNmYS4uN2UwNmVkMTZmNDc0NjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMzk3OSwzMCAmIzQzOzM5NzksMjEgQEAgc3RhdGljIGludCBzbnBfYmVnaW5fcHNjKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHNucF9kb19wc2Moc3ZtKTtcbiB9XG4gXG4tLypcbi0gKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4tICovXG4tc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4mIzQzO1x0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbi1cdGdmbl90IGdmbjtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbi1cbi1cdGlmICghc3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XG4gXG4tXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XG4tXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG4gXG4tXHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EgKi9cbiYjNDM7XHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EuICovXG4gXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sXG5AQCAtNDAxMCwxNiAmIzQzOzQwMDEsMjcgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKi9cbiBcdHZtY2JfbWFya19hbGxfZGlydHkoc3ZtLVx1MDAzZXZtY2IpO1xuIFxuLVx0aWYgKCFWQUxJRF9QQUdFKHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXHUwMDNlc2V2X2VzLnZtc2EuIEluXG4mIzQzO1x0ICogdGhlb3J5LCBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbiYjNDM7XHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXG4mIzQzO1x0ICogaGFuZGxlZCBkdXJpbmcgdGVhcmRvd24gcmF0aGVyIHRoYW4gZ3Vlc3QgYm9vdC4gIERlZmVycmluZyB0aGF0IGFsc29cbiYjNDM7XHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4mIzQzO1x0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XG4gXG4tXHRnZm4gPSBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKTtcbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuJiM0MztcdGlmICghVkFMSURfUEFHRShncGEpKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0c2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFzbG90KVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0c21wX3JtYigpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbkBAIC00MDI3LDI5ICYjNDM7NDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdC8qXG4tXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxuLVx0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVx1MDAzZXNldl9lcy52bXNhLiBJblxuLVx0ICogdGhlb3J5LCBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbi1cdCAqIHRoYXQgaW52b2x2ZXMgY2xlYW51cHMgbGlrZSBmbHVzaGluZyBjYWNoZXMsIHdoaWNoIHdvdWxkIGlkZWFsbHkgYmVcbi1cdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4tXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4tXHQgKiBtaW5pbWFsIFNOUC1zcGVjaWZpYyBjaGFuZ2VzLlxuJiM0MztcdCAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnlcbiYjNDM7XHQgKiBhZ2FpbiB3aXRoIHRoZSBzYW1lIEdQQS4gIElmIHRoZSBWTVNBIGlzIHVzYWJsZSwgdGhlbiBLVk0gbmVlZHMgdG9cbiYjNDM7XHQgKiB0cmFjayB0aGUgR1BBIHNvIHRoYXQgdGhlIFZNU0EgY2FuIGJlIHJlbG9hZGVkIGlmIHRoZSBiYWNraW5nIHBhZ2VcbiYjNDM7XHQgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC5cbiBcdCAqL1xuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xuJiM0MztcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gZ3BhO1xuJiM0MztcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuJiM0MztcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiYjNDM7XHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcbiYjNDM7XHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcdGdwYV90IGdwYTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xuJiM0MztcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4gXG4tXHQvKiBVc2UgdGhlIG5ldyBWTVNBICovXG4tXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4mIzQzO1x0Z3BhID0gc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuLVx0LyogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSAqL1xuLVx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuJiM0MztcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xuIFxuIFx0Lypcbi1cdCAqIGdtZW0gcGFnZXMgYXJlbiYjMzk7dCBjdXJyZW50bHkgbWlncmF0YWJsZSwgYnV0IGlmIHRoaXMgZXZlciBjaGFuZ2VzXG4tXHQgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgaXMgcGlubmVkXG4tXHQgKiB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuXG4mIzQzO1x0ICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZFxuJiM0MztcdCAqIFZNU0EgR1BBLCBldmVuIGlmIGluc3RhbGxpbmcgdGhlIFZNU0EgZmFpbGVkLCBzbyB0aGF0IEtWTV9SVU4gd2lsbFxuJiM0MztcdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbiYjNDM7XHQgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLlxuIFx0ICovXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuJiM0MztcdGlmIChWQUxJRF9QQUdFKGdwYSkpXG4mIzQzO1x0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgKnNldl9lcyA9IFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2VzZXZfZXM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZzZXZfZXMtXHUwMDNlc25wX3Ztc2FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVx1MDAzZXNucF9ndWVzdF92bXNhX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbkBAIC00MTA1LDEwICYjNDM7NDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbi1cdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcbiYjNDM7XHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFNWTV9WTUdFWElUX0FQX0RFU1RST1k6XG4tXHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiYjNDM7XHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHZjcHVfdW5pbXBsKHZjcHUsIFwmIzM0O3ZtZ2V4aXQ6IGludmFsaWQgQVAgY3JlYXRpb24gcmVxdWVzdCBbJSN4XSBmcm9tIGd1ZXN0XFxuXCYjMzQ7LFxuQEAgLTQ3OTEsNiAmIzQzOzQ4MjgsOCBAQCBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdm0tXHUwMDNlc2V2X2VzLnZtc2EgPSBwYWdlX2FkZHJlc3Modm1zYV9wYWdlKTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuJiM0MztcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQgPSBzbnBfaXNfc2VjdXJlX3RzY19lbmFibGVkKHZjcHUtXHUwMDNla3ZtKTtcbiBcbkBAIC01MTE1LDkgJiM0Mzs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciBcJiMzNDtpcyBTTlBcJiMzNDsgaXMgYS1vayBoZXJlLCB0aGFua3MgdG8gbW11X2xvY2suXG4mIzQzO1x0ICogVGhlIHZDUFUmIzM5O3MgVk1TQSBHUEEgaXMgaW52YWxpZGF0ZWQgYmVmb3JlIHRoZSB2Q1BVIGlzIG1hZGUgdmlzaWJsZVxuJiM0MztcdCAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssXG4mIzQzO1x0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbiYjNDM7XHRcdGdwYV90IGdwYSA9IHRvX3N2bSh2Y3B1KS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuJiM0MztcbiYjNDM7XHRcdGlmIChWQUxJRF9QQUdFKGdwYSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzZT0gcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzYyByYW5nZS1cdTAwM2VlbmQpXG4mIzQzO1x0XHRcdGt2bV9tYWtlX3JlcXVlc3RfYW5kX2tpY2soS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcbiYjNDM7XHR9XG4mIzQzO31cbiBcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuJiM0Mzt2b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4mIzQzO1x0a3ZtX3Bmbl90IHN0YXJ0ID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xuJiM0MztcdGt2bV9wZm5fdCBlbmQgPSBzdGFydCAmIzQzOyAoMXVsIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZWY2OWE1MWFiMjdmOTguLjdkM2RkMzcxOTA3MDQ1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTU0NDUsNiAmIzQzOzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbiBcdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXG4gXHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxuJiM0MztcdC5yZWxvYWRfdm1zYSA9IHNldl9zbnBfcmVsb2FkX3Ztc2EsXG4gXG4gXHQudm1fY29weV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSxcbiBcdC52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLFxuQEAgLTU0NjAsOSAmIzQzOzU0NjEsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQudmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zID0gYXZpY192Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMsXG4gXHQuYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UgPSBzdm1fYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UsXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbiBcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxuLVx0LmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsXG4mIzQzO1x0LmdtZW1faW52YWxpZGF0ZV9yYW5nZSA9IHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2UsXG4mIzQzO1x0LmdtZW1fZnJlZV9mb2xpbyA9IHNldl9nbWVtX2ZyZWVfZm9saW8sXG4gXHQuZ21lbV9tYXhfbWFwcGluZ19sZXZlbCA9IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsLFxuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0yNzEsNyAmIzQzOzI3MSw4IEBAIHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSB7XG4gXHR1NjQgZ2hjYl9yZWdpc3RlcmVkX2dwYTtcbiBcbiBcdHN0cnVjdCBtdXRleCBzbnBfdm1zYV9tdXRleDsgLyogVXNlZCB0byBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIG9mIFZNU0EuICovXG4tXHRncGFfdCBzbnBfdm1zYV9ncGE7XG4mIzQzO1x0Z3BhX3Qgc25wX3BlbmRpbmdfdm1zYV9ncGE7XG4mIzQzO1x0Z3BhX3Qgc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuIFx0Ym9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7XG4gXHRib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTtcbiB9O1xuQEAgLTk5NSw2ICYjNDM7OTk2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuIHtcbiBcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gfVxuJiM0Mzt2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5AQCAtMTAwOCw3ICYjNDM7MTAxMCw4IEBAIGludCBzZXZfZGV2X2dldF9hdHRyKHUzMiBncm91cCwgdTY0IGF0dHIsIHU2NCAqdmFsKTtcbiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcbiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XG4gaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuJiM0Mzt2b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcbiBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHNldl9mcmVlX2RlY3J5cHRlZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp2bXNhKTtcbkBAIC0xMDM4LDcgJiM0MzsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW5cbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxuIHtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjlkZjZhY2Y5YTk4MmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04MTY3LDYgJiM0Mzs4MTY3LDggQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuJiM0MztcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSkpXG4mIzQzO1x0XHRcdGt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7XG4gXHR9XG4gXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSkgfHwgcmVxX2ludF93aW4gfHxcbkBAIC0xMDU5Miw5ICYjNDM7MTA1OTQsMTMgQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4tXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlKShzdGFydCwgZW5kKTtcbiYjNDM7XHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcbiYjNDM7fVxuJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pO1xuIH1cbiAjZW5kaWZcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi42YjdmODgwMTUwNWQ1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjYwNyw3ICYjNDM7MjYwNyw4IEBAIGxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC0xODUsNiAmIzQzOzE4NSwxMCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcdFx0fVxuIFxuIFx0XHRmbHVzaCB8PSBrdm1fbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIFx1MDAyNmdmbl9yYW5nZSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO1x0XHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoa3ZtLCBcdTAwMjZnZm5fcmFuZ2UpO1xuJiM0MzsjZW5kaWZcbiBcdH1cbiBcbiBcdGlmIChmbHVzaClcbkBAIC01MjMsMjMgJiM0Mzs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcbiBcdHJldHVybiBNRl9ERUxBWUVEO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XG4tXHRrdm1fcGZuX3QgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4tXHRpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4tXG4tXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUocGZuLCBwZm4gJiM0MzsgKDF1bCBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbi19XG4tI2VuZGlmXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpbyA9IG5vb3BfZGlydHlfZm9saW8sXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvLFxuIFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGt2bV9nbWVtX2Vycm9yX2ZvbGlvLFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi1cdC5mcmVlX2ZvbGlvID0ga3ZtX2dtZW1fZnJlZV9mb2xpbyxcbiYjNDM7XHQuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyxcbiAjZW5kaWZcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE0ZGViYzYwY2M0NzMyOTZhZGRjOTU2MjliMjA0MzJkMWNmMjU4MDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwMTo0OTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IDgzZGM1MDg2MTM4YjM5Li5mZDA4NDU0Yzc1NTM2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC0xMzQsNiAmIzQzOzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbikKIEtWTV9YODZfT1BfT1BUSU9OQUwodm1fY29weV9lbmNfY29udGV4dF9mcm9tKQogS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pCiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChyZWxvYWRfdm1zYSkKIEtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKQogS1ZNX1g4Nl9PUChjaGVja19lbXVsYXRlX2luc3RydWN0aW9uKQogS1ZNX1g4Nl9PUChhcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQpCkBAIC0xNDUsOSAmIzQzOzE0NiwxNCBAQCBLVk1fWDg2X09QKHZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcikKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpOwogS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcikKIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSkKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGVfcmFuZ2UpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ZyZWVfZm9saW8pCiYjNDM7I2VuZGlmCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkKLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKQogI2VuZGlmCiAKICN1bmRlZiBLVk1fWDg2X09QCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBiNTE3MjU3YTYzMTUzMi4uZWU0N2EwZDFmZWI5OTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTIyLDYgJiM0MzsxMjIsOCBAQAogCUtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUCkKICNkZWZpbmUgS1ZNX1JFUV9IVl9UTEJfRkxVU0ggXAogCUtWTV9BUkNIX1JFUV9GTEFHUygzMiwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUCkKJiM0MzsjZGVmaW5lIEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCBcCiYjNDM7CUtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUCkKICNkZWZpbmUgS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFIFwKIAlLVk1fQVJDSF9SRVFfRkxBR1MoMzQsIEtWTV9SRVFVRVNUX1dBSVQpCiAKQEAgLTE4NzgsNiAmIzQzOzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCWludCAoKnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKTsKIAlpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7CiAJdm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CXZvaWQgKCpyZWxvYWRfdm1zYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCWludCAoKmdldF9mZWF0dXJlX21zcikodTMyIG1zciwgdTY0ICpkYXRhKTsKIApAQCAtMTkwMCw4ICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCiAJZ3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7CiAJdm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFCiAJaW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7Ci0Jdm9pZCAoKmdtZW1faW52YWxpZGF0ZSkoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCiYjNDM7CXZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTsKJiM0MzsJdm9pZCAoKmdtZW1fZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7I2VuZGlmCiAJaW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggNmMxM2RhOTQyYmZjY2MuLjhkMzZjYTBhMzgwYjVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTY5MjEsMjAgJiM0Mzs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIGt2bV96YXBfb2Jzb2xldGVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9tbXVfY29tbWl0X3phcF9wYWdlKGt2bSwgJmFtcDtpbnZhbGlkX2xpc3QpOwogfQogCi0vKgotICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZQotICogdG8gemFwIG9ic29sZXRlIHBhZ2VzLgotICoKLSAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nCi0gKiBkZXN0cm95ZWQsIGluIHRoZXNlIGNhc2VzLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgS1ZNIE1NVSBkb2VzCi0gKiBub3QgdXNlIGFueSByZXNvdXJjZSBvZiB0aGUgYmVpbmctZGVsZXRlZCBzbG90IG9yIGFsbCBzbG90cwotICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKQogewogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKLQl3cml0ZV9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAJdHJhY2Vfa3ZtX21tdV96YXBfYWxsX2Zhc3Qoa3ZtKTsKIAogCS8qCkBAIC02OTcxLDggJiM0Mzs2OTYyLDEyIEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSkKIAlrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUyk7CiAKIAlrdm1femFwX29ic29sZXRlX3BhZ2VzKGt2bSk7CiYjNDM7fQogCi0Jd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKIAkvKgogCSAqIFphcCB0aGUgaW52YWxpZGF0ZWQgVERQIE1NVSByb290cywgYWxsIFNQVEVzIG11c3QgYmUgZHJvcHBlZCBiZWZvcmUKQEAgLTY5ODYsNiAmIzQzOzY5ODEsMjQgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKQogCQlrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCB0cnVlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZQomIzQzOyAqIHRvIHphcCBvYnNvbGV0ZSBwYWdlcy4KJiM0MzsgKgomIzQzOyAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nCiYjNDM7ICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lcwomIzQzOyAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzCiYjNDM7ICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJd3JpdGVfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoa3ZtKTsKJiM0MzsJd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CiYjNDM7CV9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKGt2bSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9tbXVfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJaW50IHIsIGk7CkBAIC03NTYwLDggJiM0Mzs3NTczLDE0IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKHN0cnVjdCBrdm0gKmt2bSwKIAlrdm1fbW11X3JlbW90ZV9mbHVzaF9vcl96YXAoa3ZtLCAmYW1wO2ludmFsaWRfbGlzdCwgZmx1c2gpOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwKLQkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm0tJmd0O2FyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gJmFtcDsmYW1wOwomIzQzOwkgICAgICAga3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpCiB7CiAJc3RydWN0IGt2bV9nZm5fcmFuZ2UgcmFuZ2UgPSB7CiAJCS5zbG90ID0gc2xvdCwKQEAgLTc1NzMsMjQgJiM0Mzs3NTkyLDIzIEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLAogCWJvb2wgZmx1c2g7CiAKIAl3cml0ZV9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci0JZmx1c2ggPSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgJmFtcDtyYW5nZSk7Ci0Ja3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goa3ZtLCBzbG90LCBmbHVzaCk7Ci0Jd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci19CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSkKLXsKLQlyZXR1cm4ga3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNICZhbXA7JmFtcDsKLQkgICAgICAga3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTsKLX0KJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCiYjNDM7CWlmIChzbG90LSZndDtnbWVtLmZpbGUpCiYjNDM7CQlrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoa3ZtLCAmYW1wO3JhbmdlKTsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoa3ZtKSkgewomIzQzOwkJX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCAmYW1wO3JhbmdlKTsKJiM0MzsJCWt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKGt2bSwgc2xvdCwgZmx1c2gpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCi12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwKLQkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQotewogCWlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpCi0JCWt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7Ci0JZWxzZQotCQlrdm1fbW11X3phcF9tZW1zbG90KGt2bSwgc2xvdCk7CiYjNDM7CQlfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pOwogfQogCiB2b2lkIGt2bV9tbXVfaW52YWxpZGF0ZV9tbWlvX3NwdGVzKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGdlbikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi43ZTA2ZWQxNmY0NzQ2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0zOTc5LDMwICYjNDM7Mzk3OSwyMSBAQCBzdGF0aWMgaW50IHNucF9iZWdpbl9wc2Moc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJcmV0dXJuIHNucF9kb19wc2Moc3ZtKTsKIH0KIAotLyoKLSAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC4KLSAqLwotc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7c3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKJiM0MzsJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpOwomIzQzOwl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJa3ZtX3Bmbl90IHBmbjsKLQlnZm5fdCBnZm47Ci0KLQlndWFyZChtdXRleCkoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7Ci0KLQlpZiAoIXN2bS0mZ3Q7c2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCkKLQkJcmV0dXJuOwotCi0Jc3ZtLSZndDtzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7CiAKLQkvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqLwotCXZjcHUtJmd0O2FyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTsKLQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7c3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpOwogCi0JLyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovCiYjNDM7CS8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQS4gKi8KIAlzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wudm1zYV9wYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJc3ZtLSZndDtzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwogCiAJLyoKIAkgKiBXaGVuIHJlcGxhY2luZyB0aGUgVk1TQSBkdXJpbmcgU0VWLVNOUCBBUCBjcmVhdGlvbiwKQEAgLTQwMTAsMTYgJiM0Mzs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqLwogCXZtY2JfbWFya19hbGxfZGlydHkoc3ZtLSZndDt2bWNiKTsKIAotCWlmICghVkFMSURfUEFHRShzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9ncGEpKQotCQlyZXR1cm47CiYjNDM7CS8qCiYjNDM7CSAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlCiYjNDM7CSAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS0mZ3Q7c2V2X2VzLnZtc2EuIEluCiYjNDM7CSAqIHRoZW9yeSwgc3ZtLSZndDtzZXZfZXMudm1zYSBjb3VsZCBiZSBmcmVlJiMzOTtkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dAomIzQzOwkgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlCiYjNDM7CSAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvCiYjNDM7CSAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGgKJiM0MzsJICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy4KJiM0MzsJICovCiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7CiAKLQlnZm4gPSBncGFfdG9fZ2ZuKHN2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSk7Ci0Jc3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwomIzQzOwlpZiAoIVZBTElEX1BBR0UoZ3BhKSkKJiM0MzsJCXJldHVybjsKIAogCXNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LSZndDtrdm0sIGdmbik7CiAJaWYgKCFzbG90KQogCQlyZXR1cm47CiAKJiM0MzsJbW11X3NlcSA9IGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CiAJLyoKIAkgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZQogCSAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuCkBAIC00MDI3LDI5ICYjNDM7NDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgTlVMTCkpCiAJCXJldHVybjsKIAomIzQzOwlyZWFkX2xvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIAkvKgotCSAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlCi0JICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLSZndDtzZXZfZXMudm1zYS4gSW4KLQkgKiB0aGVvcnksIHN2bS0mZ3Q7c2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXQKLQkgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlCi0JICogaGFuZGxlZCBkdXJpbmcgdGVhcmRvd24gcmF0aGVyIHRoYW4gZ3Vlc3QgYm9vdC4gIERlZmVycmluZyB0aGF0IGFsc28KLQkgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoCi0JICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy4KJiM0MzsJICogU2F2ZSB0aGUgZ3Vlc3QtcHJvdmlkZWQgR1BBLiAgSWYgcmV0cnkgaXMgbmVlZGVkLCB0aGVuIEtWTSB3aWxsIHRyeQomIzQzOwkgKiBhZ2FpbiB3aXRoIHRoZSBzYW1lIEdQQS4gIElmIHRoZSBWTVNBIGlzIHVzYWJsZSwgdGhlbiBLVk0gbmVlZHMgdG8KJiM0MzsJICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlCiYjNDM7CSAqIGZvciB0aGUgR1BBIGlzIGludmFsaWRhdGVkLgogCSAqLwotCXN2bS0mZ3Q7c2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTsKJiM0MzsJaWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpCiYjNDM7CQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7CiYjNDM7CWVsc2UKJiM0MzsJCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwomIzQzOwlyZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwlncGFfdCBncGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFzdm0tJmd0O3Nldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqLwomIzQzOwl2Y3B1LSZndDthcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7CiYjNDM7CWt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7CiAKLQkvKiBVc2UgdGhlIG5ldyBWTVNBICovCi0Jc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7CiYjNDM7CWdwYSA9IHN2bS0mZ3Q7c2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKIAotCS8qIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgKi8KLQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7CiYjNDM7CV9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpOwogCiAJLyoKLQkgKiBnbWVtIHBhZ2VzIGFyZW4mIzM5O3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlcwotCSAqIHRoZW4gY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHN2bS0mZ3Q7c2V2X2VzLnZtc2EgaXMgcGlubmVkCi0JICogdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLgomIzQzOwkgKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlIGZvciBDUkVBVEUgcmVxdWVzdHMsIGluZGljYXRlZCBieSBhIHZhbGlkCiYjNDM7CSAqIFZNU0EgR1BBLCBldmVuIGlmIGluc3RhbGxpbmcgdGhlIFZNU0EgZmFpbGVkLCBzbyB0aGF0IEtWTV9SVU4gd2lsbAomIzQzOwkgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmCiYjNDM7CSAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuCiAJICovCi0Ja3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKJiM0MzsJaWYgKFZBTElEX1BBR0UoZ3BhKSkKJiM0MzsJCWt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSAqc2V2X2VzID0gJmFtcDt0b19zdm0odmNwdSktJmd0O3Nldl9lczsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7c2V2X2VzLSZndDtzbnBfdm1zYV9tdXRleCk7CiYjNDM7CiYjNDM7CV9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBzZXZfZXMtJmd0O3NucF9ndWVzdF92bXNhX2dwYSk7CiB9CiAKIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKQEAgLTQxMDUsMTAgJiM0Mzs0MTQyLDEwIEBAIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJdGFyZ2V0X3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSA9IHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2luZm9fMjsKJiM0MzsJCXRhcmdldF9zdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2luZm9fMjsKIAkJYnJlYWs7CiAJY2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOgotCQl0YXJnZXRfc3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwomIzQzOwkJdGFyZ2V0X3N2bS0mZ3Q7c2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQl2Y3B1X3VuaW1wbCh2Y3B1LCAmIzM0O3ZtZ2V4aXQ6IGludmFsaWQgQVAgY3JlYXRpb24gcmVxdWVzdCBbJSN4XSBmcm9tIGd1ZXN0XG4mIzM0OywKQEAgLTQ3OTEsNiAmIzQzOzQ4MjgsOCBAQCBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdm0tJmd0O3Nldl9lcy52bXNhID0gcGFnZV9hZGRyZXNzKHZtc2FfcGFnZSk7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7CiAKIAl2Y3B1LSZndDthcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQgPSBzbnBfaXNfc2VjdXJlX3RzY19lbmFibGVkKHZjcHUtJmd0O2t2bSk7CiAKQEAgLTUxMTUsOSAmIzQzOzUxNTQsMzYgQEAgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpCiAKIAlyZXR1cm4gMDsKIH0KJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yICYjMzQ7aXMgU05QJiMzNDsgaXMgYS1vayBoZXJlLCB0aGFua3MgdG8gbW11X2xvY2suCiYjNDM7CSAqIFRoZSB2Q1BVJiMzOTtzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGUKJiM0MzsJICogdG8gb3RoZXIgdGFza3MsIGFuZCBjYW4gb25seSBiZWNvbWUgdmFsaWQgd2hpbGUgaG9sZGluZyBtbXVfbG9jaywKJiM0MzsJICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewomIzQzOwkJZ3BhX3QgZ3BhID0gdG9fc3ZtKHZjcHUpLSZndDtzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhOwomIzQzOwomIzQzOwkJaWYgKFZBTElEX1BBR0UoZ3BhKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZ3BhX3RvX2dmbihncGEpICZndDs9IHJhbmdlLSZndDtzdGFydCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZ3BhX3RvX2dmbihncGEpICZsdDsgcmFuZ2UtJmd0O2VuZCkKJiM0MzsJCQlrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7CiYjNDM7CX0KJiM0Mzt9CiAKLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpCiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CWt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTsKJiM0MzsJa3ZtX3Bmbl90IGVuZCA9IHN0YXJ0ICYjNDM7ICgxdWwgJmx0OyZsdDsgZm9saW9fb3JkZXIoZm9saW8pKTsKIAlrdm1fcGZuX3QgcGZuOwogCiAJaWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZWY2OWE1MWFiMjdmOTguLjdkM2RkMzcxOTA3MDQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTU0NDUsNiAmIzQzOzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sCiAJLm1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiwKIAkuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLAomIzQzOwkucmVsb2FkX3Ztc2EgPSBzZXZfc25wX3JlbG9hZF92bXNhLAogCiAJLnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20sCiAJLnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20sCkBAIC01NDYwLDkgJiM0Mzs1NDYxLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0gewogCS52Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMgPSBhdmljX3ZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucywKIAkuYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UgPSBzdm1fYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UsCiAKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCiAJLmdtZW1fcHJlcGFyZSA9IHNldl9nbWVtX3ByZXBhcmUsCi0JLmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsCiYjNDM7CS5nbWVtX2ludmFsaWRhdGVfcmFuZ2UgPSBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlLAomIzQzOwkuZ21lbV9mcmVlX2ZvbGlvID0gc2V2X2dtZW1fZnJlZV9mb2xpbywKIAkuZ21lbV9tYXhfbWFwcGluZ19sZXZlbCA9IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsLAomIzQzOyNlbmRpZgogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC0yNzEsNyAmIzQzOzI3MSw4IEBAIHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSB7CiAJdTY0IGdoY2JfcmVnaXN0ZXJlZF9ncGE7CiAKIAlzdHJ1Y3QgbXV0ZXggc25wX3Ztc2FfbXV0ZXg7IC8qIFVzZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiBWTVNBLiAqLwotCWdwYV90IHNucF92bXNhX2dwYTsKJiM0MzsJZ3BhX3Qgc25wX3BlbmRpbmdfdm1zYV9ncGE7CiYjNDM7CWdwYV90IHNucF9ndWVzdF92bXNhX2dwYTsKIAlib29sIHNucF9hcF93YWl0aW5nX2Zvcl9yZXNldDsKIAlib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTsKIH07CkBAIC05OTUsNiAmIzQzOzk5Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZCkKIHsKIAlyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogfQomIzQzO3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKQEAgLTEwMDgsNyAmIzQzOzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDsKIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKTsKIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTsKLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwomIzQzO3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7CiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTsKIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7CkBAIC0xMDM4LDcgJiM0MzsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW4KIHsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtODE2Nyw2ICYjNDM7ODE2Nyw4IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KJiM0MzsJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpKQomIzQzOwkJCWt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7CiAJfQogCiAJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8CkBAIC0xMDU5Miw5ICYjNDM7MTA1OTQsMTMgQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmQKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpCiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiB7Ci0Ja3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZSkoc3RhcnQsIGVuZCk7CiYjNDM7CWt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKGt2bSwgcmFuZ2UpOwomIzQzO30KJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJa3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pOwogfQogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBhYjhjZmFlYzgyZDMxZS4uNmI3Zjg4MDE1MDVkNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI2MDcsNyAmIzQzOzI2MDcsOCBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7CiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggODY2OTA2ODNiMmZlM2UuLjhlYzUwNDE5MzRkYmNmIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKQEAgLTE4NSw2ICYjNDM7MTg1LDEwIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAogCQl9CiAKIAkJZmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCAmYW1wO2dmbl9yYW5nZSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURQomIzQzOwkJa3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgJmFtcDtnZm5fcmFuZ2UpOwomIzQzOyNlbmRpZgogCX0KIAogCWlmIChmbHVzaCkKQEAgLTUyMywyMyAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbAogCXJldHVybiBNRl9ERUxBWUVEOwogfQogCi0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi1zdGF0aWMgdm9pZCBrdm1fZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCAwKTsKLQlrdm1fcGZuX3QgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7Ci0JaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwotCi0Ja3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKHBmbiwgcGZuICYjNDM7ICgxdWwgJmx0OyZsdDsgb3JkZXIpKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0gewogCS5kaXJ0eV9mb2xpbyA9IG5vb3BfZGlydHlfZm9saW8sCiAJLm1pZ3JhdGVfZm9saW8JPSBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvLAogCS5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbywKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKLQkuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sCiYjNDM7CS5mcmVlX2ZvbGlvID0ga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvLAogI2VuZGlmCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBQYXRjaCBmb3IgU0VWLVNOUCBhbmQgZ3Vlc3RfbWVtZmQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBvbiB4ODYsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBTRVYtU05QIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGd1ZXN0X21lbWZkYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9uYWxpdGllczogYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAsIGByZWxvYWRfdm1zYWAgd2l0aGluIGBrdm1feDg2X29wc2AuIEl0IGFsc28gcmVmYWN0b3JzIHBhcnRzIG9mIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UmIzM5O3JlIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBrdm1fbW11X3phcF9hbGxfZmFzdGAsIHNwbGl0dGluZyBpdCwgYW5kIGNoYW5nZXMgaW4gaG93IHRoZSBzaGFkb3cgbWVtb3J5IHNsb3RzIGFyZSBoYW5kbGVkIHZpYSBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgLCB3aGljaCBub3cgY29uc2lkZXJzIGBzbG90LSZndDtnbWVtLmZpbGVgLiBUaGVyZSBhcmUgZnVydGhlciB0d2Vha3MgdG8gYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYW5kIGFsc28gY2hhbmdlcyB0byBtZW1vcnkgaW52YWxpZGF0aW9uIHJvdXRpbmVzOiBzcGVjaWZpY2FsbHkgcmVmYWN0b3JpbmcgYGdtZW1faW52YWxpZGF0ZWAgaW50byBgZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYWxvbmcgd2l0aCB0aGUgYGdtZW1fZnJlZV9mb2xpb2AgZnVuY3Rpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBkZWZpbml0ZWx5IEtWTSBjb2RlLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBBTUQgU0VWLVNOUCBhbmQgZ3Vlc3RfbWVtZmQsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHNlY3VyZSB2aXJ0dWFsIG1hY2hpbmVzLiBTRVYtU05QIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgYnV0IHRoZSB1bmRlcmx5aW5nIEtWTSBjb2RlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmUgZnV6emVkLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBhIGtleSBxdWVzdGlvbiBhcmlzZXM6IGNhbiB3ZSBmdXp6IFNFVi1TTlAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGRvY3VtZW50YXRpb24gSSYjMzk7bSBsb29raW5nIGF0IHJhaXNlcyBhIGNvbmNlcm4gYWJvdXQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbnMuIENhbiBTRVYtU05QIGJlIHRyaWdnZXJlZCBpbiBRRU1VPyBJIGtub3cgUUVNVSBzdXBwb3J0cyBTRVYgYW5kIFNFVi1FUyBlbXVsYXRpb24sIGJ1dCBJJiMzOTttIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IFNFVi1TTlAuIEV2ZW4gaWYgdGhlIGVtdWxhdGlvbiBpc24mIzM5O3QgcGVyZmVjdCwgdGhlIEtWTSBpb2N0bHMgbWlnaHQgYmUgcmVhY2hhYmxlIHRvIHNvbWUgZXh0ZW50LgoKVGhlbiBJIHNlZSB0aGF0IGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYCBpcyB1c2VkIGluIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gVGhpcyBtZWFucyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHMgZm9yIFNFVi1TTlAuIFllcywgU0VWLVNOUCByZXF1aXJlcyBzcGVjaWZpYyBBTUQgRVBZQyBwcm9jZXNzb3JzLgoKU28sIGNhbiB3ZSBmdXp6IHRoaXMgaW4gR0NFPyBHQ0UgZG9lcyBvZmZlciBBTUQgaW5zdGFuY2VzLCBhbmQgc29tZSBvZiB0aGVtICptaWdodCogc3VwcG9ydCBTRVYtU05QLiBUaGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4gQWxzbywgSSBrbm93IHN5emthbGxlciBoZWF2aWx5IGZ1enplcyBLVk0sIHdoaWNoIGlzIGEgcHJvbWlzaW5nIHNpZ24uCgpJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBzcGVjaWZpY2FsbHksIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGFuZCBgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYC4gVGltZSBmb3IgYSBxdWljayBncmVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19LVk1fQU1EX1NFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ4LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjQ5OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1MC1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yND1rdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI2Omt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXHQmIzQzOz0gc3ZtL3Nldi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjcta3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHN2bS9oeXBlcnYub1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzMzMj1zdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MDQtXHRbU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTU11cdD0gYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0MDU6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDA2LVx0W1NWTV9FWElUX1ZNR0VYSVRdXHRcdFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNjIwPWludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2NDYtXHRcdHJldHVybiBucGZfaW50ZXJjZXB0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjQ3OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0OC1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDM5Mj1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkzLXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTUtXHRpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00Njg1PXN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDY5NC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDY5NTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ2OTYtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzI1PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0MjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDMtXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NjMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NjQ6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDY1LVx0LmdtZW1fcHJlcGFyZSA9IHNldl9nbWVtX3ByZXBhcmUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD02Nj1lbnVtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk3LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5LXN0cnVjdCBrdm1fc2V2X2luZm8ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTI2PXN0cnVjdCBrdm1fc3ZtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTM1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTM2LVx0c3RydWN0IGt2bV9zZXZfaW5mbyBzZXZfaW5mbztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fc3ZtICp0b19rdm1fc3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTM5My1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6Mzk0OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMzk1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zZXZfaW5mbyAqdG9fa3ZtX3Nldl9pbmZvKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk3OT12b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODItaW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTIxMD1TWU1fRlVOQ19FTkQoX19zdm1fdmNwdV9ydW4pXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUy0yMTEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUzoyMTI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjEzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTI4Mz1TWU1fRlVOQ19FTkQoX19zdm1fc2V2X2VzX3ZjcHVfcnVuKVxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM6Mjg0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0FNRF9TRVYgKi9cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZS0yLVxuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfS1ZNX0FNRF9TRVYpICYjNDM7PSBzZXYub1xuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpICYjNDM7PSBjbWRsaW5lLm9cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc3AtZGV2LmM9MjY2PXN0YXRpYyBpbnQgX19pbml0IHNwX21vZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3NwLWRldi5jLTMwMC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zcC1kZXYuYzozMDE6I2lmIElTX0JVSUxUSU4oQ09ORklHX0tWTV9BTUQpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19LVk1fQU1EX1NFVilcbmRyaXZlcnMvY3J5cHRvL2NjcC9zcC1kZXYuYy0zMDItaW50IF9faW5pdCBzZXZfbW9kdWxlX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM3Mj1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzMte1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMzNzQ6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzUtXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM0MTM9c3RhdGljIHZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fc25wKHZvaWQpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQxNC17XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQxNTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQxNi1cdGlmICghYW1kX2lvbW11X3NucF9lbilcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9NDAyMD1pbnQgYW1kX2lvbW11X3BjX3NldF9yZWcoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJhbmssIHU4IGNudHIsIHU4IGZ4biwgdTY0ICp2YWx1ZSlcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtNDAyNy1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzo0MDI4OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy00MDI5LXN0YXRpYyBpbnQgaW9tbXVfcGFnZV9tYWtlX3NoYXJlZCh2b2lkICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9Njk9c3RydWN0IGFtZF9pb21tdSAqZ2V0X2FtZF9pb21tdSh1bnNpZ25lZCBpbnQgaWR4KTtcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNzAtXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjcxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNzItaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9MTQ9ZW51bSBtaXNjX3Jlc190eXBlIHtcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoxNTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtMTYtXHQvKiogQE1JU0NfQ0dfUkVTX1NFVjogQU1EIFNFViBBU0lEcyByZXNvdXJjZSAqL1xuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTIwPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtaXNjX3Jlc19uYW1lW10gPSB7XG5rZXJuZWwvY2dyb3VwL21pc2MuYzoyMTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yMi1cdC8qIEFNRCBTRVYgQVNJRHMgcmVzb3VyY2UgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoqKkFuYWx5emluZyBUaGlzIEtWTS9BTUQgU0VWIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IEtWTS9BTUQgU0VWIHJlbGF0ZWQgZmlsZXM6IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgdGhlIGNvcmUgU1ZNIGNvZGUsIHRoZW4gc29tZSBvZiB0aGUgTU1VIGNvZGUgaW4gYG1tdS5jYCwgYW5kIGV2ZW4gdGhlIGBndWVzdF9tZW1mZC5jYCBmaWxlLiBJbnRlcmVzdGluZy4gU2VlbXMgbGlrZSB0aGV5IGFyZSByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBkZXRhaWxzIGhlcmUuIExvb2tzIGxpa2UgdGhlIGRldmVsb3BlciBpcyBhbHNvIHdvcmtpbmcgd2l0aCBgQ09ORklHX0tWTV9BTURfU0VWYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIHRoYXQgaXMgdGhlIG1haW4gY29uZmlnIG9wdGlvbi4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aGV5IGFyZSBhbHNvIHVzaW5nIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBOb3csIHRoYXQmIzM5O3MgYSBiaXQgbGVzcyBvYnZpb3VzLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGF0IGlzIHNvbWV0aGluZyB3ZSBjYW4gdG9nZ2xlIG9yIGlmIGl0JiMzOTtzIGp1c3QgYSBkZWZhdWx0IGJvb2xlYW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGVwZW5kZW5jeSBiZXR0ZXIgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTA9S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUxLSNlbmRpZlxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTI6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNTMtS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGVfcmFuZ2UpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNjgwPXN0cnVjdCBrdm1feDg2X29wcyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTA4LSNlbmRpZlxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxOTA5OiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTkxMC1cdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYzLVx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjQ6XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2NS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1ODI9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTk1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTk2OiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU5Ny1cdGlmIChzbG90LVx1MDAzZWdtZW0uZmlsZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1OTA9aW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRlcilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1OTUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1OTY6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTk3LXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNjA0PWxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MDgtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwOTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxMC12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMTA9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMTMtXG52aXJ0L2t2bS9LY29uZmlnOjExNDpjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbnZpcnQva3ZtL0tjb25maWctMTE1LSAgICAgICBib29sXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz0xNjA9c3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xODgtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjE4OTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTE5MC1cdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0ge1xuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNTMzLVx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGt2bV9nbWVtX2Vycm9yX2ZvbGlvLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo1MzQ6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01MzUtXHQuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgU0VWIFN1cHBvcnQqKgoKT2theSwgc28gYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBpcyBnZXR0aW5nIHB1bGxlZCBpbiBiZWNhdXNlIG9mIGBLVk1fQU1EX1NFVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbiB1bmRlcnN0YW5kaW5nICppdCogYXMgdGhlIGNvcmUgb2YgdGhlIHN1cHBvcnQuCgpIbW0sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGt2bV9tbXVfemFwX2FsbF9mYXN0YCBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEludGVyZXN0aW5nLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YC4gIFdhaXQgYSBtaW51dGUuLi4gYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCBpc24mIzM5O3Qgc3BlY2lmaWMgdG8gU0VWLCBpcyBpdD8gIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYnJvYWRlciBjb25uZWN0aW9uLiBJdCYjMzk7cyBub3QgKmp1c3QqIGFmZmVjdGluZyB0aGUgU0VWLXNwZWNpZmljIHBhdGguIExldCBtZSBnbyBjaGVjayB3aGF0JiMzOTtzIHVwIHdpdGggdGhhdCBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vbW11LmM9MjcwND12b2lkIGt2bV9hcmNoX21lbXNsb3RzX3VwZGF0ZWQoc3RydWN0IGt2bSAqa3ZtLCB1NjQgZ2VuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MDctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNzA4OnZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjcwOS1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jPTQ0Mj12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNDY2LVx0ICogTU9WRS9ERUxFVEU6XHRUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjQ2NzpcdCAqXHRcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KClcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy00NjgtXHQgKi9cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM9NDg3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTQ5MS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYzo0OTI6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNDkzLXtcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYz0xODE9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYy0xODctXG5hcmNoL21pcHMva3ZtL21pcHMuYzoxODg6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL21pcHMva3ZtL21pcHMuYy0xODktXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTIxMj12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yMjUtXHQgKiBNT1ZFL0RFTEVURTpcdFRoZSBvbGQgbWFwcGluZ3Mgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBjbGVhbmVkIHVwIGJ5XG5hcmNoL21pcHMva3ZtL21pcHMuYzoyMjY6XHQgKlx0XHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yMjctXHQgKi9cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUzNTQ9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfY29tbWl0X21lbW9yeV9yZWdpb25faHYoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTM2OS1cdCAqIEZvciBjaGFuZ2UgPT0gS1ZNX01SX01PVkUgb3IgS1ZNX01SX0RFTEVURSwgaGlnaGVyIGxldmVsc1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1MzcwOlx0ICogaGF2ZSBhbHJlYWR5IGNhbGxlZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpIHRvXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUzNzEtXHQgKiBmbHVzaCBzaGFkb3cgbWFwcGluZ3MuICBGb3IgS1ZNX01SX0NSRUFURSB3ZSBoYXZlIG5vXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NzI3PXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTczNC1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjczNTp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTczNi1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9MTMxPXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTM1LVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6MTM2OnZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTM3LVx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD03NjI9c3RhdGljIGlubGluZSB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKSB7fVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NzYzOnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NjQtXHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpIHt9XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NTc2PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1ODEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1ODI6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1ODMtXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDE2MD1zdGF0aWMgdm9pZCBrdm1fbW11X3Nsb3RfYXBwbHlfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4Mi1cdCAqIE1PVkUvREVMRVRFOiBUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTgzOlx0ICpcdFx0a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QoKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTg0LVx0ICpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODgtXHQgKiBNT1ZFL0RFTEVURTogVGhlIG9sZCBtYXBwaW5ncyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgYnlcbmFyY2gveDg2L2t2bS94ODYuYzoxMDE4OTpcdCAqXHRcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KCkuXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxOTAtXHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI1ND12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjU1LS8qIGZsdXNoIG1lbW9yeSB0cmFuc2xhdGlvbnMgcG9pbnRpbmcgdG8gJiMzOTtzbG90JiMzOTsgKi9cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMjU2OnZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTctXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE3OTg9c3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xODIzLVx0ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE4MjQ6XHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChrdm0sIG9sZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjUtXHRrdm1fYXJjaF9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKGt2bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtWTSBNTVUgTG9naWMgTW9kaWZpY2F0aW9ucyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgbWVtc2xvdCBpcyBkZWxldGVkIG9yIG1vdmVkLCB0cmlnZ2VyZWQgYnkgYGt2bV9pbnZhbGlkYXRlX21lbXNsb3RgIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpUaGUgY29kZSBpdHNlbGYgaGFzIGEgZmV3IGludGVyZXN0aW5nIHBhdGhzLiBFdmVuIHdpdGhvdXQgU0VWLVNOUCwgaXQmIzM5O3MgcmVhY2hhYmxlIGlmIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUgb3IgaWYgYHNsb3QtJmd0O2dtZW0uZmlsZWAgaXMgc2V0LiBOb3csIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUgdW5kZXIgdGhlIGRlZmF1bHQgS1ZNIFg4NiBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHdoZW4gYGt2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfREVGQVVMVF9WTWAgYW5kIGBrdm1fY2hlY2tfaGFzX3F1aXJrKGt2bSwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpYC4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBLVk0sIG1lYW5pbmcgdGhlc2UgY29kZSBwYXRocyBhcmUgaGlnaGx5IHJlbGV2YW50IGFuZCBkZWZpbml0ZWx5IGZ1enphYmxlLgoKVGhpcyBpcyBjb3JlIEtWTSBNTVUgbG9naWMuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHRhcmdldGluZy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBjb25maWd1cmUgc3l6a2FsbGVyIGZvciB0aGlzLgoKTGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWcgZmxhZ3MuICBJIHNlZSBgQ09ORklHX0tWTV9BTURfU0VWYC4gIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhbmQgc3BlY2lmaWNhbGx5IGNvdmVycyB0aGUgbW9kaWZpZWQgY29kZS4gU2hvdWxkIGJlIGxpc3RlZCBhcyBhIGNvbmZpZ3VyYXRpb24gaW4gYEVuYWJsZUNvbmZpZ3NgLiBIb3dldmVyLCBgS1ZNX0FNRF9TRVZgIGlzIHNwZWNpZmljIHRvIEFNRCwgYW5kIHN5emthbGxlciBkb2VzIHRlc3RzIG9uIEludGVsIGFuZCBBTUQuCgpUaGUgcHJvbXB0IG5vdGVzLCAmIzM0O09ubHkgbGlzdCB0aG9zZSB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBhbmQgYEtWTV9BTURfU0VWYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gCkkgYWxzbyBuZWVkIHRvIHNlZSB3aGF0IGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzLCBhbmQgbm90ZSB0aGF0IGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBLVk1fQU1EX1NFVmAuCgpOb3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgLCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4KClN5emthbGxlciBuZWVkcyB0aGUgZnVsbCBsaXN0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAgYW5kIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAgYXJlIHN0YXRpYywgYnV0IHN5emthbGxlciBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBmdXp6IHRoZW0gaWYgdGhleSBhcmUgaW4gdGhlIGJpbmFyeS4gU3l6a2FsbGVyIGZvY3VzZXMgb24gZnVuY3Rpb25zLCBzbyBsZXQmIzM5O3MgbGlzdCB0aGVtIGFsbDogYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuCgpJIGhhdmUgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRocy4gIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXMgY2FsbGVkIGR1cmluZyBtZW1zbG90IGRlbGV0aW9uIG9yIG1vdmVtZW50LCBzbyBub3QgYSBob3QgcGF0aC4gU2FtZSBmb3IgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBpbml0aWFsaXphdGlvbiBvciByYXJlIGV2ZW50IHBhdGhzLgoKSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgYENPTkZJR19LVk1fQU1EX1NFVmAgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRF9TRVYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjk2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyBhbmQgUGF0Y2ggU2NvcGUqKgoKQWxyaWdodCwgc28gYEtWTV9BTURfU0VWYCwgeWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZywgSSBrbm93IHRoYXQgb25lLiBNYWtlcyB5b3Ugd29uZGVyIHRob3VnaCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGF0ZWQgY29uZmlncyBpbiBwbGF5IGhlcmUgdGhhdCBJJiMzOTttIG1pc3Npbmc/IEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc2VjdXJpdHkgZmVhdHVyZXMuCgpIbW0sIHRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBPa2F5LCBzbyBpdOKAmXMgZGVhbGluZyB3aXRoIHRoZSBndWVzdCBtZW1vcnkgZmlsZSBkZXNjcmlwdG9yIGludGVyZmFjZSB3aXRoaW4gS1ZNLiBUaGlzIGhhcyBtZSB3b25kZXJpbmcgLSBpcyB0aGVyZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGhlIGBndWVzdF9tZW1mZGAgZnVuY3Rpb25hbGl0eSBpdHNlbGY/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGEgZmVhdHVyZSB0aGF0IGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGF0IGNvbXBpbGUgdGltZSBvciBydW50aW1lIGluZGVwZW5kZW50bHkgb2YgYEtWTV9BTURfU0VWYCwgYXMgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaXRzIGludGVncmF0aW9uIHdpdGggU0VWLiBUaGF04oCZcyBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgaW50by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1BSSVZBVEVfTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGd1ZXN0X21lbWZkYCBPcHRpb24gaW4gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb3IgdXNhZ2Ugb2YgYGd1ZXN0X21lbWZkYC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhpcyBpcyByZWxhdGVkIHRvIGEgS1ZNIGZlYXR1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgS1ZNIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGB2aXJ0L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgZm9yIGNvbmZpZ3VyaW5nIGZlYXR1cmVzIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGJlZ2luIG15IHNlYXJjaC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBLY29uZmlnYCBmaWxlIHRvIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyIG9uIHdoYXQgYGd1ZXN0X21lbWZkYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndWVzdF9tZW1mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM1OmFsbG93cyBtYXBwaW5nIGd1ZXN0X21lbWZkIG1lbW9yeSBpbnRvIGEgZ3Vlc3QuICBBbGwgZmllbGRzIHNoYXJlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzNi1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBpZGVudGljYWxseS4gIFVzZXJzcGFjZSBjYW4gc2V0IEtWTV9NRU1fR1VFU1RfTUVNRkRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzg6W2d1ZXN0X21lbWZkX29mZnNldCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM5LW11c3QgcG9pbnQgYXQgYSBmaWxlIGNyZWF0ZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQgb24gdGhlIGN1cnJlbnQgVk0sIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTE6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcdF9fdTMyIGd1ZXN0X21lbWZkO1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTMtXHRfX3UzMiBwYWQxO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcJiMzNDt2YWxpZFwmIzM0OyBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNjQ9V2hlbiBtYXBwaW5nIGEgZ2ZuIGludG8gdGhlIGd1ZXN0LCBLVk0gc2VsZWN0cyBzaGFyZWQgdnMuIHByaXZhdGUsIGkuZSBjb25zdW1lc1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJiMzOTtzIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MTA9VGhlIFwmIzM0O2ZsYWdzXCYjMzQ7IGZpZWxkIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgbXVzdCBiZSAmIzM5OzAmIzM5Oy5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQxNy06VHlwZTogdm0gaW9jdGxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDE4OjpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZChpbilcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMjp0aGF0IHJlZmVycyB0byBpdC4gIGd1ZXN0X21lbWZkIGZpbGVzIGFyZSByb3VnaGx5IGFuYWxvZ291cyB0byBmaWxlcyBjcmVhdGVkXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMzp2aWEgbWVtZmRfY3JlYXRlKCksIGUuZy4gZ3Vlc3RfbWVtZmQgZmlsZXMgbGl2ZSBpbiBSQU0sIGhhdmUgdm9sYXRpbGUgc3RvcmFnZSxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNTpcJiMzNDtyZWd1bGFyXCYjMzQ7IG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQyNi12aXJ0dWFsIG1hY2hpbmUgKHNlZSBiZWxvdyksIGNhbm5vdCBiZSBtYXBwZWQsIHJlYWQsIG9yIHdyaXR0ZW4gYnkgdXNlcnNwYWNlLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mjc6YW5kIGNhbm5vdCBiZSByZXNpemVkICAoZ3Vlc3RfbWVtZmQgZmlsZXMgZG8gaG93ZXZlciBzdXBwb3J0IFBVTkNIX0hPTEUpLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzAtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDMyLVx0X191NjQgc2l6ZTtcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzNi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDM3OkNvbmNlcHR1YWxseSwgdGhlIGlub2RlIGJhY2tpbmcgYSBndWVzdF9tZW1mZCBmaWxlIHJlcHJlc2VudHMgcGh5c2ljYWwgbWVtb3J5LFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXCYjMzQ7c3RydWN0IGt2bVwmIzM0Oy4gIFRoZVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDQzPW1pZ3JhdGlvbiBvZiBhIHZpcnR1YWwgbWFjaGluZS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDQ0LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ2OmFuZCBtb3JlIHNwZWNpZmljYWxseSB2aWEgdGhlIGd1ZXN0X21lbWZkIGFuZCBndWVzdF9tZW1mZF9vZmZzZXQgZmllbGRzIGluXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NzpcJiMzNDtzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlwmIzM0Oywgd2hlcmUgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGlzIHRoZSBvZmZzZXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ4OmludG8gdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgRm9yIGEgZ2l2ZW4gZ3Vlc3RfbWVtZmQgZmlsZSwgdGhlcmUgY2FuIGJlIGF0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDUwOmd1ZXN0X21lbWZkIHJhbmdlIGlzIG5vdCBhbGxvd2VkIChhbnkgbnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGNhbiBiZSBib3VuZCB0b1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NTE6YSBzaW5nbGUgZ3Vlc3RfbWVtZmQgZmlsZSwgYnV0IHRoZSBib3VuZCByYW5nZXMgbXVzdCBub3Qgb3ZlcmxhcCkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ1ND1zcGVjaWZpZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBDdXJyZW50bHkgZGVmaW5lZCBmbGFnczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Ni0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1NzogIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCAgICAgICAgRW5hYmxlIHVzaW5nIG1tYXAoKSBvbiB0aGUgZ3Vlc3RfbWVtZmQgZmlsZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0NjY9V2hlbiB0aGUgS1ZNIE1NVSBwZXJmb3JtcyBhIFBGTiBsb29rdXAgdG8gc2VydmljZSBhIGd1ZXN0IGZhdWx0IGFuZCB0aGUgYmFja2luZ1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njg6Y29uc3VtZWQgZnJvbSBndWVzdF9tZW1mZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgc2hhcmVkIG9yIGEgcHJpdmF0ZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NjktZmF1bHQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjYxMT1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVx0LypcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI2NDQ6XHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjY0NS1cdCAqIHRoZXJlIGFyZW4mIzM5O3QgYW55IENvQ28gVk1zIHRoYXQgc3VwcG9ydCBvbmx5IHByaXZhdGUgbWVtb3J5IG9uIGFybTY0LlxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwMy1cdFx0XHQvKlxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcdFx0XHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTA1LVx0XHRcdCAqIGNyZWF0ZSBhIGZvbGlvIHRvIGJhY2sgdGhlIG1lbW9yeS4gSW5mb3JtIHVzZXJzcGFjZS5cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNTctXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozMzU4Olx0XHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1OTpcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0dldCBwZm4mIzQzO29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcJiMzNDspO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzYwLVx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzItXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3MzpcdCAqIHBvcHVsYXRpbmcgYSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEFzc2VydCB0aGF0IHRoZSBzbG90IGlzIGJhY2tlZFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0Olx0ICogYnkgZ3Vlc3RfbWVtZmQgYW5kIHRoYXQgdGhlIGdtZW0gaW5zdGFuY2UmIzM5O3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzUtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIzOTg9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXHQgKiAgICAgIGJlZm9yZWhhbmQuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0Mzg6XHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzktXHQgKiAgICAgIGluIHRoZSBSTVAgdGFibGUuXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDUyPXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDA3NzpcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNzgtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxODM9dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVx0XHQgKiB1c2Vyc3BhY2UgbWF5IGFsc28gZnJlZSBnbWVtIHBhZ2VzIGR1cmluZyBydW4tdGltZSB2aWFcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcdFx0ICogaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zIG9uIHRoZSBndWVzdF9tZW1mZCwgc28gZmx1c2ggdGhlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXHRcdCAqIGNhY2hlIGVudHJpZXMgZm9yIHRoZXNlIHBhZ2VzIGJlZm9yZSBmcmVlJiMzOTtpbmcgdGhlbSBiYWNrIHRvXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwMTUtXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMDE2Olx0ICogYSBjb25jdXJyZW50IFBVTkNIX0hPTEUgb24gZ3Vlc3RfbWVtZmQgdHJpZ2dlcnMgcmVtb3ZhbCBvZiBTUFRFcy5cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjEzLVx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMjE0Olx0ICogdXBkYXRlcywgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soKSBwcmV2ZW50cyBndWVzdF9tZW1mZCB1cGRhdGVzLFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVx0ICogbW11X25vdGlmaWVyIGV2ZW50cyBjYW4mIzM5O3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSYjMzk7cyBpbnRlcm5hbFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDU3Mz1ib29sIGt2bV9hcmNoX25vX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTgwOiAqIEtWTSBkb2VzbiYjMzk7dCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1ODEtICogd2l0aCBwcml2YXRlIG1lbW9yeSAodGhlIHByaXZhdGUgdnMuIHNoYXJlZCB0cmFja2luZyBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1ODI6ICogZ3Vlc3RfbWVtZmQpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ0LVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDY6XHRfX3UzMiBndWVzdF9tZW1mZDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ny1cdF9fdTMyIHBhZDE7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NDU9c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1NDojZGVmaW5lIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjU4OnN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU5LVx0X191NjQgc2l6ZTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzg9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00My1cdF9fdTY0IHVzZXJzcGFjZV9hZGRyO1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0Olx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ1Olx0X191MzIgZ3Vlc3RfbWVtZmQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDYtXHRfX3UzMiBwYWQxO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjM1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXHRfSU9XUihLVk1JTywgIDB4ZDQsIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0OS1cdF9fdTY0IHNpemU7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xNTc9VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtOjE1ODpURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTU5LVRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaGFyZHdhcmVfZGlzYWJsZV90ZXN0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGdldC1yZWctbGlzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTQyPXN0YXRpYyB2b2lkIHRlc3RfbW1hcF9jb3coaW50IGZkLCBzaXplX3Qgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVx0bWVtID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzpcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcJiMzNDtDb3B5LW9uLXdyaXRlIG5vdCBhbGxvd2VkIGJ5IGd1ZXN0X21lbWZkLlwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTE3ND1zdGF0aWMgdm9pZCB0ZXN0X2NvbGxhcHNlKGludCBmZCwgdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTgyLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlx0ICogVG8gZXZlbiByZWFjaCB0aGUgcG9pbnQgd2hlcmUgdGhlIGd1ZXN0X21lbWZkIGZvbGlvcyB3aWxsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4NC1cdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjE4NTpcdCAqIHdpdGhpbiB0aGUgZ3Vlc3RfbWVtZmQgaGF2ZSB0byBiZSBhbGlnbmVkIHRvIHBtZF9zaXplLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXHQgKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MjA5Olx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMTAtXHQgKiBmaW5lLi4uXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz0zNDg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2JpbmRpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBmZCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1ODpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9pbnZhbGlkX3NpemVzKHN0cnVjdCBrdm1fdm0gKnZtLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTk6XHRcdFx0XHRcdFx0ICB1NjQgZ3Vlc3RfbWVtZmRfZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjQtXHRmb3IgKHNpemUgPSAxOyBzaXplIFx1MDAzYyBwYWdlX3NpemU7IHNpemUmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcdFx0ZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIG5vbi1wYWdlLWFsaWduZWQgcGFnZSBzaXplICYjMzk7MHglbHgmIzM5OyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzY4LVx0XHRcdCAgICBzaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzcyOnN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX211bHRpcGxlKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNzc6XHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc4LVx0VEVTVF9BU1NFUlQoZmQxICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM4NDpcdGZkMiA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBwYWdlX3NpemUgKiAyLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVx0VEVTVF9BU1NFUlQoZmQyICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDEte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVx0Zm9yIChmbGFnID0gQklUKDApOyBmbGFnOyBmbGFnIFx1MDAzY1x1MDAzYz0gMSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MDc6XHRcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOC1cdFx0aWYgKGZsYWcgXHUwMDI2IHZhbGlkX2ZsYWdzKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOS1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2U9IDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQxMDpcdFx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAmIzM5OzB4JWx4JiMzOTsgc2hvdWxkIHN1Y2NlZWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cdFx0XHRcdCAgICBmbGFnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTU6XHRcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJiMzOTsweCVseCYjMzk7IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXHRcdFx0XHQgICAgZmxhZyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcdGludCBmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChfX3ZtLCBfX2dtZW1fc2l6ZSwgX19mbGFncyk7XHRcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MjQtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQxOnN0YXRpYyB2b2lkIF9fdGVzdF9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NDIte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XHR0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZSh2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0NDpcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDQ1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzI6c3RhdGljIHZvaWQgdGVzdF9ndWVzdF9tZW1mZCh1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3My17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3NzpcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OTpcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cdGlmIChmbGFncyBcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19NTUFQKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg2LVx0aWYgKGZsYWdzIFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODc6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg4LVx0XHRcdFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NDkzPXN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodTggKm1lbSwgdTY0IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUwNTpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2d1ZXN0KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzQtXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1MzU6XHQgKiBLVk0gcmVxdWlyZXMgZ3Vlc3RfbWVtZmQgZmlsZXMgYW5kIG1lbXNsb3RzIHRvIGJlIHNpemVkIHRvIG11bHRpcGxlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXHQgKiBvZiB0aGUgaG9zdCBwYWdlIHNpemUuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXHRzaXplID0gbWF4X3Qoc2l6ZV90LCB2bS1cdTAwM2VwYWdlX3NpemUsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcdGZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBHVUVTVF9NRU1GRF9GTEFHX01NQVAgfFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NDAtXHRcdFx0XHRcdCAgICAgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3MC1cdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTcxOlx0ICogc3VwcG9ydCBndWVzdF9tZW1mZCBoYXZlIHRoYXQgc3VwcG9ydCBmb3IgdGhlIGRlZmF1bHQgVk0gdHlwZS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXHRmb3JfZWFjaF9zZXRfYml0KHZtX3R5cGUsIFx1MDAyNnZtX3R5cGVzLCBCSVRTX1BFUl9UWVBFKHZtX3R5cGVzKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4Olx0XHR0ZXN0X2d1ZXN0X21lbWZkKHZtX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU4MDpcdHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3QoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY2NT12b2lkIHZtX2NyZWF0ZV9pcnFjaGlwKHN0cnVjdCBrdm1fdm0gKnZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2Njc6c3RhdGljIGlubGluZSBpbnQgX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBzaXplLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NjgtXHRcdFx0XHRcdCAgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02Njkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XHRzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCBndWVzdF9tZW1mZCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjcxLVx0XHQuc2l6ZSA9IHNpemUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY3NTpcdHJldHVybiBfX3ZtX2lvY3RsKHZtLCBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELCBcdTAwMjZndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ni19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3OS1cdFx0XHRcdFx0dTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2ODE6XHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjkyLVx0XHRcdFx0Z3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XHRcdFx0XHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTQtaW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5NjpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDItXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NzAzOlx0XHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcxLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00OTktXHRmbGFncyA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NTAwOlx0aWYgKGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHNoYXBlKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTgwND1zdGF0aWMgdm9pZCBfX3ZtX21lbV9yZWdpb25fZGVsZXRlKHN0cnVjdCBrdm1fdm0gKnZtLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXHR9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODE5Olx0aWYgKChpbnQpcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCBcdTAwM2U9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlx0XHRrdm1fZnJlZV9mZChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NDgtXHRcdFx0XHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTUwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU2LVx0XHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTc6XHRcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcdFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXHR9O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NjctXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4Olx0XHRcdFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVx0aW50IHJldCA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIGZsYWdzLCBncGEsIHNpemUsIGh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XHRcdFx0XHRcdCAgICAgICBndWVzdF9tZW1mZCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlx0XHRpbnQgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4NS1cdGlmIChmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODY6XHRcdGlmIChndWVzdF9tZW1mZCBcdTAwM2MgMCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XHRcdFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg4Olx0XHRcdFRFU1RfQVNTRVJUKCFndWVzdF9tZW1mZF9vZmZzZXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4OTpcdFx0XHRcdCAgICBcJiMzNDtPZmZzZXQgbXVzdCBiZSB6ZXJvIHdoZW4gY3JlYXRpbmcgbmV3IGd1ZXN0X21lbWZkXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlx0XHRcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTEtXHRcdH0gZWxzZSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTctXHRcdFx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcdFx0XHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTktXHRcdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDE6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSBndWVzdF9tZW1mZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAzLVx0fSBlbHNlIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0Olx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwNS1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTExOS1cdFx0XCYjMzQ7ICBzbG90OiAldSBmbGFnczogMHgleFxcblwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMjA6XHRcdFwmIzM0OyAgZ3Vlc3RfcGh5c19hZGRyOiAweCVseCBzaXplOiAweCVsbHggZ3Vlc3RfbWVtZmQ6ICVkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMjEtXHRcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMjpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9MTI3ND12b2lkIHZtX2d1ZXN0X21lbV9mYWxsb2NhdGUoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBiYXNlLCB1NjQgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5MS1cdFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5MjpcdFx0ZmRfb2Zmc2V0ID0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgJiM0Mzsgb2Zmc2V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTMtXHRcdGxlbiA9IG1pbl90KHU2NCwgZW5kIC0gZ3BhLCByZWdpb24tXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplIC0gb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyOTU6XHRcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkLCBtb2RlLCBmZF9vZmZzZXQsIGxlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ni1cdFx0VEVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkIHRvICVzIGF0ICVseCAobGVuID0gJWx1KSwgZmQgPSAlZCwgbW9kZSA9ICV4LCBvZmZzZXQgPSAlbHhcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ny1cdFx0XHQgICAgcHVuY2hfaG9sZSA/IFwmIzM0O3B1bmNoIGhvbGVcJiMzNDsgOiBcJiMzNDthbGxvY2F0ZVwmIzM0OywgZ3BhLCBsZW4sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcdFx0XHQgICAgcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk5LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODYtXHRpZiAoc3VwcG9ydGVkX2ZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM4NzpcdFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXHRcdFx0XHRcdFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzkxOlx0XHRcdFx0XHRcdCAwLCBNRU1fUkVHSU9OX1NJWkUsIE5VTEwsIGd1ZXN0X21lbWZkLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzkyLVx0XHRURVNUX0FTU0VSVChyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTYtXHRcdFx0XHRcdFx0IEtWTV9NRU1fUkVBRE9OTFkgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTgtXHRcdFRFU1RfQVNTRVJUKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDAxOlx0XHRjbG9zZShndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMi1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTQwOT1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9tYXhfbWVtb3J5X3JlZ2lvbnModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1Ny0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NTg6c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbWVtZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cdFx0XHRcdCAgICAgc2l6ZV90IG9mZnNldCwgY29uc3QgY2hhciAqbXNnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIHZtLVx1MDAzZWt2bV9mZCwgMCwgXCYjMzQ7S1ZNIGZkIHNob3VsZCBmYWlsXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDc3Olx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cdTAwM2VmZCwgMCwgXCYjMzQ7Vk0mIzM5O3MgZmQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3OS1cdG1lbWZkID0ga3ZtX21lbWZkX2FsbG9jKE1FTV9SRUdJT05fU0laRSwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCAwLCBcJiMzNDtSZWd1bGFyIG1lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODEtXHRjbG9zZShtZW1mZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODMtXHR2bTIgPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NTpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFwmIzM0O090aGVyIFZNJiMzOTtzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5MjpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTMtXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBQQUdFX1NJWkU7IGkmIzQzOyYjNDM7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0OTQ6XHRcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIGksIFwmIzM0O1VuYWxpZ25lZCBvZmZzZXQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgTUVNX1JFR0lPTl9TSVpFICogNSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyMy1cdCAqIERlbGV0ZSB0aGUgZmlyc3QgbWVtc2xvdCwgYW5kIHRoZW4gYXR0ZW1wdCB0byByZWNyZWF0ZSBpdCBleGNlcHRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0Olx0ICogd2l0aCBhIFwmIzM0O2JhZFwmIzM0OyBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTI5LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlx0ICogVmVyaWZ5IHRoYXQgb3ZlcmxhcCBpbiB0aGUgZ3Vlc3RfbWVtZmQgYmluZGluZ3MgKGkuZS4gaW4gZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTMxLVx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNy1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90JiMzOTtzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0MS1cdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU0NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU1ODpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MjMwPXN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfcHVuY2hfaG9sZSh1NjQgYmFzZV9ncGEsIGJvb2wgcHJlY2lzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXHQgKiBDb252ZXJ0IHRoZSBlbnRpcmUgcmFuZ2UgdG8gcHJpdmF0ZSwgdGhpcyB0ZXN0Y2FzZSBpcyBhbGwgYWJvdXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjIzNzpcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJiMzOTt0IG5lZWRlZC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yNzQtXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mjc1Olx0ICogdGhlIGd1ZXN0X21lbWZkIGJhY2tpbmcgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gc2hhcmVkIGFuZCBwcml2YXRlLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI4MTpcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI4Mi1cdCAqIGZhdWx0ZWQgaW4sIG9uY2Ugd2l0aCBvbmx5IHRoZSB0YXJnZXQgcmFuZ2UgZmF1bHRlZCBpbi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0zNjk9c3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjM5NzpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1mZF9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjUtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI2Olx0ICogQWxsb2NhdGUgYW5kIGZyZWUgbWVtb3J5IGZyb20gdGhlIGd1ZXN0X21lbWZkIGFmdGVyIGNsb3NpbmcgdGhlIFZNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XHQgKiBmZC4gIFRoZSBndWVzdF9tZW1mZCBpcyBnaWZ0ZWQgYSByZWZlcmVuY2UgdG8gaXRzIG93bmluZyBWTSwgaS5lLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDI4LVx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjk6XHQgKiByZWZlcmVuY2UgdG8gdGhlIGd1ZXN0X21lbWZkIGlzIGFsc28gcHV0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVx0ICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2ODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGBndWVzdF9tZW1mZGAgSW1wbGVtZW50YXRpb24gaW4gS1ZNKioKCkFscmlnaHQsIHNvIGBndWVzdF9tZW1mZGAgaXMgZGlyZWN0bHkgdGllZCB0byBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCB3aXRoIHRoZSBgS1ZNX01FTV9HVUVTVF9NRU1GRGAgZmxhZy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgZXhwbGljaXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBpdCDigJMgaXQgc2VlbXMgdG8gYmUgZW5hYmxlZCBpbXBsaWNpdGx5IHdoZW4gYENPTkZJR19LVk1gIGlzIGFjdGl2ZSBhbmQgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGlzIGNvbXBhdGlibGUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBzb21ld2hhdC4KCk5vdywgd2FpdCBhIHNlY29uZC4uLiB0aGlzIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBBTUQmIzM5O3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBhbHNvIGJyaW5ncyBpbiBgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVgIGFuZCBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBIbW1tLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24gYmV0dGVyLiBJcyBgZ3Vlc3RfbWVtZmRgIGluZGlyZWN0bHkgZW5hYmxlZCBieSBgQ09ORklHX0tWTWAgd2hlbiAqZWl0aGVyKiBgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVgIG9yIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAgYXJlIHByZXNlbnQ/IE9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgY29uZGl0aW9uIEkgYW0gbWlzc2luZz8gSXQgc2VlbXMgbGlrZSBpdCBtdXN0IGJlIGVuYWJsZWQgY29uZGl0aW9uYWxseSBzb21laG93LCByYXRoZXIgdGhhbiBiZWluZyB1bml2ZXJzYWxseSBhdmFpbGFibGUuCgpJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUgaW1tZWRpYXRlbHkuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHNwb3QgZm9yIGEgY2xlYXIgZGVmaW5pdGlvbiBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbiBoZXJlLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IHRoZSByZWxhdGlvbnNoaXAgaXMgYmV0d2VlbiBgZ3Vlc3RfbWVtZmRgLCB0aGVzZSBgSEFWRV9LVk1fQVJDSF9HTUVNXypgIG1hY3JvcywgYW5kIHRoZSBvdmVyYWxsIGBDT05GSUdfS1ZNYCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1BSSVZBVEVfTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyNjMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBHdWVzdCBNZW1vcnkgU2hhcmluZyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBzaGFyaW5nIHdpdGhpbiBLVk0gZ3Vlc3RzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWVtZmRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzc29jaWF0ZWQgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBJdOKAmWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGJlaW5nIHVzZWQgb3IgY2FuIGJlIGVuYWJsZWQgZm9yIHRoZXNlIGd1ZXN0cy4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBlbnRyeSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSB3b3JrLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgaXQsIGFuZCBpZiBpdCYjMzk7cyByZWxldmFudCB0byB0aGlzIGN1cnJlbnQgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d1ZXN0X21lbWZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NzcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzM0PUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMiBpcyBhbiBleHRlbnNpb24gdG8gS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gdGhhdFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzU6YWxsb3dzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGludG8gYSBndWVzdC4gIEFsbCBmaWVsZHMgc2hhcmVkIHdpdGhcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzc6aW4gZmxhZ3MgdG8gaGF2ZSBLVk0gYmluZCB0aGUgbWVtb3J5IHJlZ2lvbiB0byBhIGdpdmVuIGd1ZXN0X21lbWZkIHJhbmdlIG9mXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzODpbZ3Vlc3RfbWVtZmRfb2Zmc2V0LCBndWVzdF9tZW1mZF9vZmZzZXQgJiM0MzsgbWVtb3J5X3NpemVdLiAgVGhlIHRhcmdldCBndWVzdF9tZW1mZFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzMzktbXVzdCBwb2ludCBhdCBhIGZpbGUgY3JlYXRlZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBvbiB0aGUgY3VycmVudCBWTSwgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNDE9Ym91bmRzIGNoZWNrcyBhcHBseSAodXNlIGNvbW1vbiBzZW5zZSkuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjsgLyogc3RhcnQgb2YgdGhlIHVzZXJzcGFjZSBhbGxvY2F0ZWQgbWVtb3J5ICovXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MTpcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUyOlx0X191MzIgZ3Vlc3RfbWVtZmQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cdF9fdTMyIHBhZDE7XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1NzpBIEtWTV9NRU1fR1VFU1RfTUVNRkQgcmVnaW9uIF9tdXN0XyBoYXZlIGEgdmFsaWQgZ3Vlc3RfbWVtZmQgKHByaXZhdGUgbWVtb3J5KSBhbmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU4LXVzZXJzcGFjZV9hZGRyIChzaGFyZWQgbWVtb3J5KS4gIEhvd2V2ZXIsIFwmIzM0O3ZhbGlkXCYjMzQ7IGZvciB1c2Vyc3BhY2VfYWRkciBzaW1wbHlcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM2NTp1c2Vyc3BhY2VfYWRkciB2cy4gZ3Vlc3RfbWVtZmQsIGJhc2VkIG9uIHRoZSBnZm4mIzM5O3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNjYtc3RhdGUuICBBdCBWTSBjcmVhdGlvbiB0aW1lLCBhbGwgbWVtb3J5IGlzIHNoYXJlZCwgaS5lLiB0aGUgUFJJVkFURSBhdHRyaWJ1dGVcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXCYjMzQ7ZmxhZ3NcJiMzNDsgZmllbGQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBtdXN0IGJlICYjMzk7MCYjMzk7LlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE3LTpUeXBlOiB2bSBpb2N0bFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTktOlJldHVybnM6IEEgZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3Jcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQyMT1LVk1fQ1JFQVRFX0dVRVNUX01FTUZEIGNyZWF0ZXMgYW4gYW5vbnltb3VzIGZpbGUgYW5kIHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3JcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIyOnRoYXQgcmVmZXJzIHRvIGl0LiAgZ3Vlc3RfbWVtZmQgZmlsZXMgYXJlIHJvdWdobHkgYW5hbG9nb3VzIHRvIGZpbGVzIGNyZWF0ZWRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjQtYW5kIGFyZSBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQuICBVbmxpa2VcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDI1OlwmIzM0O3JlZ3VsYXJcJiMzNDsgbWVtZmRfY3JlYXRlKCkgZmlsZXMsIGd1ZXN0X21lbWZkIGZpbGVzIGFyZSBib3VuZCB0byB0aGVpciBvd25pbmdcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI2LXZpcnR1YWwgbWFjaGluZSAoc2VlIGJlbG93KSwgY2Fubm90IGJlIG1hcHBlZCwgcmVhZCwgb3Igd3JpdHRlbiBieSB1c2Vyc3BhY2UsXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQyOC1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDMxOiAgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzItXHRfX3U2NCBzaXplO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDM2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzOC1pLmUuIGlzIGNvdXBsZWQgdG8gdGhlIHZpcnR1YWwgbWFjaGluZSBhcyBhIHRoaW5nLCBub3QgdG8gYSBcJiMzNDtzdHJ1Y3Qga3ZtXCYjMzQ7LiAgVGhlXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0NDM9bWlncmF0aW9uIG9mIGEgdmlydHVhbCBtYWNoaW5lLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NTpLVk0gY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgbWFwcGluZyBndWVzdF9tZW1mZCB2aWEgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDY6YW5kIG1vcmUgc3BlY2lmaWNhbGx5IHZpYSB0aGUgZ3Vlc3RfbWVtZmQgYW5kIGd1ZXN0X21lbWZkX29mZnNldCBmaWVsZHMgaW5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlwmIzM0O3N0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yXCYjMzQ7LCB3aGVyZSBndWVzdF9tZW1mZF9vZmZzZXQgaXMgdGhlIG9mZnNldFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDQ5LW1vc3Qgb25lIG1hcHBpbmcgcGVyIHBhZ2UsIGkuZS4gYmluZGluZyBtdWx0aXBsZSBtZW1vcnkgcmVnaW9ucyB0byBhIHNpbmdsZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NTA6Z3Vlc3RfbWVtZmQgcmFuZ2UgaXMgbm90IGFsbG93ZWQgKGFueSBudW1iZXIgb2YgbWVtb3J5IHJlZ2lvbnMgY2FuIGJlIGJvdW5kIHRvXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDUyLVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDU2LSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1OC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ2NzpndWVzdF9tZW1mZCBoYXMgdGhlIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCBzZXQsIHRoZW4gdGhlIGZhdWx0IHdpbGwgYWx3YXlzIGJlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ2ODpjb25zdW1lZCBmcm9tIGd1ZXN0X21lbWZkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgYSBzaGFyZWQgb3IgYSBwcml2YXRlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNjExPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDMtXHQvKlxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcdCAqIE9ubHkgc3VwcG9ydCBndWVzdF9tZW1mZCBiYWNrZWQgbWVtc2xvdHMgd2l0aCBtYXBwYWJsZSBtZW1vcnksIHNpbmNlXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQ1LVx0ICogdGhlcmUgYXJlbiYjMzk7dCBhbnkgQ29DbyBWTXMgdGhhdCBzdXBwb3J0IG9ubHkgcHJpdmF0ZSBtZW1vcnkgb24gYXJtNjQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTQ3ND1pbnQga3ZtX2hhbmRsZV92bmNyX2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVx0XHRcdC8qXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTA0Olx0XHRcdCAqIEZvciBndWVzdF9tZW1mZCwgdGhpcyBpbmRpY2F0ZXMgdGhhdCBpdCBmYWlsZWQgdG9cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1MDUtXHRcdFx0ICogY3JlYXRlIGEgZm9saW8gdG8gYmFjayB0aGUgbWVtb3J5LiBJbmZvcm0gdXNlcnNwYWNlLlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzM0Nj1zdGF0aWMgdTgga3ZtX2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cdH0gZWxzZSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTg6XHRcdC8qIFRPRE86IENhbGwgaW50byBndWVzdF9tZW1mZCBvbmNlIGh1Z2VwYWdlcyBhcmUgc3VwcG9ydGVkLiAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozMzU5Olx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7R2V0IHBmbiYjNDM7b3JkZXIgZnJvbSBndWVzdF9tZW1mZFwmIzM0Oyk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXHRcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE0Nz1pbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cdCAqIE1hcHBpbmcgYSBwcmUtZGV0ZXJtaW5lZCBwcml2YXRlIHBmbiBpcyBpbnRlbmRlZCBvbmx5IGZvciB1c2Ugd2hlblxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTczOlx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzQ6XHQgKiBieSBndWVzdF9tZW1mZCBhbmQgdGhhdCB0aGUgZ21lbSBpbnN0YW5jZSYjMzk7cyBpbnZhbGlkYXRlX2xvY2sgaXMgaGVsZC5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3NS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjM5OD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzNy1cdCAqICAgICAgYmVmb3JlaGFuZC5cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcdCAqICAgMykgVGhlIFBGTiBvZiB0aGUgZ3Vlc3RfbWVtZmQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gc2V0IHRvIHByaXZhdGVcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzOS1cdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQwNTI9c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc2LVx0ICogZmFpbCBpbnN0ZWFkIG9mIGJsb2NraW5nIGluZGVmaW5pdGVseSBhbmQgaGFuZ2luZyB0aGUgdkNQVSwgZS5nLiBpZlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3Olx0ICogdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgcGFnZSBpcyB1bmF2YWlsYWJsZS5cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3OC1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTE4Mz12b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzUtXHRcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjM2Olx0XHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIzNy1cdFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUmIzM5O2luZyB0aGVtIGJhY2sgdG9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI5NTI9c3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cdCAqIHRoZSBURFgtTW9kdWxlLCBhbmQgdG8gZW5zdXJlIHRoZSBuby1mYWlsIE1NVSBwYXRocyBzdWNjZWVkLCBlLmcuIGlmXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMwMTY6XHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMDE3LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMTg5PXN0YXRpYyBpbnQgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXHQgKiBiZXR3ZWVuIG1hcHBpbmcgdGhlIHBmbiBhbmQgbm93LCBidXQgc2xvdHNfbG9jayBwcmV2ZW50cyBtZW1zbG90XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMyMTQ6XHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTUtXHQgKiBtbXVfbm90aWZpZXIgZXZlbnRzIGNhbiYjMzk7dCByZWFjaCBTLUVQVCBlbnRyaWVzLCBhbmQgS1ZNJiMzOTtzIGludGVybmFsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTczPWJvb2wga3ZtX2FyY2hfbm9fcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTc5LS8qXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1ODA6ICogS1ZNIGRvZXNuJiMzOTt0IHlldCBzdXBwb3J0IGluaXRpYWxpemluZyBndWVzdF9tZW1mZCBtZW1vcnkgYXMgc2hhcmVkIGZvciBWTXNcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU4MS0gKiB3aXRoIHByaXZhdGUgbWVtb3J5ICh0aGUgcHJpdmF0ZSB2cy4gc2hhcmVkIHRyYWNraW5nIG5lZWRzIHRvIGJlIG1vdmVkIGludG9cbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1ODMtICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDQtXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NTpcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcdF9fdTMyIGd1ZXN0X21lbWZkO1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ3LVx0X191MzIgcGFkMTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY0NT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1My1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjU0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU1LSNkZWZpbmUgR1VFU1RfTUVNRkRfRkxBR19NTUFQXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU3LVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXHRfX3U2NCBzaXplO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQzLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDQ6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XHRfX3UzMiBndWVzdF9tZW1mZDtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ni1cdF9fdTMyIHBhZDE7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2MzU9c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDMtXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0NDojZGVmaW5lIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0Ny1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ4OnN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVx0X191NjQgc2l6ZTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gZ3Vlc3RfbWVtZmRfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBoYXJkd2FyZV9kaXNhYmxlX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE5Nj1URVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gZ2V0LXJlZy1saXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtOjE5NzpURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gZ3Vlc3RfbWVtZmRfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xOTgtVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NDI9c3RhdGljIHZvaWQgdGVzdF9tbWFwX2NvdyhpbnQgZmQsIHNpemVfdCBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDYtXHRtZW0gPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLCBmZCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3Olx0VEVTVF9BU1NFUlQobWVtID09IE1BUF9GQUlMRUQsIFwmIzM0O0NvcHktb24td3JpdGUgbm90IGFsbG93ZWQgYnkgZ3Vlc3RfbWVtZmQuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDgtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODItXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODM6XHQgKiBUbyBldmVuIHJlYWNoIHRoZSBwb2ludCB3aGVyZSB0aGUgZ3Vlc3RfbWVtZmQgZm9saW9zIHdpbGxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVx0ICogZ2V0IGNvbGxhcHNlZCwgYm90aCB0aGUgdXNlcnNwYWNlIGFkZHJlc3MgYW5kIHRoZSBvZmZzZXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTg1Olx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Ni1cdCAqXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMDgtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XHQgKiBBZHZpc2luZyB0aGUgdXNlIG9mIGh1Z2UgcGFnZXMgaW4gZ3Vlc3RfbWVtZmQgc2hvdWxkIGJlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTIxMC1cdCAqIGZpbmUuLi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTM0OD1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfYmluZGluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGZkLCBzaXplX3Qgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM1Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzU4OnN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXMoc3RydWN0IGt2bV92bSAqdm0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcdFx0XHRcdFx0XHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzYwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cdGZvciAoc2l6ZSA9IDE7IHNpemUgXHUwMDNjIHBhZ2Vfc2l6ZTsgc2l6ZSYjNDM7JiM0MzspIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzY1Olx0XHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2Ni1cdFx0VEVTVF9BU1NFUlQoZmQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzY3Olx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggbm9uLXBhZ2UtYWxpZ25lZCBwYWdlIHNpemUgJiMzOTsweCVseCYjMzk7IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjgtXHRcdFx0ICAgIHNpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNzI6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUoc3RydWN0IGt2bV92bSAqdm0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcdGZkMSA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBwYWdlX3NpemUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzgtXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFwmIzM0O21lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM4My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6Mzg0Olx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODUtXHRURVNUX0FTU0VSVChmZDIgIT0gLTEsIFwmIzM0O21lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDAwOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Moc3RydWN0IGt2bV92bSAqdm0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwMS17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDYtXHRmb3IgKGZsYWcgPSBCSVQoMCk7IGZsYWc7IGZsYWcgXHUwMDNjXHUwMDNjPSAxKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwNzpcdFx0ZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCBmbGFnKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA4LVx0XHRpZiAoZmxhZyBcdTAwMjYgdmFsaWRfZmxhZ3MpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVx0XHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzZT0gMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDEwOlx0XHRcdFx0ICAgIFwmIzM0O2d1ZXN0X21lbWZkKCkgd2l0aCBmbGFnICYjMzk7MHglbHgmIzM5OyBzaG91bGQgc3VjY2VlZFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDExLVx0XHRcdFx0ICAgIGZsYWcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDE0LVx0XHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQxNTpcdFx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAmIzM5OzB4JWx4JiMzOTsgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNi1cdFx0XHRcdCAgICBmbGFnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTQyMj1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDIzOlx0aW50IGZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKF9fdm0sIF9fZ21lbV9zaXplLCBfX2ZsYWdzKTtcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDE6c3RhdGljIHZvaWQgX190ZXN0X2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MzpcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX211bHRpcGxlKHZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0Olx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyh2bSwgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NDUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3MjpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkKHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3Olx0dGVzdF9ndWVzdF9tZW1mZF9mbGFncyh2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5Olx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDgwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDgyLVx0aWYgKGZsYWdzIFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4MzpcdFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXHRpZiAoZmxhZ3MgXHUwMDI2IEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcdFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVAgfFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXHRcdFx0XHQgICAgICAgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA2LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cdCAqIFVzZSB0aGUgbWF4IG9mIHRoZSBob3N0IG9yIGd1ZXN0IHBhZ2Ugc2l6ZSBmb3IgYWxsIG9wZXJhdGlvbnMsIGFzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzNTpcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNi1cdCAqIG9mIHRoZSBob3N0IHBhZ2Ugc2l6ZS5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzOC1cdHNpemUgPSBtYXhfdChzaXplX3QsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM5Olx0ZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHNpemUsIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cdFx0XHRcdFx0ICAgICBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTU2MT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVx0ICogTm90IGFsbCBhcmNoaXRlY3R1cmVzIHN1cHBvcnQgS1ZNX0NBUF9WTV9UWVBFUy4gSG93ZXZlciwgdGhvc2UgdGhhdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1NzE6XHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzItXHQgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3Ny1cdGZvcl9lYWNoX3NldF9iaXQodm1fdHlwZSwgXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1Nzg6XHRcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTgwOlx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01ODEtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY2NzpzdGF0aWMgaW5saW5lIGludCBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cdFx0XHRcdFx0ICB1NjQgZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY3MDpcdHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIGd1ZXN0X21lbWZkID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXHRcdC5zaXplID0gc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc1Olx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFx1MDAyNmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc2LX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2Nzg6c3RhdGljIGlubGluZSBpbnQgdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc5LVx0XHRcdFx0XHR1NjQgZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY4MC17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcdGludCBmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBmbGFncyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY4Mi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY5MT12b2lkIHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTItXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5MzpcdFx0XHRcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk1LVx0XHRcdFx0IGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTcwMT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwMi1cdFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo3MDM6XHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDM4PXZvaWQga3ZtX3NldF9maWxlc19ybGltaXQodTMyIG5yX3ZjcHVzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NDcwOnN0YXRpYyBib29sIGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NzEte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz00Nzk9c3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cdGZsYWdzID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo1MDA6XHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTUwMS1cdFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9ODA0PXN0YXRpYyB2b2lkIF9fdm1fbWVtX3JlZ2lvbl9kZWxldGUoc3RydWN0IGt2bV92bSAqdm0sXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTgxOC1cdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XHRpZiAoKGludClyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkIFx1MDAzZT0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MjA6XHRcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTgyMS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTQ3PWludCBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk0OC1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTQ5Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTYtXHRcdC51c2Vyc3BhY2VfYWRkciA9ICh1aW50cHRyX3QpaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1NzpcdFx0Lmd1ZXN0X21lbWZkID0gZ3Vlc3RfbWVtZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU4Olx0XHQuZ3Vlc3RfbWVtZmRfb2Zmc2V0ID0gZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1OS1cdH07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk2Nj12b2lkIHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cdFx0XHRcdGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5Njg6XHRcdFx0XHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTY5LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzAtXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk3MTpcdFx0XHRcdFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3Mi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODAtXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5ODE6XHRcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODIte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVx0aWYgKGZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcdFx0aWYgKGd1ZXN0X21lbWZkIFx1MDAzYyAwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NzpcdFx0XHR1MzIgZ3Vlc3RfbWVtZmRfZmxhZ3MgPSAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODg6XHRcdFx0VEVTVF9BU1NFUlQoIWd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5Olx0XHRcdFx0ICAgIFwmIzM0O09mZnNldCBtdXN0IGJlIHplcm8gd2hlbiBjcmVhdGluZyBuZXcgZ3Vlc3RfbWVtZmRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwOTA6XHRcdFx0Z3Vlc3RfbWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbV9zaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5MS1cdFx0fSBlbHNlIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cdFx0XHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDk4Olx0XHRcdGd1ZXN0X21lbWZkID0ga3ZtX2R1cChndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5OS1cdFx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDI6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmRfb2Zmc2V0ID0gZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDMtXHR9IGVsc2Uge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDQ6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSAtMTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTA1LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTE5LVx0XHRcJiMzNDsgIHNsb3Q6ICV1IGZsYWdzOiAweCV4XFxuXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcdFx0XCYjMzQ7ICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMS1cdFx0cmV0LCBlcnJubywgc2xvdCwgZmxhZ3MsIGdwYSwgcmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjkxLVx0XHRvZmZzZXQgPSBncGEgLSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlx0XHRmZF9vZmZzZXQgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCAmIzQzOyBvZmZzZXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cdFx0bGVuID0gbWluX3QodTY0LCBlbmQgLSBncGEsIHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5NTpcdFx0cmV0ID0gZmFsbG9jYXRlKHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCwgbGVuKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVx0XHRURVNUX0FTU0VSVCghcmV0LCBcJiMzNDtmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk3LVx0XHRcdCAgICBwdW5jaF9ob2xlID8gXCYjMzQ7cHVuY2ggaG9sZVwmIzM0OyA6IFwmIzM0O2FsbG9jYXRlXCYjMzQ7LCBncGEsIGxlbixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk4Olx0XHRcdCAgICByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkLCBtb2RlLCBmZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM4Ni1cdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6Mzg3Olx0XHRpbnQgZ3Vlc3RfbWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM4OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5MC1cdFx0XHRcdFx0XHQgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTE6XHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXHRcdFRFU1RfQVNTRVJUKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cdFx0XHRcdFx0XHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5NzpcdFx0XHRcdFx0XHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5OC1cdFx0VEVTVF9BU1NFUlQociBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XHRcdGNsb3NlKGd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDU3LSNpZmRlZiBfX3g4Nl82NF9fXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDU5LVx0XHRcdFx0ICAgICBzaXplX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICptc2cpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00Njc9c3RhdGljIHZvaWQgdGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ3NjpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgdm0tXHUwMDNla3ZtX2ZkLCAwLCBcJiMzNDtLVk0gZmQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIHZtLVx1MDAzZWZkLCAwLCBcJiMzNDtWTSYjMzk7cyBmZCBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc5LVx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4MDpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFwmIzM0O1JlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4MS1cdGNsb3NlKG1lbWZkKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4My1cdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NDpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtMiwgTUVNX1JFR0lPTl9TSVpFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1Olx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXCYjMzQ7T3RoZXIgVk0mIzM5O3MgZ3Vlc3RfbWVtZmQoKSBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5My1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIFBBR0VfU0laRTsgaSYjNDM7JiM0MzspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcdFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgaSwgXCYjMzQ7VW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5NS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTUwMz1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9vdmVybGFwcGluZ19wcml2YXRlX21lbW9yeV9yZWdpb25zKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUxMzpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUgKiA1LCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTIzLVx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MjQ6XHQgKiB3aXRoIGEgXCYjMzQ7YmFkXCYjMzQ7IG9mZnNldCB0aGF0IHJlc3VsdHMgaW4gb3ZlcmxhcCBpbiB0aGUgZ3Vlc3RfbWVtZmQoKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTI1LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjktXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MzA6XHQgKiBWZXJpZnkgdGhhdCBvdmVybGFwIGluIHRoZSBndWVzdF9tZW1mZCBiaW5kaW5ncyAoaS5lLiBpbiBndWVzdF9tZW1mZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXHQgKiBmaWxlIG9mZnNldHMpLCBidXQgX25vdF8gaW4gdGhlIEdQQSBzcGFjZSwgZmFpbHMgd2l0aCAtRUVYSVNULlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVx0VEVTVF9BU1NFUlQociA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1Mzg6XHRcdCAgICBcJiMzNDtPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NDA6XHQvKiBBbmQgbm93IHRoZSBiYWNrIGhhbGYgb2YgdGhlIG90aGVyIHNsb3QmIzM5O3MgZ3Vlc3RfbWVtZmQgYmluZGluZy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQxLVx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0NS1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1Ny1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTU4Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTY2Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0yMzA9c3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wdW5jaF9ob2xlKHU2NCBiYXNlX2dwYSwgYm9vbCBwcmVjaXNlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzNi1cdCAqIENvbnZlcnQgdGhlIGVudGlyZSByYW5nZSB0byBwcml2YXRlLCB0aGlzIHRlc3RjYXNlIGlzIGFsbCBhYm91dFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3Olx0ICogcHVuY2hpbmcgaG9sZXMgaW4gZ3Vlc3RfbWVtZmQsIGkuZS4gc2hhcmVkIG1hcHBpbmdzIGFyZW4mIzM5O3QgbmVlZGVkLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjM4LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MjcxPXN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodTY0IGJhc2VfZ3BhKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cdCAqIFJ1biB0aGUgY29udmVyc2lvbiB0ZXN0IHR3aWNlLCB3aXRoIGFuZCB3aXRob3V0IGRvaW5nIGZhbGxvY2F0ZSgpIG9uXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzoyNzU6XHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yNzYtXHQgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODAtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlx0ICogUnVuIHRoZSBQVU5DSF9IT0xFIHRlc3QgdHdpY2UgdG9vLCBvbmNlIHdpdGggdGhlIGVudGlyZSBndWVzdF9tZW1mZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgyLVx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTM2OT1zdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdmNwdXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzk2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mzk3Olx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzk4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0MjY6XHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNzpcdCAqIGZkLiAgVGhlIGd1ZXN0X21lbWZkIGlzIGdpZnRlZCBhIHJlZmVyZW5jZSB0byBpdHMgb3duaW5nIFZNLCBpLmUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXHQgKiBzaG91bGQgcHJldmVudCB0aGUgVk0gZnJvbSBiZWluZyBmdWxseSBkZXN0cm95ZWQgdW50aWwgdGhlIGxhc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyOTpcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MzAtXHQgKi9cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDk4NgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA3OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGd1ZXN0X21lbWZkYCDigJMgdGhhdCYjMzk7cyBqdXN0IGEgS1ZNIGZlYXR1cmUsIG5vdGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLiBTbywgdGhlIGtleSBjb25maWcgdG8gdGFyZ2V0IGhlcmUgYXBwZWFycyB0byBiZSBgS1ZNX0FNRF9TRVZgLiBBbmQgeWVzLCBgS1ZNX0FNRF9TRVZgIGlzIGEgc2ltcGxlIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuIEl0IGxvb2tzIGxpa2UgaXQgc2VsZWN0cyBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLCB3aGljaCBzb3VuZHMgcHJvbWlzaW5nLgoKTm93LCBsZXQmIzM5O3Mgc2NydXRpbml6ZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFdlIGhhdmUgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuCgpXYWl0LCBJIG5lZWQgdG8gaW5jbHVkZSBgX19zZXZfc25wX3JlbG9hZF92bXNhYCBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIG9mIHRoZXNlIGFyZSByZWFjaGFibGUgcmVnYXJkbGVzcyBvZiBTRVYgYmVpbmcgZW5hYmxlZC4gYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCBpcyBjYWxsZWQgZHVyaW5nIG1lbXNsb3QgbW92ZW1lbnQgb3IgZGVsZXRpb24sIHNvIHRoYXQmIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgemFwIGZ1bmN0aW9ucywgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAgYW5kIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGFyZSByZWFjaGFibGUgdG9vIGlmIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUuIEhvd2V2ZXIsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCBhbmQgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIHNlZW0gU0VWLVNOUCBzcGVjaWZpYy4gU2ltaWxhcmx5LCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgcmVsaWVzIG9uIGBfX19fc2V2X3NucF9ndWVzdChrdm0pYCBhbmQgYHNldl9nbWVtX2ZyZWVfZm9saW9gIGNoZWNrcyBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAsIGNvbmZpcm1pbmcgdGhlaXIgU0VWLVNOUCBleGNsdXNpdml0eS4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgYWxzbyBpbmplY3RpbmcgU0VWLVNOUCBzcGVjaWZpYyBjb2RlLiBUaGF0JiMzOTtzIGEgcGVyZmVjdCBjb21iaW5hdGlvbiBmb3IgZnV6emluZy4gV2UgaGF2ZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYm90aCBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCAobWVtc2xvdCBmbHVzaGluZywgYW5kIHphcCBmdW5jdGlvbnMpIGFuZCB0aGUgbmV3IFNFVi1TTlAgYmVoYXZpb3IgKFZNU0EgcmVsb2FkaW5nLCBhbmQgcHJvdGVjdGVkIGd1ZXN0IHN0YXRlIGluaXRpYWxpc2F0aW9uKS4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFsmIzM0O0tWTVxfQU1EXF9TRVYmIzM0O1xdKioKKiAgICoqRm9jdXNTeW1ib2xzOioqCgogICAgKiAgIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAKICAgICogICBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmYAogICAgKiAgIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAKICAgICogICBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAKICAgICogICBgX19zZXZfc25wX3JlbG9hZF92bXNhYAogICAgKiAgIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYAogICAgKiAgIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYAoqICAgKipSZWFzb25pbmc6KiogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0XF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDsKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgcnVsZSBvdXQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MuIGBLVk1gIGlzIGZhciB0b28gYnJvYWQsIGBLVk1fQU1EYCBpcyB0b28gZ2VuZXJpYy4gWWVzLCBgS1ZNX0FNRF9TRVZgIGxvb2tzIGxpa2UgdGhlIHBlcmZlY3QgYW5kIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZy4gT2theSwgSSYjMzk7bSByZWFkeSB0byBjb21taXQgdG8gdGhpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo0OTo1MC4wOTQ5NzMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMjkxNTc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdFwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmXCIsXG4gICAgXCJfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZlwiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiLFxuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbnMgYW5kIFZNU0EgcmVsb2FkaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NDk6NTAuMDk0OTc4MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDM1MDY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE0ZGViYzYwY2M0NzMyOTZhZGRjOTU2MjliMjA0MzJkMWNmMjU4MDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDE6NDk6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uZmQwODQ1NGM3NTUzNjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5AQCAtMTM0LDYgKzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbilcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwodm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpXFxuK0tWTV9YODZfT1BfT1BUSU9OQUwocmVsb2FkX3Ztc2EpXFxuIEtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKVxcbiBLVk1fWDg2X09QKGNoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24pXFxuIEtWTV9YODZfT1AoYXBpY19pbml0X3NpZ25hbF9ibG9ja2VkKVxcbkBAIC0xNDUsOSArMTQ2LDE0IEBAIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ZyZWVfZm9saW8pXFxuKyNlbmRpZlxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcXG4tS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXFxuICNlbmRpZlxcbiBcXG4gI3VuZGVmIEtWTV9YODZfT1BcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBiNTE3MjU3YTYzMTUzMi4uZWU0N2EwZDFmZWI5OTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMTIyLDYgKzEyMiw4IEBAXFxuIFxcdEtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcXG4gI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcXFxcXFxuIFxcdEtWTV9BUkNIX1JFUV9GTEFHUygzMiwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcXG4rI2RlZmluZSBLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQgXFxcXFxcbitcXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzMsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXFxuICNkZWZpbmUgS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFIFxcXFxcXG4gXFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDM0LCBLVk1fUkVRVUVTVF9XQUlUKVxcbiBcXG5AQCAtMTg3OCw2ICsxODgwLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcXG4gXFx0aW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xcbiBcXHRpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XFxuIFxcdHZvaWQgKCpndWVzdF9tZW1vcnlfcmVjbGFpbWVkKShzdHJ1Y3Qga3ZtICprdm0pO1xcbitcXHR2b2lkICgqcmVsb2FkX3Ztc2EpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBcXHRpbnQgKCpnZXRfZmVhdHVyZV9tc3IpKHUzMiBtc3IsIHU2NCAqZGF0YSk7XFxuIFxcbkBAIC0xOTAwLDggKzE5MDMsMTMgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcXG4gXFxuIFxcdGd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXHR2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIFxcdGludCAoKmdtZW1fcHJlcGFyZSkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xcbi1cXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbitcXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK1xcdHZvaWQgKCpnbWVtX2ZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbisjZW5kaWZcXG4gXFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCA2YzEzZGE5NDJiZmNjYy4uOGQzNmNhMGEzODBiNWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNjkyMSwyMCArNjkyMSwxMSBAQCBzdGF0aWMgdm9pZCBrdm1femFwX29ic29sZXRlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtX21tdV9jb21taXRfemFwX3BhZ2Uoa3ZtLCBcXHUwMDI2aW52YWxpZF9saXN0KTtcXG4gfVxcbiBcXG4tLypcXG4tICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxcbi0gKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXFxuLSAqXFxuLSAqIEl0J3MgcmVxdWlyZWQgd2hlbiBtZW1zbG90IGlzIGJlaW5nIGRlbGV0ZWQgb3IgVk0gaXMgYmVpbmdcXG4tICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xcbi0gKiBub3QgdXNlIGFueSByZXNvdXJjZSBvZiB0aGUgYmVpbmctZGVsZXRlZCBzbG90IG9yIGFsbCBzbG90c1xcbi0gKiBhZnRlciBjYWxsaW5nIHRoZSBmdW5jdGlvbi5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFxuLVxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXHR0cmFjZV9rdm1fbW11X3phcF9hbGxfZmFzdChrdm0pO1xcbiBcXG4gXFx0LypcXG5AQCAtNjk3MSw4ICs2OTYyLDEyIEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMpO1xcbiBcXG4gXFx0a3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhrdm0pO1xcbit9XFxuIFxcbi1cXHR3cml0ZV91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitzdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogWmFwIHRoZSBpbnZhbGlkYXRlZCBURFAgTU1VIHJvb3RzLCBhbGwgU1BURXMgbXVzdCBiZSBkcm9wcGVkIGJlZm9yZVxcbkBAIC02OTg2LDYgKzY5ODEsMjQgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCB0cnVlKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxcbisgKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXFxuKyAqXFxuKyAqIEl0J3MgcmVxdWlyZWQgd2hlbiBtZW1zbG90IGlzIGJlaW5nIGRlbGV0ZWQgb3IgVk0gaXMgYmVpbmdcXG4rICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xcbisgKiBub3QgdXNlIGFueSByZXNvdXJjZSBvZiB0aGUgYmVpbmctZGVsZXRlZCBzbG90IG9yIGFsbCBzbG90c1xcbisgKiBhZnRlciBjYWxsaW5nIHRoZSBmdW5jdGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XFxuK1xcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pO1xcbit9XFxuK1xcbiBpbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRpbnQgciwgaTtcXG5AQCAtNzU2MCw4ICs3NTczLDE0IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0a3ZtX21tdV9yZW1vdGVfZmx1c2hfb3JfemFwKGt2bSwgXFx1MDAyNmludmFsaWRfbGlzdCwgZmx1c2gpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlIHJhbmdlID0ge1xcbiBcXHRcXHQuc2xvdCA9IHNsb3QsXFxuQEAgLTc1NzMsMjQgKzc1OTIsMjMgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGJvb2wgZmx1c2g7XFxuIFxcbiBcXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tXFx0Zmx1c2ggPSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnJhbmdlKTtcXG4tXFx0a3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goa3ZtLCBzbG90LCBmbHVzaCk7XFxuLVxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuLX1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4te1xcbi1cXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKGt2bSwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpO1xcbi19XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4rXFx0aWYgKHNsb3QtXFx1MDAzZWdtZW0uZmlsZSlcXG4rXFx0XFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXFx1MDAyNnJhbmdlKTtcXG4rI2VuZGlmXFxuK1xcbitcXHRpZiAoa3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChrdm0pKSB7XFxuK1xcdFxcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZihrdm0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcXHUwMDI2cmFuZ2UpO1xcbitcXHRcXHRrdm1fbW11X3phcF9tZW1zbG90X3BhZ2VzX2FuZF9mbHVzaChrdm0sIHNsb3QsIGZsdXNoKTtcXG4rXFx0fVxcbitcXG4rXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFxuLXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi17XFxuIFxcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpXFxuLVxcdFxcdGt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0a3ZtX21tdV96YXBfbWVtc2xvdChrdm0sIHNsb3QpO1xcbitcXHRcXHRfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV9tbXVfaW52YWxpZGF0ZV9tbWlvX3NwdGVzKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGdlbilcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA3NGZiMTU1NTFlODNmYS4uN2UwNmVkMTZmNDc0NjEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMzk3OSwzMCArMzk3OSwyMSBAQCBzdGF0aWMgaW50IHNucF9iZWdpbl9wc2Moc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdHJldHVybiBzbnBfZG9fcHNjKHN2bSk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC5cXG4tICovXFxuLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4rXFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xcbitcXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRrdm1fcGZuX3QgcGZuO1xcbi1cXHRnZm5fdCBnZm47XFxuLVxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNnN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcXG4tXFxuLVxcdGlmICghc3ZtLVxcdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTtcXG4gXFxuLVxcdC8qIE1hcmsgdGhlIHZDUFUgYXMgb2ZmbGluZSBhbmQgbm90IHJ1bm5hYmxlICovXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTtcXG4tXFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbiBcXG4tXFx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovXFxuK1xcdC8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQS4gKi9cXG4gXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gcmVwbGFjaW5nIHRoZSBWTVNBIGR1cmluZyBTRVYtU05QIEFQIGNyZWF0aW9uLFxcbkBAIC00MDEwLDE2ICs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKi9cXG4gXFx0dm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tXFx1MDAzZXZtY2IpO1xcbiBcXG4tXFx0aWYgKCFWQUxJRF9QQUdFKHN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSkpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0LypcXG4rXFx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcXG4rXFx0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVxcdTAwM2VzZXZfZXMudm1zYS4gSW5cXG4rXFx0ICogdGhlb3J5LCBzdm0tXFx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcXG4rXFx0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxcbitcXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xcbitcXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXFxuK1xcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXFxuK1xcdCAqL1xcbitcXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xcbiBcXG4tXFx0Z2ZuID0gZ3BhX3RvX2dmbihzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEpO1xcbi1cXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdGlmICghVkFMSURfUEFHRShncGEpKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS1cXHUwMDNla3ZtLCBnZm4pO1xcbiBcXHRpZiAoIXNsb3QpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG1tdV9zZXEgPSBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0c21wX3JtYigpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcXG4gXFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cXG5AQCAtNDAyNywyOSArNDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0cmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFx0LypcXG4tXFx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcXG4tXFx0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVxcdTAwM2VzZXZfZXMudm1zYS4gSW5cXG4tXFx0ICogdGhlb3J5LCBzdm0tXFx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcXG4tXFx0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxcbi1cXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xcbi1cXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXFxuLVxcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXFxuK1xcdCAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnlcXG4rXFx0ICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvXFxuK1xcdCAqIHRyYWNrIHRoZSBHUEEgc28gdGhhdCB0aGUgVk1TQSBjYW4gYmUgcmVsb2FkZWQgaWYgdGhlIGJhY2tpbmcgcGFnZVxcbitcXHQgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC5cXG4gXFx0ICovXFxuLVxcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTtcXG4rXFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcXG4rXFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcXG4rfVxcbitcXG4rLypcXG4rICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuK1xcdGdwYV90IGdwYTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKCFzdm0tXFx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xcbitcXG4rXFx0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xcbitcXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xcbiBcXG4tXFx0LyogVXNlIHRoZSBuZXcgVk1TQSAqL1xcbi1cXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcXG4rXFx0Z3BhID0gc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGE7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbiBcXG4tXFx0LyogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSAqL1xcbi1cXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XFxuK1xcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogZ21lbSBwYWdlcyBhcmVuJ3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlc1xcbi1cXHQgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tXFx1MDAzZXNldl9lcy52bXNhIGlzIHBpbm5lZFxcbi1cXHQgKiB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuXFxuK1xcdCAqIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgZm9yIENSRUFURSByZXF1ZXN0cywgaW5kaWNhdGVkIGJ5IGEgdmFsaWRcXG4rXFx0ICogVk1TQSBHUEEsIGV2ZW4gaWYgaW5zdGFsbGluZyB0aGUgVk1TQSBmYWlsZWQsIHNvIHRoYXQgS1ZNX1JVTiB3aWxsXFxuK1xcdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcXG4rXFx0ICogdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgcGFnZSBpcyB1bmF2YWlsYWJsZS5cXG4gXFx0ICovXFxuLVxcdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XFxuK1xcdGlmIChWQUxJRF9QQUdFKGdwYSkpXFxuK1xcdFxcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcXG4rfVxcbitcXG4rdm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgKnNldl9lcyA9IFxcdTAwMjZ0b19zdm0odmNwdSktXFx1MDAzZXNldl9lcztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2c2V2X2VzLVxcdTAwM2VzbnBfdm1zYV9tdXRleCk7XFxuK1xcbitcXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVxcdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuQEAgLTQxMDUsMTAgKzQxNDIsMTAgQEAgc3RhdGljIGludCBzZXZfc25wX2FwX2NyZWF0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0dGFyZ2V0X3N2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcXG4rXFx0XFx0dGFyZ2V0X3N2bS1cXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOlxcbi1cXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbitcXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHR2Y3B1X3VuaW1wbCh2Y3B1LCBcXFwidm1nZXhpdDogaW52YWxpZCBBUCBjcmVhdGlvbiByZXF1ZXN0IFslI3hdIGZyb20gZ3Vlc3RcXFxcblxcXCIsXFxuQEAgLTQ3OTEsNiArNDgyOCw4IEBAIGludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgPSBwYWdlX2FkZHJlc3Modm1zYV9wYWdlKTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4gXFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCA9IHNucF9pc19zZWN1cmVfdHNjX2VuYWJsZWQodmNwdS1cXHUwMDNla3ZtKTtcXG4gXFxuQEAgLTUxMTUsOSArNTE1NCwzNiBAQCBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciBcXFwiaXMgU05QXFxcIiBpcyBhLW9rIGhlcmUsIHRoYW5rcyB0byBtbXVfbG9jay5cXG4rXFx0ICogVGhlIHZDUFUncyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlXFxuK1xcdCAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssXFxuK1xcdCAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcXG4rXFx0XFx0Z3BhX3QgZ3BhID0gdG9fc3ZtKHZjcHUpLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhO1xcbitcXG4rXFx0XFx0aWYgKFZBTElEX1BBR0UoZ3BhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZ3BhX3RvX2dmbihncGEpIFxcdTAwM2U9IHJhbmdlLVxcdTAwM2VzdGFydCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZ3BhX3RvX2dmbihncGEpIFxcdTAwM2MgcmFuZ2UtXFx1MDAzZWVuZClcXG4rXFx0XFx0XFx0a3ZtX21ha2VfcmVxdWVzdF9hbmRfa2ljayhLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xcbitcXHR9XFxuK31cXG4gXFxuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdGt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcXG4rXFx0a3ZtX3Bmbl90IGVuZCA9IHN0YXJ0ICsgKDF1bCBcXHUwMDNjXFx1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpO1xcbiBcXHRrdm1fcGZuX3QgcGZuO1xcbiBcXG4gXFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC01NDQ1LDYgKzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxcbiBcXHQubWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uLFxcbiBcXHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxcbitcXHQucmVsb2FkX3Ztc2EgPSBzZXZfc25wX3JlbG9hZF92bXNhLFxcbiBcXG4gXFx0LnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20sXFxuIFxcdC52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLFxcbkBAIC01NDYwLDkgKzU0NjEsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcdC52Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMgPSBhdmljX3ZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyxcXG4gXFx0LmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLFxcbiBcXG4rI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbiBcXHQuZ21lbV9wcmVwYXJlID0gc2V2X2dtZW1fcHJlcGFyZSxcXG4tXFx0LmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsXFxuK1xcdC5nbWVtX2ludmFsaWRhdGVfcmFuZ2UgPSBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlLFxcbitcXHQuZ21lbV9mcmVlX2ZvbGlvID0gc2V2X2dtZW1fZnJlZV9mb2xpbyxcXG4gXFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCxcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC0yNzEsNyArMjcxLDggQEAgc3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlIHtcXG4gXFx0dTY0IGdoY2JfcmVnaXN0ZXJlZF9ncGE7XFxuIFxcbiBcXHRzdHJ1Y3QgbXV0ZXggc25wX3Ztc2FfbXV0ZXg7IC8qIFVzZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiBWTVNBLiAqL1xcbi1cXHRncGFfdCBzbnBfdm1zYV9ncGE7XFxuK1xcdGdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhO1xcbitcXHRncGFfdCBzbnBfZ3Vlc3Rfdm1zYV9ncGE7XFxuIFxcdGJvb2wgc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0O1xcbiBcXHRib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTtcXG4gfTtcXG5AQCAtOTk1LDYgKzk5Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiB9XFxuK3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5AQCAtMTAwOCw3ICsxMDEwLDggQEAgaW50IHNldl9kZXZfZ2V0X2F0dHIodTMyIGdyb3VwLCB1NjQgYXR0ciwgdTY0ICp2YWwpO1xcbiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcXG4gdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xcbiBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XFxuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbit2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xcbit2b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHNldl9mcmVlX2RlY3J5cHRlZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp2bXNhKTtcXG5AQCAtMTAzOCw3ICsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW5cXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCAwNjI2ZTgzNWU5ZWI3Ny4uOWRmNmFjZjlhOTgyZTYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTgxNjcsNiArODE2Nyw4IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSkpXFxuK1xcdFxcdFxcdGt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KSB8fCByZXFfaW50X3dpbiB8fFxcbkBAIC0xMDU5Miw5ICsxMDU5NCwxMyBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxcbit2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4ge1xcbi1cXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlKShzdGFydCwgZW5kKTtcXG4rXFx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XFxuK31cXG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRrdm1feDg2X2NhbGwoZ21lbV9mcmVlX2ZvbGlvKShmb2xpbyk7XFxuIH1cXG4gI2VuZGlmXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uNmI3Zjg4MDE1MDVkNWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTI2MDcsNyArMjYwNyw4IEBAIGxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbit2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC0xODUsNiArMTg1LDEwIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRmbHVzaCB8PSBrdm1fbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIFxcdTAwMjZnZm5fcmFuZ2UpO1xcbitcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbitcXHRcXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoa3ZtLCBcXHUwMDI2Z2ZuX3JhbmdlKTtcXG4rI2VuZGlmXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmbHVzaClcXG5AQCAtNTIzLDIzICs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcXG4gXFx0cmV0dXJuIE1GX0RFTEFZRUQ7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4tc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi17XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XFxuLVxcdGt2bV9wZm5fdCBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4tXFx0aW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbi1cXG4tXFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKHBmbiwgcGZuICsgKDF1bCBcXHUwMDNjXFx1MDAzYyBvcmRlcikpO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHtcXG4gXFx0LmRpcnR5X2ZvbGlvID0gbm9vcF9kaXJ0eV9mb2xpbyxcXG4gXFx0Lm1pZ3JhdGVfZm9saW9cXHQ9IGt2bV9nbWVtX21pZ3JhdGVfZm9saW8sXFxuIFxcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi1cXHQuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sXFxuK1xcdC5mcmVlX2ZvbGlvID0ga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvLFxcbiAjZW5kaWZcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjQ5OjUwLjYxNTkxNDQyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc1MDgyMDk0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdFwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmXCIsXG4gICAgXCJfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZlwiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiLFxuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbnMgYW5kIFZNU0EgcmVsb2FkaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNGRlYmM2MGNjNDczMjk2YWRkYzk1NjI5YjIwNDMyZDFjZjI1ODA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDE6NDk6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMzkuLmZkMDg0NTRjNzU1MzY0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTEzNCw2ICsxMzQsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMKG1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxuK0tWTV9YODZfT1BfT1BUSU9OQUwocmVsb2FkX3Ztc2EpXG4gS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXG4gS1ZNX1g4Nl9PUChjaGVja19lbXVsYXRlX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1AoYXBpY19pbml0X3NpZ25hbF9ibG9ja2VkKVxuQEAgLTE0NSw5ICsxNDYsMTQgQEAgS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcbiBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbylcbisjZW5kaWZcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcbi1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcbiAjZW5kaWZcbiBcbiAjdW5kZWYgS1ZNX1g4Nl9PUFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiNTE3MjU3YTYzMTUzMi4uZWU0N2EwZDFmZWI5OTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTIyLDYgKzEyMiw4IEBAXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzEsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4gI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxuKyNkZWZpbmUgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEIFxcXG4rXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzMsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4gI2RlZmluZSBLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUgXFxcbiBcdEtWTV9BUkNIX1JFUV9GTEFHUygzNCwgS1ZNX1JFUVVFU1RfV0FJVClcbiBcbkBAIC0xODc4LDYgKzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0aW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XG4rXHR2b2lkICgqcmVsb2FkX3Ztc2EpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gXHRpbnQgKCpnZXRfZmVhdHVyZV9tc3IpKHUzMiBtc3IsIHU2NCAqZGF0YSk7XG4gXG5AQCAtMTkwMCw4ICsxOTAzLDEzIEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXG4gXHRndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBcdHZvaWQgKigqYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XG4tXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbitcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbitcdHZvaWQgKCpnbWVtX2ZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuKyNlbmRpZlxuIFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDZjMTNkYTk0MmJmY2NjLi44ZDM2Y2EwYTM4MGI1YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02OTIxLDIwICs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIGt2bV96YXBfb2Jzb2xldGVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX21tdV9jb21taXRfemFwX3BhZ2Uoa3ZtLCBcdTAwMjZpbnZhbGlkX2xpc3QpO1xuIH1cbiBcbi0vKlxuLSAqIEZhc3QgaW52YWxpZGF0ZSBhbGwgc2hhZG93IHBhZ2VzIGFuZCB1c2UgbG9jay1icmVhayB0ZWNobmlxdWVcbi0gKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXG4tICpcbi0gKiBJdCdzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4tICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xuLSAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzXG4tICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4tICovXG4tc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4tXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHR0cmFjZV9rdm1fbW11X3phcF9hbGxfZmFzdChrdm0pO1xuIFxuIFx0LypcbkBAIC02OTcxLDggKzY5NjIsMTIgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMpO1xuIFxuIFx0a3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhrdm0pO1xuK31cbiBcbi1cdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK3N0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4gXHQvKlxuIFx0ICogWmFwIHRoZSBpbnZhbGlkYXRlZCBURFAgTU1VIHJvb3RzLCBhbGwgU1BURXMgbXVzdCBiZSBkcm9wcGVkIGJlZm9yZVxuQEAgLTY5ODYsNiArNjk4MSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGxfZmFzdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIHRydWUpO1xuIH1cbiBcbisvKlxuKyAqIEZhc3QgaW52YWxpZGF0ZSBhbGwgc2hhZG93IHBhZ2VzIGFuZCB1c2UgbG9jay1icmVhayB0ZWNobmlxdWVcbisgKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXG4rICpcbisgKiBJdCdzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4rICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xuKyAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzXG4rICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4rICovXG4rc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZihrdm0pO1xuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pO1xuK31cbitcbiBpbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpbnQgciwgaTtcbkBAIC03NTYwLDggKzc1NzMsMTQgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goc3RydWN0IGt2bSAqa3ZtLFxuIFx0a3ZtX21tdV9yZW1vdGVfZmx1c2hfb3JfemFwKGt2bSwgXHUwMDI2aW52YWxpZF9saXN0LCBmbHVzaCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4rfVxuK1xuK3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSByYW5nZSA9IHtcbiBcdFx0LnNsb3QgPSBzbG90LFxuQEAgLTc1NzMsMjQgKzc1OTIsMjMgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRib29sIGZsdXNoO1xuIFxuIFx0d3JpdGVfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLVx0Zmx1c2ggPSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2cmFuZ2UpO1xuLVx0a3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goa3ZtLCBzbG90LCBmbHVzaCk7XG4tXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi19XG4gXG4tc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLXtcbi1cdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKGt2bSwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpO1xuLX1cbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4rXHRpZiAoc2xvdC1cdTAwM2VnbWVtLmZpbGUpXG4rXHRcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFx1MDAyNnJhbmdlKTtcbisjZW5kaWZcbitcbitcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpIHtcbitcdFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZyYW5nZSk7XG4rXHRcdGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKGt2bSwgc2xvdCwgZmx1c2gpO1xuK1x0fVxuK1xuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4tdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLXtcbiBcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpXG4tXHRcdGt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XG4tXHRlbHNlXG4tXHRcdGt2bV9tbXVfemFwX21lbXNsb3Qoa3ZtLCBzbG90KTtcbitcdFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoa3ZtKTtcbiB9XG4gXG4gdm9pZCBrdm1fbW11X2ludmFsaWRhdGVfbW1pb19zcHRlcyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBnZW4pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi43ZTA2ZWQxNmY0NzQ2MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0zOTc5LDMwICszOTc5LDIxIEBAIHN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiBzbnBfZG9fcHNjKHN2bSk7XG4gfVxuIFxuLS8qXG4tICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbitcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbitcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbi1cdGdmbl90IGdmbjtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbi1cbi1cdGlmICghc3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XG4gXG4tXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XG4tXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbiBcbi1cdC8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQSAqL1xuK1x0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBLiAqL1xuIFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sXG5AQCAtNDAxMCwxNiArNDAwMSwyNyBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqL1xuIFx0dm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tXHUwMDNldm1jYik7XG4gXG4tXHRpZiAoIVZBTElEX1BBR0Uoc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEpKVxuLVx0XHRyZXR1cm47XG4rXHQvKlxuK1x0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcbitcdCAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS1cdTAwM2VzZXZfZXMudm1zYS4gSW5cbitcdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbitcdCAqIHRoYXQgaW52b2x2ZXMgY2xlYW51cHMgbGlrZSBmbHVzaGluZyBjYWNoZXMsIHdoaWNoIHdvdWxkIGlkZWFsbHkgYmVcbitcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4rXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4rXHQgKiBtaW5pbWFsIFNOUC1zcGVjaWZpYyBjaGFuZ2VzLlxuK1x0ICovXG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XG4gXG4tXHRnZm4gPSBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKTtcbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0aWYgKCFWQUxJRF9QQUdFKGdwYSkpXG4rXHRcdHJldHVybjtcbiBcbiBcdHNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2ZuKTtcbiBcdGlmICghc2xvdClcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRzbXBfcm1iKCk7XG4rXG4gXHQvKlxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG5AQCAtNDAyNywyOSArNDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbitcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFx0Lypcbi1cdCAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlXG4tXHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXHUwMDNlc2V2X2VzLnZtc2EuIEluXG4tXHQgKiB0aGVvcnksIHN2bS1cdTAwM2VzZXZfZXMudm1zYSBjb3VsZCBiZSBmcmVlJ2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0XG4tXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXG4tXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xuLVx0ICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aFxuLVx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cbitcdCAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnlcbitcdCAqIGFnYWluIHdpdGggdGhlIHNhbWUgR1BBLiAgSWYgdGhlIFZNU0EgaXMgdXNhYmxlLCB0aGVuIEtWTSBuZWVkcyB0b1xuK1x0ICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlXG4rXHQgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC5cbiBcdCAqL1xuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xuK1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBncGE7XG4rXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xuK1x0ZWxzZVxuK1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4rXHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1xuK1x0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbit9XG4rXG4rLypcbisgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4rICovXG4rc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4rXHRncGFfdCBncGE7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG4rXG4rXHRpZiAoIXN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xuK1xuK1x0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xuK1x0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiBcbi1cdC8qIFVzZSB0aGUgbmV3IFZNU0EgKi9cbi1cdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbitcdGdwYSA9IHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGE7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuLVx0LyogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSAqL1xuLVx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuK1x0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIGdwYSk7XG4gXG4gXHQvKlxuLVx0ICogZ21lbSBwYWdlcyBhcmVuJ3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlc1xuLVx0ICogdGhlbiBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBlbnN1cmUgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGlzIHBpbm5lZFxuLVx0ICogdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLlxuK1x0ICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZFxuK1x0ICogVk1TQSBHUEEsIGV2ZW4gaWYgaW5zdGFsbGluZyB0aGUgVk1TQSBmYWlsZWQsIHNvIHRoYXQgS1ZNX1JVTiB3aWxsXG4rXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXG4rXHQgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLlxuIFx0ICovXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuK1x0aWYgKFZBTElEX1BBR0UoZ3BhKSlcbitcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuK31cbitcbit2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSAqc2V2X2VzID0gXHUwMDI2dG9fc3ZtKHZjcHUpLVx1MDAzZXNldl9lcztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZzZXZfZXMtXHUwMDNlc25wX3Ztc2FfbXV0ZXgpO1xuK1xuK1x0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIHNldl9lcy1cdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtNDEwNSwxMCArNDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbi1cdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcbitcdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgU1ZNX1ZNR0VYSVRfQVBfREVTVFJPWTpcbi1cdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR2Y3B1X3VuaW1wbCh2Y3B1LCBcInZtZ2V4aXQ6IGludmFsaWQgQVAgY3JlYXRpb24gcmVxdWVzdCBbJSN4XSBmcm9tIGd1ZXN0XFxuXCIsXG5AQCAtNDc5MSw2ICs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3ZtLVx1MDAzZXNldl9lcy52bXNhID0gcGFnZV9hZGRyZXNzKHZtc2FfcGFnZSk7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCA9IHNucF9pc19zZWN1cmVfdHNjX2VuYWJsZWQodmNwdS1cdTAwM2Vrdm0pO1xuIFxuQEAgLTUxMTUsOSArNTE1NCwzNiBAQCBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcbiBcbiBcdHJldHVybiAwO1xuIH1cbit2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1xuK1x0LypcbitcdCAqIEFuIHVuc3RhYmxlIHJlc3VsdCBmb3IgXCJpcyBTTlBcIiBpcyBhLW9rIGhlcmUsIHRoYW5rcyB0byBtbXVfbG9jay5cbitcdCAqIFRoZSB2Q1BVJ3MgVk1TQSBHUEEgaXMgaW52YWxpZGF0ZWQgYmVmb3JlIHRoZSB2Q1BVIGlzIG1hZGUgdmlzaWJsZVxuK1x0ICogdG8gb3RoZXIgdGFza3MsIGFuZCBjYW4gb25seSBiZWNvbWUgdmFsaWQgd2hpbGUgaG9sZGluZyBtbXVfbG9jayxcbitcdCAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLlxuK1x0ICovXG4rXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG4rXHRcdHJldHVybjtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuK1x0XHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYTtcbitcbitcdFx0aWYgKFZBTElEX1BBR0UoZ3BhKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2U9IHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzYyByYW5nZS1cdTAwM2VlbmQpXG4rXHRcdFx0a3ZtX21ha2VfcmVxdWVzdF9hbmRfa2ljayhLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xuK1x0fVxuK31cbiBcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbitcdGt2bV9wZm5fdCBlbmQgPSBzdGFydCArICgxdWwgXHUwMDNjXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKSk7XG4gXHRrdm1fcGZuX3QgcGZuO1xuIFxuIFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlZjY5YTUxYWIyN2Y5OC4uN2QzZGQzNzE5MDcwNDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNTQ0NSw2ICs1NDQ1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4gXHQubWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uLFxuIFx0Lmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCxcbitcdC5yZWxvYWRfdm1zYSA9IHNldl9zbnBfcmVsb2FkX3Ztc2EsXG4gXG4gXHQudm1fY29weV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSxcbiBcdC52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLFxuQEAgLTU0NjAsOSArNTQ2MSwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC52Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMgPSBhdmljX3ZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyxcbiBcdC5hbGxvY19hcGljX2JhY2tpbmdfcGFnZSA9IHN2bV9hbGxvY19hcGljX2JhY2tpbmdfcGFnZSxcbiBcbisjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4gXHQuZ21lbV9wcmVwYXJlID0gc2V2X2dtZW1fcHJlcGFyZSxcbi1cdC5nbWVtX2ludmFsaWRhdGUgPSBzZXZfZ21lbV9pbnZhbGlkYXRlLFxuK1x0LmdtZW1faW52YWxpZGF0ZV9yYW5nZSA9IHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2UsXG4rXHQuZ21lbV9mcmVlX2ZvbGlvID0gc2V2X2dtZW1fZnJlZV9mb2xpbyxcbiBcdC5nbWVtX21heF9tYXBwaW5nX2xldmVsID0gc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwsXG4rI2VuZGlmXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uYzdlY2M1ZmNhNjg5YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMjcxLDcgKzI3MSw4IEBAIHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSB7XG4gXHR1NjQgZ2hjYl9yZWdpc3RlcmVkX2dwYTtcbiBcbiBcdHN0cnVjdCBtdXRleCBzbnBfdm1zYV9tdXRleDsgLyogVXNlZCB0byBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIG9mIFZNU0EuICovXG4tXHRncGFfdCBzbnBfdm1zYV9ncGE7XG4rXHRncGFfdCBzbnBfcGVuZGluZ192bXNhX2dwYTtcbitcdGdwYV90IHNucF9ndWVzdF92bXNhX2dwYTtcbiBcdGJvb2wgc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0O1xuIFx0Ym9vbCBzbnBfaGFzX2d1ZXN0X3Ztc2E7XG4gfTtcbkBAIC05OTUsNiArOTk2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuIHtcbiBcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gfVxuK3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIGludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbkBAIC0xMDA4LDcgKzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfc2V2X2FzaWQ7XG4gdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xuIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbit2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xuQEAgLTEwMzgsNyArMTA0MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGluXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSlcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODE2Nyw2ICs4MTY3LDggQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuK1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KSlcbitcdFx0XHRrdm1feDg2X2NhbGwocmVsb2FkX3Ztc2EpKHZjcHUpO1xuIFx0fVxuIFxuIFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8XG5AQCAtMTA1OTIsOSArMTA1OTQsMTMgQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIHtcbi1cdGt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGUpKHN0YXJ0LCBlbmQpO1xuK1x0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XG4rfVxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0a3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pO1xuIH1cbiAjZW5kaWZcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi42YjdmODgwMTUwNWQ1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjYwNyw3ICsyNjA3LDggQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYyxcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbit2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC0xODUsNiArMTg1LDEwIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxuIFx0XHR9XG4gXG4gXHRcdGZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4rXHRcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFx1MDAyNmdmbl9yYW5nZSk7XG4rI2VuZGlmXG4gXHR9XG4gXG4gXHRpZiAoZmx1c2gpXG5AQCAtNTIzLDIzICs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcbiBcdHJldHVybiBNRl9ERUxBWUVEO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XG4tXHRrdm1fcGZuX3QgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4tXHRpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4tXG4tXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUocGZuLCBwZm4gKyAoMXVsIFx1MDAzY1x1MDAzYyBvcmRlcikpO1xuLX1cbi0jZW5kaWZcbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvID0gbm9vcF9kaXJ0eV9mb2xpbyxcbiBcdC5taWdyYXRlX2ZvbGlvXHQ9IGt2bV9nbWVtX21pZ3JhdGVfZm9saW8sXG4gXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvID0ga3ZtX2dtZW1fZXJyb3JfZm9saW8sXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLVx0LmZyZWVfZm9saW8gPSBrdm1fZ21lbV9mcmVlX2ZvbGlvLFxuK1x0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXG4gI2VuZGlmXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjQ5OjUwLjYxNTkxNTUyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTM1NDA0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIFBhdGNoIGZvciBTRVYtU05QIGFuZCBndWVzdF9tZW1mZCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBvbiB4ODYsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBTRVYtU05QIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGd1ZXN0X21lbWZkYC4gSXQncyBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25hbGl0aWVzOiBgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEYCwgYHJlbG9hZF92bXNhYCB3aXRoaW4gYGt2bV94ODZfb3BzYC4gSXQgYWxzbyByZWZhY3RvcnMgcGFydHMgb2YgdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBXZSdyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBga3ZtX21tdV96YXBfYWxsX2Zhc3RgLCBzcGxpdHRpbmcgaXQsIGFuZCBjaGFuZ2VzIGluIGhvdyB0aGUgc2hhZG93IG1lbW9yeSBzbG90cyBhcmUgaGFuZGxlZCB2aWEgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgd2hpY2ggbm93IGNvbnNpZGVycyBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLiBUaGVyZSBhcmUgZnVydGhlciB0d2Vha3MgdG8gYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYW5kIGFsc28gY2hhbmdlcyB0byBtZW1vcnkgaW52YWxpZGF0aW9uIHJvdXRpbmVzOiBzcGVjaWZpY2FsbHkgcmVmYWN0b3JpbmcgYGdtZW1faW52YWxpZGF0ZWAgaW50byBgZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYWxvbmcgd2l0aCB0aGUgYGdtZW1fZnJlZV9mb2xpb2AgZnVuY3Rpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIEl0J3MgZGVmaW5pdGVseSBLVk0gY29kZSwgYW5kIGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBBTUQgU0VWLVNOUCBhbmQgZ3Vlc3RfbWVtZmQsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHNlY3VyZSB2aXJ0dWFsIG1hY2hpbmVzLiBTRVYtU05QIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgYnV0IHRoZSB1bmRlcmx5aW5nIEtWTSBjb2RlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmUgZnV6emVkLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlczogY2FuIHdlIGZ1enogU0VWLVNOUCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgZG9jdW1lbnRhdGlvbiBJJ20gbG9va2luZyBhdCByYWlzZXMgYSBjb25jZXJuIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBoYXJkd2FyZSBlbXVsYXRpb25zLiBDYW4gU0VWLVNOUCBiZSB0cmlnZ2VyZWQgaW4gUUVNVT8gSSBrbm93IFFFTVUgc3VwcG9ydHMgU0VWIGFuZCBTRVYtRVMgZW11bGF0aW9uLCBidXQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IFNFVi1TTlAuIEV2ZW4gaWYgdGhlIGVtdWxhdGlvbiBpc24ndCBwZXJmZWN0LCB0aGUgS1ZNIGlvY3RscyBtaWdodCBiZSByZWFjaGFibGUgdG8gc29tZSBleHRlbnQuXG5cblRoZW4gSSBzZWUgdGhhdCBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgaXMgdXNlZCBpbiBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuIFRoaXMgbWVhbnMgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGZvciBTRVYtU05QLiBZZXMsIFNFVi1TTlAgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIEVQWUMgcHJvY2Vzc29ycy5cblxuU28sIGNhbiB3ZSBmdXp6IHRoaXMgaW4gR0NFPyBHQ0UgZG9lcyBvZmZlciBBTUQgaW5zdGFuY2VzLCBhbmQgc29tZSBvZiB0aGVtICptaWdodCogc3VwcG9ydCBTRVYtU05QLiBUaGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4gQWxzbywgSSBrbm93IHN5emthbGxlciBoZWF2aWx5IGZ1enplcyBLVk0sIHdoaWNoIGlzIGEgcHJvbWlzaW5nIHNpZ24uXG5cbkkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IHNwZWNpZmljYWxseSwgYENPTkZJR19LVk1fQU1EX1NFVmAgYW5kIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBUaW1lIGZvciBhIHF1aWNrIGdyZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NDk6NTcuOTA5NDU3NTI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM5Mzk3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0tWTV9BTURfU0VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY0NT1zdGF0aWMgaW5saW5lIHU2NCBzYXZpY19naGNiX21zcl9yZWFkKHUzMiByZWcpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY0OC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NDk6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1MC1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTI0PWt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjY6a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcXHQrPSBzdm0vc2V2Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjcta3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzMyPXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDA0LVxcdFtTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXVxcdD0gYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDA1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MDYtXFx0W1NWTV9FWElUX1ZNR0VYSVRdXFx0XFx0XFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MjA9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjQ2LVxcdFxcdHJldHVybiBucGZfaW50ZXJjZXB0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY0NzojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjQ4LVxcdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00MzkyPXN0YXRpYyBpbnQgc3ZtX3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkzLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzOTQ6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5NS1cXHRpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZW5lZWRfaW5pdClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDY4NT1zdGF0aWMgYm9vbCBzdm1faGFzX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDY5NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ2OTU6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDY5Ni1cXHRcXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzI1PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQxLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0MjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQzLVxcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDYzLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ2NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDY1LVxcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD02Nj1lbnVtIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OS1zdHJ1Y3Qga3ZtX3Nldl9pbmZvIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTI2PXN0cnVjdCBrdm1fc3ZtIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTM0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTM1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNi1cXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvIHNldl9pbmZvO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0zODk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3N2bSAqdG9fa3ZtX3N2bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTM5My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjM5NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0zOTUtc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3Nldl9pbmZvICp0b19rdm1fc2V2X2luZm8oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzk9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODAtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgyLWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTIxMD1TWU1fRlVOQ19FTkQoX19zdm1fdmNwdV9ydW4pXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjExLVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TOjIxMjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjEzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM9MjgzPVNZTV9GVU5DX0VORChfX3N2bV9zZXZfZXNfdmNwdV9ydW4pXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM6Mjg0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0FNRF9TRVYgKi9cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlLTItXFxuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfS1ZNX0FNRF9TRVYpICs9IHNldi5vXFxuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpICs9IGNtZGxpbmUub1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3NwLWRldi5jPTI2Nj1zdGF0aWMgaW50IF9faW5pdCBzcF9tb2RfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3NwLWRldi5jLTMwMC1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc3AtZGV2LmM6MzAxOiNpZiBJU19CVUlMVElOKENPTkZJR19LVk1fQU1EKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19LVk1fQU1EX1NFVilcXG5kcml2ZXJzL2NyeXB0by9jY3Avc3AtZGV2LmMtMzAyLWludCBfX2luaXQgc2V2X21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM3Mj1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzczLXtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM3NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzUtXFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM0MTM9c3RhdGljIHZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fc25wKHZvaWQpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MTQte1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNDE1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQxNi1cXHRpZiAoIWFtZF9pb21tdV9zbnBfZW4pXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9NDAyMD1pbnQgYW1kX2lvbW11X3BjX3NldF9yZWcoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJhbmssIHU4IGNudHIsIHU4IGZ4biwgdTY0ICp2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy00MDI3LVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzo0MDI4OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtNDAyOS1zdGF0aWMgaW50IGlvbW11X3BhZ2VfbWFrZV9zaGFyZWQodm9pZCAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9Njk9c3RydWN0IGFtZF9pb21tdSAqZ2V0X2FtZF9pb21tdSh1bnNpZ25lZCBpbnQgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTcwLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6NzE6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNzItaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoxNTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTE2LVxcdC8qKiBATUlTQ19DR19SRVNfU0VWOiBBTUQgU0VWIEFTSURzIHJlc291cmNlICovXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0yMD1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWlzY19yZXNfbmFtZVtdID0ge1xcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjIxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yMi1cXHQvKiBBTUQgU0VWIEFTSURzIHJlc291cmNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjQ5OjU5Ljk2MzQwMTk4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTI1MTg4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipBbmFseXppbmcgVGhpcyBLVk0vQU1EIFNFViBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IEtWTS9BTUQgU0VWIHJlbGF0ZWQgZmlsZXM6IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgdGhlIGNvcmUgU1ZNIGNvZGUsIHRoZW4gc29tZSBvZiB0aGUgTU1VIGNvZGUgaW4gYG1tdS5jYCwgYW5kIGV2ZW4gdGhlIGBndWVzdF9tZW1mZC5jYCBmaWxlLiBJbnRlcmVzdGluZy4gU2VlbXMgbGlrZSB0aGV5IGFyZSByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBkZXRhaWxzIGhlcmUuIExvb2tzIGxpa2UgdGhlIGRldmVsb3BlciBpcyBhbHNvIHdvcmtpbmcgd2l0aCBgQ09ORklHX0tWTV9BTURfU0VWYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIHRoYXQgaXMgdGhlIG1haW4gY29uZmlnIG9wdGlvbi4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aGV5IGFyZSBhbHNvIHVzaW5nIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBOb3csIHRoYXQncyBhIGJpdCBsZXNzIG9idmlvdXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoYXQgaXMgc29tZXRoaW5nIHdlIGNhbiB0b2dnbGUgb3IgaWYgaXQncyBqdXN0IGEgZGVmYXVsdCBib29sZWFuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgYmV0dGVyIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDowMy4zNzU5MjI2MjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MDk4NTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTE1MD1LVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUxLSNlbmRpZlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTUyOiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE1My1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTY4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTA4LSNlbmRpZlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTkwOTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTEwLVxcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjQ6XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTY1LVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzU4Mj12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU5NS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1OTY6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU5Ny1cXHRpZiAoc2xvdC1cXHUwMDNlZ21lbS5maWxlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTkwPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1OTUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTk2OiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1OTctdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYwND1sb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MDgtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MDk6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEwLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9MTEwPWNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMTMtXFxudmlydC9rdm0vS2NvbmZpZzoxMTQ6Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxudmlydC9rdm0vS2NvbmZpZy0xMTUtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MTYwPXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xODgtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxODk6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMTkwLVxcdFxcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFxcdTAwMjZnZm5fcmFuZ2UpO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz01MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNTMzLVxcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjUzNDojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01MzUtXFx0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjUwOjA1LjE2NjkxMjg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDM3ODkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgU0VWIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzIGdldHRpbmcgcHVsbGVkIGluIGJlY2F1c2Ugb2YgYEtWTV9BTURfU0VWYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2U7IGBLVk1fQU1EX1NFVmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHVuZGVyc3RhbmRpbmcgKml0KiBhcyB0aGUgY29yZSBvZiB0aGUgc3VwcG9ydC5cblxuSG1tLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBrdm1fbW11X3phcF9hbGxfZmFzdGAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJbnRlcmVzdGluZy4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAuICBXYWl0IGEgbWludXRlLi4uIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXNuJ3Qgc3BlY2lmaWMgdG8gU0VWLCBpcyBpdD8gIFRoYXQncyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBicm9hZGVyIGNvbm5lY3Rpb24uIEl0J3Mgbm90ICpqdXN0KiBhZmZlY3RpbmcgdGhlIFNFVi1zcGVjaWZpYyBwYXRoLiBMZXQgbWUgZ28gY2hlY2sgd2hhdCdzIHVwIHdpdGggdGhhdCBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjUwOjA4LjQyMTI5MzQ4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzOTE2MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jPTI3MDQ9dm9pZCBrdm1fYXJjaF9tZW1zbG90c191cGRhdGVkKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGdlbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjcwODp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNzA5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM9NDQyPXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTQ2Ni1cXHQgKiBNT1ZFL0RFTEVURTpcXHRUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYzo0Njc6XFx0ICpcXHRcXHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTQ2OC1cXHQgKi9cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYz00ODc9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy00OTEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjQ5Mjp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNDkzLXtcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTE4MT12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtMTg3LVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjE4ODp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL21pcHMva3ZtL21pcHMuYy0xODktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTIxMj12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTIyNS1cXHQgKiBNT1ZFL0RFTEVURTpcXHRUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjIyNjpcXHQgKlxcdFxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KClcXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yMjctXFx0ICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUzNTQ9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfY29tbWl0X21lbW9yeV9yZWdpb25faHYoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MzY5LVxcdCAqIEZvciBjaGFuZ2UgPT0gS1ZNX01SX01PVkUgb3IgS1ZNX01SX0RFTEVURSwgaGlnaGVyIGxldmVsc1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTM3MDpcXHQgKiBoYXZlIGFscmVhZHkgY2FsbGVkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KCkgdG9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUzNzEtXFx0ICogZmx1c2ggc2hhZG93IG1hcHBpbmdzLiAgRm9yIEtWTV9NUl9DUkVBVEUgd2UgaGF2ZSBub1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NzI3PXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzM0LVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjczNTp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03MzYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTEzMT12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTM1LVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjEzNjp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xMzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTc2Mj1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pIHt9XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NzYzOnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzY0LVxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpIHt9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1NzY9c3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTgxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzU4Mjp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1ODMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDE2MD1zdGF0aWMgdm9pZCBrdm1fbW11X3Nsb3RfYXBwbHlfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTgyLVxcdCAqIE1PVkUvREVMRVRFOiBUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDE4MzpcXHQgKlxcdFxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODQtXFx0ICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4OC1cXHQgKiBNT1ZFL0RFTEVURTogVGhlIG9sZCBtYXBwaW5ncyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgYnlcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxODk6XFx0ICpcXHRcXHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpLlxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE5MC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjU0PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjU1LS8qIGZsdXNoIG1lbW9yeSB0cmFuc2xhdGlvbnMgcG9pbnRpbmcgdG8gJ3Nsb3QnICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNTY6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE3OTg9c3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjMtXFx0ICovXFxudmlydC9rdm0va3ZtX21haW4uYzoxODI0OlxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KGt2bSwgb2xkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjUtXFx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDoxMC4wNzUyMTQ1MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgxNzA0NzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLVk0gTU1VIExvZ2ljIE1vZGlmaWNhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhcyBpdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJdCdzIGNhbGxlZCB3aGVuIGEgbWVtc2xvdCBpcyBkZWxldGVkIG9yIG1vdmVkLCB0cmlnZ2VyZWQgYnkgYGt2bV9pbnZhbGlkYXRlX21lbXNsb3RgIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhhdCdzIGltcG9ydGFudC5cblxuVGhlIGNvZGUgaXRzZWxmIGhhcyBhIGZldyBpbnRlcmVzdGluZyBwYXRocy4gRXZlbiB3aXRob3V0IFNFVi1TTlAsIGl0J3MgcmVhY2hhYmxlIGlmIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUgb3IgaWYgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCBpcyBzZXQuIE5vdywgYGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoa3ZtKWAgaXMgdHJ1ZSB1bmRlciB0aGUgZGVmYXVsdCBLVk0gWDg2IGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2hlbiBga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk1gIGFuZCBga3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKWAuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBzY2VuYXJpbyBmb3IgS1ZNLCBtZWFuaW5nIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGhpZ2hseSByZWxldmFudCBhbmQgZGVmaW5pdGVseSBmdXp6YWJsZS5cblxuVGhpcyBpcyBjb3JlIEtWTSBNTVUgbG9naWMuIFNvLCBpdCdzIGRlZmluaXRlbHkgd29ydGggdGFyZ2V0aW5nLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGNvbmZpZ3VyZSBzeXprYWxsZXIgZm9yIHRoaXMuXG5cbkxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWcgZmxhZ3MuICBJIHNlZSBgQ09ORklHX0tWTV9BTURfU0VWYC4gIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFuZCBzcGVjaWZpY2FsbHkgY292ZXJzIHRoZSBtb2RpZmllZCBjb2RlLiBTaG91bGQgYmUgbGlzdGVkIGFzIGEgY29uZmlndXJhdGlvbiBpbiBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIGBLVk1fQU1EX1NFVmAgaXMgc3BlY2lmaWMgdG8gQU1ELCBhbmQgc3l6a2FsbGVyIGRvZXMgdGVzdHMgb24gSW50ZWwgYW5kIEFNRC5cblxuVGhlIHByb21wdCBub3RlcywgXCJPbmx5IGxpc3QgdGhvc2UgdGhhdCBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuXCIgYW5kIGBLVk1fQU1EX1NFVmAgbG9va3MgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFxuSSBhbHNvIG5lZWQgdG8gc2VlIHdoYXQgYENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAgaXMsIGFuZCBub3RlIHRoYXQgaXQncyBzZWxlY3RlZCBieSBgS1ZNX0FNRF9TRVZgLlxuXG5Ob3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgLCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC5cblxuU3l6a2FsbGVyIG5lZWRzIHRoZSBmdWxsIGxpc3Qgb2YgdGhlc2UgZnVuY3Rpb25zLiBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGlzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmYCBhbmQgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmYCBhcmUgc3RhdGljLCBidXQgc3l6a2FsbGVyIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGZ1enogdGhlbSBpZiB0aGV5IGFyZSBpbiB0aGUgYmluYXJ5LiBTeXprYWxsZXIgZm9jdXNlcyBvbiBmdW5jdGlvbnMsIHNvIGxldCdzIGxpc3QgdGhlbSBhbGw6IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgLCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBhbmQgYHNldl9nbWVtX2ZyZWVfZm9saW9gLlxuXG5JIGhhdmUgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRocy4gIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXMgY2FsbGVkIGR1cmluZyBtZW1zbG90IGRlbGV0aW9uIG9yIG1vdmVtZW50LCBzbyBub3QgYSBob3QgcGF0aC4gU2FtZSBmb3IgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBpbml0aWFsaXphdGlvbiBvciByYXJlIGV2ZW50IHBhdGhzLlxuXG5JIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgQ09ORklHX0tWTV9BTURfU0VWYCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDoyMi44OTIyNjM3NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQwMTY2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURfU0VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6MjQuODM2Mjg1ODExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTgwMzg5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbnMgYW5kIFBhdGNoIFNjb3BlKipcblxuQWxyaWdodCwgc28gYEtWTV9BTURfU0VWYCwgeWVhaCwgdGhhdCdzIGRlZmluaXRlbHkgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlnLCBJIGtub3cgdGhhdCBvbmUuIE1ha2VzIHlvdSB3b25kZXIgdGhvdWdoLCBhcmUgdGhlcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzIGluIHBsYXkgaGVyZSB0aGF0IEknbSBtaXNzaW5nPyBHb3R0YSBtYWtlIHN1cmUgSSdtIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc2VjdXJpdHkgZmVhdHVyZXMuXG5cbkhtbSwgdGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIE9rYXksIHNvIGl04oCZcyBkZWFsaW5nIHdpdGggdGhlIGd1ZXN0IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3IgaW50ZXJmYWNlIHdpdGhpbiBLVk0uIFRoaXMgaGFzIG1lIHdvbmRlcmluZyAtIGlzIHRoZXJlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byB0aGUgYGd1ZXN0X21lbWZkYCBmdW5jdGlvbmFsaXR5IGl0c2VsZj8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhdCBjb21waWxlIHRpbWUgb3IgcnVudGltZSBpbmRlcGVuZGVudGx5IG9mIGBLVk1fQU1EX1NFVmAsIGFzIHRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIFNFVi4gVGhhdOKAmXMgc29tZXRoaW5nIEkgbmVlZCB0byBsb29rIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjk2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6MjcuODM0MzI2NTQxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0NzEzNDA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1BSSVZBVEVfTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDoyOS40NTkwNDYyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMyMDExNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGd1ZXN0X21lbWZkYCBPcHRpb24gaW4gS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciB1c2FnZSBvZiBgZ3Vlc3RfbWVtZmRgLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBoaWdobHkgbGlrZWx5IHRoaXMgaXMgcmVsYXRlZCB0byBhIEtWTSBmZWF0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIEtWTSBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgdmlydC9rdm0vS2NvbmZpZ2AuIFRoYXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgZm9yIGNvbmZpZ3VyaW5nIGZlYXR1cmVzIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbiBteSBzZWFyY2guIExldCdzIHN0YXJ0IGRpZ2dpbmcgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJ20gZXhwZWN0aW5nIHRoaXMgYEtjb25maWdgIGZpbGUgdG8gZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCBgZ3Vlc3RfbWVtZmRgIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTk3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6MzMuMzkxMDYwMDM3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3OTIxMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNTphbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM4OltndWVzdF9tZW1mZF9vZmZzZXQsIGd1ZXN0X21lbWZkX29mZnNldCArIG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzOS1tdXN0IHBvaW50IGF0IGEgZmlsZSBjcmVhdGVkIHZpYSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEIG9uIHRoZSBjdXJyZW50IFZNLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUxOlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cXHRfX3UzMiBwYWQxO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTgtdXNlcnNwYWNlX2FkZHIgKHNoYXJlZCBtZW1vcnkpLiAgSG93ZXZlciwgXFxcInZhbGlkXFxcIiBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJ3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXFxcImZsYWdzXFxcIiBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIG11c3QgYmUgJzAnLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTctOlR5cGU6IHZtIGlvY3RsXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjI6dGhhdCByZWZlcnMgdG8gaXQuICBndWVzdF9tZW1mZCBmaWxlcyBhcmUgcm91Z2hseSBhbmFsb2dvdXMgdG8gZmlsZXMgY3JlYXRlZFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjU6XFxcInJlZ3VsYXJcXFwiIG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjYtdmlydHVhbCBtYWNoaW5lIChzZWUgYmVsb3cpLCBjYW5ub3QgYmUgbWFwcGVkLCByZWFkLCBvciB3cml0dGVuIGJ5IHVzZXJzcGFjZSxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMi1cXHRfX3U2NCBzaXplO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXFxcInN0cnVjdCBrdm1cXFwiLiAgVGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0Mz1taWdyYXRpb24gb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlxcXCJzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlxcXCIsIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MDpndWVzdF9tZW1mZCByYW5nZSBpcyBub3QgYWxsb3dlZCAoYW55IG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBjYW4gYmUgYm91bmQgdG9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTYtICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDY4OmNvbnN1bWVkIGZyb20gZ3Vlc3RfbWVtZmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHNoYXJlZCBvciBhIHByaXZhdGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI2MTE9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcXHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDUtXFx0ICogdGhlcmUgYXJlbid0IGFueSBDb0NvIFZNcyB0aGF0IHN1cHBvcnQgb25seSBwcml2YXRlIG1lbW9yeSBvbiBhcm02NC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVxcdFxcdFxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcXHRcXHRcXHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwNS1cXHRcXHRcXHQgKiBjcmVhdGUgYSBmb2xpbyB0byBiYWNrIHRoZSBtZW1vcnkuIEluZm9ybSB1c2Vyc3BhY2UuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1ODpcXHRcXHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTk6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJHZXQgcGZuK29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcXFwiKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzM6XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0OlxcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJ3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc1LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzk4PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXFx0ICogICAgICBiZWZvcmVoYW5kLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcXHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDM5LVxcdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDA1Mj1zdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3OlxcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTgzPXZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVxcdFxcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcXHRcXHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXFx0XFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUnaW5nIHRoZW0gYmFjayB0b1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzAxNjpcXHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXFx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzIxNDpcXHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVxcdCAqIG1tdV9ub3RpZmllciBldmVudHMgY2FuJ3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSdzIGludGVybmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzM9Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MDogKiBLVk0gZG9lc24ndCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgxLSAqIHdpdGggcHJpdmF0ZSBtZW1vcnkgKHRoZSBwcml2YXRlIHZzLiBzaGFyZWQgdHJhY2tpbmcgbmVlZHMgdG8gYmUgbW92ZWQgaW50b1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NC1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDctXFx0X191MzIgcGFkMTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjQ1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXFx0X191NjQgc2l6ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDMtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0OlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIHBhZDE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYzNT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFxcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVxcdF9fdTY0IHNpemU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ2V0LXJlZy1saXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ3Vlc3RfbWVtZmRfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00Mj1zdGF0aWMgdm9pZCB0ZXN0X21tYXBfY293KGludCBmZCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVxcdG1lbSA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OlxcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcXFwiQ29weS1vbi13cml0ZSBub3QgYWxsb3dlZCBieSBndWVzdF9tZW1mZC5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Mi1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlxcdCAqIFRvIGV2ZW4gcmVhY2ggdGhlIHBvaW50IHdoZXJlIHRoZSBndWVzdF9tZW1mZCBmb2xpb3Mgd2lsbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVxcdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODU6XFx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXFx0ICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XFx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjEwLVxcdCAqIGZpbmUuLi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MzQ4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9iaW5kaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgZmQsIHNpemVfdCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTg6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cXHRmb3IgKHNpemUgPSAxOyBzaXplIFxcdTAwM2MgcGFnZV9zaXplOyBzaXplKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcXHRcXHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXFx0XFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcXHRcXHRcXHQgICAgXFxcImd1ZXN0X21lbWZkKCkgd2l0aCBub24tcGFnZS1hbGlnbmVkIHBhZ2Ugc2l6ZSAnMHglbHgnIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2OC1cXHRcXHRcXHQgICAgc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3MjpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcXHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3OC1cXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFxcXCJtZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozODQ6XFx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVxcdFRFU1RfQVNTRVJUKGZkMiAhPSAtMSwgXFxcIm1lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDAxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVxcdGZvciAoZmxhZyA9IEJJVCgwKTsgZmxhZzsgZmxhZyBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDA3OlxcdFxcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDgtXFx0XFx0aWYgKGZsYWcgXFx1MDAyNiB2YWxpZF9mbGFncykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVxcdFxcdFxcdFRFU1RfQVNTRVJUKGZkIFxcdTAwM2U9IDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAnMHglbHgnIHNob3VsZCBzdWNjZWVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cXHRcXHRcXHRcXHQgICAgZmxhZyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cXHRcXHRcXHRURVNUX0FTU0VSVChmZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDE1OlxcdFxcdFxcdFxcdCAgICBcXFwiZ3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJzB4JWx4JyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXFx0XFx0XFx0XFx0ICAgIGZsYWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcXHRpbnQgZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoX192bSwgX19nbWVtX3NpemUsIF9fZmxhZ3MpO1xcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MTpzdGF0aWMgdm9pZCBfX3Rlc3RfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XFx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUodm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0OlxcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDcyOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmQodW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3OlxcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5OlxcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XFx0XFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXFx0aWYgKGZsYWdzIFxcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcXHRcXHRfX3Rlc3RfZ3Vlc3RfbWVtZmQodm0sIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXFx0XFx0XFx0XFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM1OlxcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXFx0ICogb2YgdGhlIGhvc3QgcGFnZSBzaXplLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXFx0c2l6ZSA9IG1heF90KHNpemVfdCwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcXHRmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVxcdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXFx0Zm9yX2VhY2hfc2V0X2JpdCh2bV90eXBlLCBcXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4OlxcdFxcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1ODA6XFx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjY3OnN0YXRpYyBpbmxpbmUgaW50IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cXHRcXHRcXHRcXHRcXHQgIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXFx0XFx0LnNpemUgPSBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzU6XFx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzYtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzktXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcXHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Mi1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XFx0XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2OlxcdFxcdFxcdFxcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzAyLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjcwMzpcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzA0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3MS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cXHRmbGFncyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjUwMDpcXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz04MDQ9c3RhdGljIHZvaWQgX192bV9tZW1fcmVnaW9uX2RlbGV0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XFx0aWYgKChpbnQpcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgXFx1MDAzZT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlxcdFxcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtODIxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTQ4LVxcdFxcdFxcdFxcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1Ni1cXHRcXHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU3OlxcdFxcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTg6XFx0XFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU5LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTY2PXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk2ODpcXHRcXHRcXHRcXHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3MC1cXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlxcdFxcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVxcdGlmIChmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcXHRcXHRpZiAoZ3Vlc3RfbWVtZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5OlxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlxcdFxcdFxcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDkxLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cXHRcXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcXHRcXHRcXHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDk5LVxcdFxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDUtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMTktXFx0XFx0XFxcIiAgc2xvdDogJXUgZmxhZ3M6IDB4JXhcXFxcblxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcXHRcXHRcXFwiICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIxLVxcdFxcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk1OlxcdFxcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0LCBsZW4pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTctXFx0XFx0XFx0ICAgIHB1bmNoX2hvbGUgPyBcXFwicHVuY2ggaG9sZVxcXCIgOiBcXFwiYWxsb2NhdGVcXFwiLCBncGEsIGxlbixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcXHRcXHRcXHQgICAgcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg2LVxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODc6XFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5MTpcXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXFx0XFx0VEVTVF9BU1NFUlQociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzk4LVxcdFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00MDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XFx0XFx0Y2xvc2UoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNla3ZtX2ZkLCAwLCBcXFwiS1ZNIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNlZmQsIDAsIFxcXCJWTSdzIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzktXFx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXFxcIlJlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgxLVxcdGNsb3NlKG1lbWZkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgzLVxcdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0yLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1OlxcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFxcXCJPdGhlciBWTSdzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlxcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkzLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBQQUdFX1NJWkU7IGkrKylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcXHRcXHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCBpLCBcXFwiVW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSAqIDUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjMtXFx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0OlxcdCAqIHdpdGggYSBcXFwiYmFkXFxcIiBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyOS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlxcdCAqIFZlcmlmeSB0aGF0IG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkIGJpbmRpbmdzIChpLmUuIGluIGd1ZXN0X21lbWZkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXFx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlxcdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdCdzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDEtXFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ1LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXFx0VEVTVF9BU1NFUlQociA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTg6XFx0XFx0ICAgIFxcXCJPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cXHRURVNUX0FTU0VSVChyID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVFWElTVCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcXHRcXHQgICAgXFxcIk92ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTIzMD1zdGF0aWMgdm9pZCBndWVzdF90ZXN0X3B1bmNoX2hvbGUodTY0IGJhc2VfZ3BhLCBib29sIHByZWNpc2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXFx0ICogQ29udmVydCB0aGUgZW50aXJlIHJhbmdlIHRvIHByaXZhdGUsIHRoaXMgdGVzdGNhc2UgaXMgYWxsIGFib3V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3OlxcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJ3QgbmVlZGVkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI3NTpcXHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlxcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODItXFx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzozOTc6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNjpcXHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XFx0ICogZmQuICBUaGUgZ3Vlc3RfbWVtZmQgaXMgZ2lmdGVkIGEgcmVmZXJlbmNlIHRvIGl0cyBvd25pbmcgVk0sIGkuZS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXFx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI5OlxcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVxcdCAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDozNS4wNjg5ODU0NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2OTgxMTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZ3Vlc3RfbWVtZmRgIEltcGxlbWVudGF0aW9uIGluIEtWTSoqXG5cbkFscmlnaHQsIHNvIGBndWVzdF9tZW1mZGAgaXMgZGlyZWN0bHkgdGllZCB0byBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCB3aXRoIHRoZSBgS1ZNX01FTV9HVUVTVF9NRU1GRGAgZmxhZy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgZG9uJ3Qgc2VlIGFueSBleHBsaWNpdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGl0IOKAkyBpdCBzZWVtcyB0byBiZSBlbmFibGVkIGltcGxpY2l0bHkgd2hlbiBgQ09ORklHX0tWTWAgaXMgYWN0aXZlIGFuZCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgaXMgY29tcGF0aWJsZS4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuXG5cbk5vdywgd2FpdCBhIHNlY29uZC4uLiB0aGlzIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBBTUQncyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIGFsc28gYnJpbmdzIGluIGBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRWAgYW5kIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAuIEhtbW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbiBiZXR0ZXIuIElzIGBndWVzdF9tZW1mZGAgaW5kaXJlY3RseSBlbmFibGVkIGJ5IGBDT05GSUdfS1ZNYCB3aGVuICplaXRoZXIqIGBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRWAgb3IgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBhcmUgcHJlc2VudD8gT3IgaXMgdGhlcmUgc29tZSBvdGhlciBjb25kaXRpb24gSSBhbSBtaXNzaW5nPyBJdCBzZWVtcyBsaWtlIGl0IG11c3QgYmUgZW5hYmxlZCBjb25kaXRpb25hbGx5IHNvbWVob3csIHJhdGhlciB0aGFuIGJlaW5nIHVuaXZlcnNhbGx5IGF2YWlsYWJsZS5cblxuSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUgaW1tZWRpYXRlbHkuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgc3BvdCBmb3IgYSBjbGVhciBkZWZpbml0aW9uIG9mIHRoZSBkZXBlbmRlbmN5IGNoYWluIGhlcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgdGhlIHJlbGF0aW9uc2hpcCBpcyBiZXR3ZWVuIGBndWVzdF9tZW1mZGAsIHRoZXNlIGBIQVZFX0tWTV9BUkNIX0dNRU1fKmAgbWFjcm9zLCBhbmQgdGhlIG92ZXJhbGwgYENPTkZJR19LVk1gIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY4OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDozOS43Mzg4MDAxODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODk2NTA5MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUFJJVkFURV9NRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjUwOjQxLjQyODQ1NzAwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc3NjcwMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIEd1ZXN0IE1lbW9yeSBTaGFyaW5nKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBzaGFyaW5nIHdpdGhpbiBLVk0gZ3Vlc3RzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWVtZmRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQncyByZWxldmFudCB0byB0aGlzIGN1cnJlbnQgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjYzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6NDUuOTA2MTI5ODUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4MDQ3ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNTphbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM4OltndWVzdF9tZW1mZF9vZmZzZXQsIGd1ZXN0X21lbWZkX29mZnNldCArIG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzOS1tdXN0IHBvaW50IGF0IGEgZmlsZSBjcmVhdGVkIHZpYSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEIG9uIHRoZSBjdXJyZW50IFZNLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUxOlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cXHRfX3UzMiBwYWQxO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTgtdXNlcnNwYWNlX2FkZHIgKHNoYXJlZCBtZW1vcnkpLiAgSG93ZXZlciwgXFxcInZhbGlkXFxcIiBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJ3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXFxcImZsYWdzXFxcIiBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIG11c3QgYmUgJzAnLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTctOlR5cGU6IHZtIGlvY3RsXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjI6dGhhdCByZWZlcnMgdG8gaXQuICBndWVzdF9tZW1mZCBmaWxlcyBhcmUgcm91Z2hseSBhbmFsb2dvdXMgdG8gZmlsZXMgY3JlYXRlZFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjU6XFxcInJlZ3VsYXJcXFwiIG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjYtdmlydHVhbCBtYWNoaW5lIChzZWUgYmVsb3cpLCBjYW5ub3QgYmUgbWFwcGVkLCByZWFkLCBvciB3cml0dGVuIGJ5IHVzZXJzcGFjZSxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMi1cXHRfX3U2NCBzaXplO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXFxcInN0cnVjdCBrdm1cXFwiLiAgVGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0Mz1taWdyYXRpb24gb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlxcXCJzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlxcXCIsIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MDpndWVzdF9tZW1mZCByYW5nZSBpcyBub3QgYWxsb3dlZCAoYW55IG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBjYW4gYmUgYm91bmQgdG9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTYtICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDY4OmNvbnN1bWVkIGZyb20gZ3Vlc3RfbWVtZmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHNoYXJlZCBvciBhIHByaXZhdGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI2MTE9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcXHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDUtXFx0ICogdGhlcmUgYXJlbid0IGFueSBDb0NvIFZNcyB0aGF0IHN1cHBvcnQgb25seSBwcml2YXRlIG1lbW9yeSBvbiBhcm02NC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVxcdFxcdFxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcXHRcXHRcXHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwNS1cXHRcXHRcXHQgKiBjcmVhdGUgYSBmb2xpbyB0byBiYWNrIHRoZSBtZW1vcnkuIEluZm9ybSB1c2Vyc3BhY2UuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1ODpcXHRcXHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTk6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJHZXQgcGZuK29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcXFwiKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzM6XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0OlxcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJ3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc1LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzk4PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXFx0ICogICAgICBiZWZvcmVoYW5kLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcXHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDM5LVxcdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDA1Mj1zdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3OlxcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTgzPXZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVxcdFxcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcXHRcXHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXFx0XFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUnaW5nIHRoZW0gYmFjayB0b1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzAxNjpcXHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXFx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzIxNDpcXHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVxcdCAqIG1tdV9ub3RpZmllciBldmVudHMgY2FuJ3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSdzIGludGVybmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzM9Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MDogKiBLVk0gZG9lc24ndCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgxLSAqIHdpdGggcHJpdmF0ZSBtZW1vcnkgKHRoZSBwcml2YXRlIHZzLiBzaGFyZWQgdHJhY2tpbmcgbmVlZHMgdG8gYmUgbW92ZWQgaW50b1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NC1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDctXFx0X191MzIgcGFkMTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjQ1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXFx0X191NjQgc2l6ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDMtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0OlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIHBhZDE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYzNT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFxcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVxcdF9fdTY0IHNpemU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ2V0LXJlZy1saXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ3Vlc3RfbWVtZmRfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00Mj1zdGF0aWMgdm9pZCB0ZXN0X21tYXBfY293KGludCBmZCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVxcdG1lbSA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OlxcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcXFwiQ29weS1vbi13cml0ZSBub3QgYWxsb3dlZCBieSBndWVzdF9tZW1mZC5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Mi1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlxcdCAqIFRvIGV2ZW4gcmVhY2ggdGhlIHBvaW50IHdoZXJlIHRoZSBndWVzdF9tZW1mZCBmb2xpb3Mgd2lsbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVxcdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODU6XFx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXFx0ICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XFx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjEwLVxcdCAqIGZpbmUuLi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MzQ4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9iaW5kaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgZmQsIHNpemVfdCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTg6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cXHRmb3IgKHNpemUgPSAxOyBzaXplIFxcdTAwM2MgcGFnZV9zaXplOyBzaXplKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcXHRcXHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXFx0XFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcXHRcXHRcXHQgICAgXFxcImd1ZXN0X21lbWZkKCkgd2l0aCBub24tcGFnZS1hbGlnbmVkIHBhZ2Ugc2l6ZSAnMHglbHgnIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2OC1cXHRcXHRcXHQgICAgc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3MjpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcXHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3OC1cXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFxcXCJtZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozODQ6XFx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVxcdFRFU1RfQVNTRVJUKGZkMiAhPSAtMSwgXFxcIm1lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDAxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVxcdGZvciAoZmxhZyA9IEJJVCgwKTsgZmxhZzsgZmxhZyBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDA3OlxcdFxcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDgtXFx0XFx0aWYgKGZsYWcgXFx1MDAyNiB2YWxpZF9mbGFncykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVxcdFxcdFxcdFRFU1RfQVNTRVJUKGZkIFxcdTAwM2U9IDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAnMHglbHgnIHNob3VsZCBzdWNjZWVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cXHRcXHRcXHRcXHQgICAgZmxhZyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cXHRcXHRcXHRURVNUX0FTU0VSVChmZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDE1OlxcdFxcdFxcdFxcdCAgICBcXFwiZ3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJzB4JWx4JyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXFx0XFx0XFx0XFx0ICAgIGZsYWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcXHRpbnQgZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoX192bSwgX19nbWVtX3NpemUsIF9fZmxhZ3MpO1xcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MTpzdGF0aWMgdm9pZCBfX3Rlc3RfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XFx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUodm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0OlxcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDcyOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmQodW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3OlxcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5OlxcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XFx0XFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXFx0aWYgKGZsYWdzIFxcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcXHRcXHRfX3Rlc3RfZ3Vlc3RfbWVtZmQodm0sIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXFx0XFx0XFx0XFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM1OlxcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXFx0ICogb2YgdGhlIGhvc3QgcGFnZSBzaXplLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXFx0c2l6ZSA9IG1heF90KHNpemVfdCwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcXHRmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVxcdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXFx0Zm9yX2VhY2hfc2V0X2JpdCh2bV90eXBlLCBcXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4OlxcdFxcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1ODA6XFx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjY3OnN0YXRpYyBpbmxpbmUgaW50IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cXHRcXHRcXHRcXHRcXHQgIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXFx0XFx0LnNpemUgPSBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzU6XFx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzYtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzktXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcXHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Mi1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XFx0XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2OlxcdFxcdFxcdFxcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzAyLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjcwMzpcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzA0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3MS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cXHRmbGFncyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjUwMDpcXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz04MDQ9c3RhdGljIHZvaWQgX192bV9tZW1fcmVnaW9uX2RlbGV0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XFx0aWYgKChpbnQpcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgXFx1MDAzZT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlxcdFxcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtODIxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTQ4LVxcdFxcdFxcdFxcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1Ni1cXHRcXHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU3OlxcdFxcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTg6XFx0XFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU5LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTY2PXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk2ODpcXHRcXHRcXHRcXHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3MC1cXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlxcdFxcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVxcdGlmIChmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcXHRcXHRpZiAoZ3Vlc3RfbWVtZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5OlxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlxcdFxcdFxcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDkxLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cXHRcXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcXHRcXHRcXHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDk5LVxcdFxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDUtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMTktXFx0XFx0XFxcIiAgc2xvdDogJXUgZmxhZ3M6IDB4JXhcXFxcblxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcXHRcXHRcXFwiICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIxLVxcdFxcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk1OlxcdFxcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0LCBsZW4pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTctXFx0XFx0XFx0ICAgIHB1bmNoX2hvbGUgPyBcXFwicHVuY2ggaG9sZVxcXCIgOiBcXFwiYWxsb2NhdGVcXFwiLCBncGEsIGxlbixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcXHRcXHRcXHQgICAgcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg2LVxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODc6XFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5MTpcXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXFx0XFx0VEVTVF9BU1NFUlQociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzk4LVxcdFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00MDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XFx0XFx0Y2xvc2UoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNla3ZtX2ZkLCAwLCBcXFwiS1ZNIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNlZmQsIDAsIFxcXCJWTSdzIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzktXFx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXFxcIlJlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgxLVxcdGNsb3NlKG1lbWZkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgzLVxcdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0yLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1OlxcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFxcXCJPdGhlciBWTSdzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlxcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkzLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBQQUdFX1NJWkU7IGkrKylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcXHRcXHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCBpLCBcXFwiVW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSAqIDUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjMtXFx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0OlxcdCAqIHdpdGggYSBcXFwiYmFkXFxcIiBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyOS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlxcdCAqIFZlcmlmeSB0aGF0IG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkIGJpbmRpbmdzIChpLmUuIGluIGd1ZXN0X21lbWZkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXFx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlxcdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdCdzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDEtXFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ1LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXFx0VEVTVF9BU1NFUlQociA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTg6XFx0XFx0ICAgIFxcXCJPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cXHRURVNUX0FTU0VSVChyID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVFWElTVCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcXHRcXHQgICAgXFxcIk92ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTIzMD1zdGF0aWMgdm9pZCBndWVzdF90ZXN0X3B1bmNoX2hvbGUodTY0IGJhc2VfZ3BhLCBib29sIHByZWNpc2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXFx0ICogQ29udmVydCB0aGUgZW50aXJlIHJhbmdlIHRvIHByaXZhdGUsIHRoaXMgdGVzdGNhc2UgaXMgYWxsIGFib3V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3OlxcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJ3QgbmVlZGVkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI3NTpcXHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlxcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODItXFx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzozOTc6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNjpcXHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XFx0ICogZmQuICBUaGUgZ3Vlc3RfbWVtZmQgaXMgZ2lmdGVkIGEgcmVmZXJlbmNlIHRvIGl0cyBvd25pbmcgVk0sIGkuZS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXFx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI5OlxcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVxcdCAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDo0Ny42MzQxODMzMzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0MTc1NTk4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGd1ZXN0X21lbWZkYCDigJMgdGhhdCdzIGp1c3QgYSBLVk0gZmVhdHVyZSwgbm90aGluZyBzcGVjaWZpYyB0byB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIFNvLCB0aGUga2V5IGNvbmZpZyB0byB0YXJnZXQgaGVyZSBhcHBlYXJzIHRvIGJlIGBLVk1fQU1EX1NFVmAuIEFuZCB5ZXMsIGBLVk1fQU1EX1NFVmAgaXMgYSBzaW1wbGUgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gR29vZC4gSXQgbG9va3MgbGlrZSBpdCBzZWxlY3RzIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAsIHdoaWNoIHNvdW5kcyBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3Mgc2NydXRpbml6ZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFdlIGhhdmUgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuXG5cbldhaXQsIEkgbmVlZCB0byBpbmNsdWRlIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGJlY2F1c2UgaXQncyBhIGZ1bmN0aW9uLlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIHJlYWNoYWJsZSByZWdhcmRsZXNzIG9mIFNFViBiZWluZyBlbmFibGVkLiBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGlzIGNhbGxlZCBkdXJpbmcgbWVtc2xvdCBtb3ZlbWVudCBvciBkZWxldGlvbiwgc28gdGhhdCdzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIHphcCBmdW5jdGlvbnMsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgIGFuZCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBhcmUgcmVhY2hhYmxlIHRvbyBpZiBga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChrdm0pYCBpcyB0cnVlLiBIb3dldmVyLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgYW5kIGBzZXZfc25wX3JlbG9hZF92bXNhYCBzZWVtIFNFVi1TTlAgc3BlY2lmaWMuIFNpbWlsYXJseSwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIHJlbGllcyBvbiBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCBjaGVja3MgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLCBjb25maXJtaW5nIHRoZWlyIFNFVi1TTlAgZXhjbHVzaXZpdHkuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgYWxzbyBpbmplY3RpbmcgU0VWLVNOUCBzcGVjaWZpYyBjb2RlLiBUaGF0J3MgYSBwZXJmZWN0IGNvbWJpbmF0aW9uIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNoYW5nZXMgcmVsYXRlZCB0byBib3RoIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IChtZW1zbG90IGZsdXNoaW5nLCBhbmQgemFwIGZ1bmN0aW9ucykgYW5kIHRoZSBuZXcgU0VWLVNOUCBiZWhhdmlvciAoVk1TQSByZWxvYWRpbmcsIGFuZCBwcm90ZWN0ZWQgZ3Vlc3Qgc3RhdGUgaW5pdGlhbGlzYXRpb24pLlxuXG5MZXQncyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUqKlxuKiAgICoqRW5hYmxlQ29uZmlnczogXFxbXCJLVk1cXF9BTURcXF9TRVZcIlxcXSoqXG4qICAgKipGb2N1c1N5bWJvbHM6KipcblxuICAgICogICBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgXG4gICAgKiAgIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgXG4gICAgKiAgIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmBcbiAgICAqICAgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgXG4gICAgKiAgIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgXG4gICAgKiAgIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYFxuICAgICogICBgc2V2X2dtZW1fZnJlZV9mb2xpb2BcbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbG9naWMgZm9yIGZsdXNoaW5nIHNoYWRvdyBtZW1zbG90cyBhbmQgaW50cm9kdWNlcyBuZXcgU0VWLVNOUCBzcGVjaWZpYyBsb2dpYyBmb3IgaGFuZGxpbmcgZ3Vlc3RcXF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uXCJcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHJ1bGUgb3V0IGFueSBvdGhlciByZWxldmFudCBjb25maWdzLiBgS1ZNYCBpcyBmYXIgdG9vIGJyb2FkLCBgS1ZNX0FNRGAgaXMgdG9vIGdlbmVyaWMuIFllcywgYEtWTV9BTURfU0VWYCBsb29rcyBsaWtlIHRoZSBwZXJmZWN0IGFuZCBvbmx5IG5lY2Vzc2FyeSBjb25maWcuIE9rYXksIEknbSByZWFkeSB0byBjb21taXQgdG8gdGhpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk4NiwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6NTguMDUxNzQ0OTYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNzY2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURfU0VWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RcIixcbiAgICBcIl9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZlwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZcIixcbiAgICBcInNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVcIixcbiAgICBcIl9fc2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwic2V2X2dtZW1fZnJlZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdFwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmXCIsXG4gICAgXCJfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZlwiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiLFxuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbnMgYW5kIFZNU0EgcmVsb2FkaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-27 01:41:19 +0000 UTC FinishedAt: 2026-06-27 01:50:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV" ], "series_id": "4aa7878f-94d8-4f3a-a4f5-b47fffbfe070" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_flush_shadow_memslot", "__kvm_mmu_zap_all_fast_front_half", "__kvm_mmu_zap_all_fast_back_half", "sev_snp_init_protected_guest_state", "__sev_snp_reload_vmsa", "sev_snp_reload_vmsa", "sev_gmem_invalidate_range", "sev_gmem_free_folio" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNGRlYmM2MGNjNDczMjk2YWRkYzk1NjI5YjIwNDMyZDFjZjI1ODA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDE6NDk6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbmluZGV4IDgzZGM1MDg2MTM4YjM5Li5mZDA4NDU0Yzc1NTM2NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xMzQsNiAmIzQzOzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbilcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwocmVsb2FkX3Ztc2EpXG4gS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXG4gS1ZNX1g4Nl9PUChjaGVja19lbXVsYXRlX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1AoYXBpY19pbml0X3NpZ25hbF9ibG9ja2VkKVxuQEAgLTE0NSw5ICYjNDM7MTQ2LDE0IEBAIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpO1xuIEtWTV9YODZfT1BfT1BUSU9OQUwoZ2V0X3VudGFnZ2VkX2FkZHIpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbylcbiYjNDM7I2VuZGlmXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXG4tS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXG4gI2VuZGlmXG4gXG4gI3VuZGVmIEtWTV9YODZfT1BcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1MzIuLmVlNDdhMGQxZmViOTkwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTEyMiw2ICYjNDM7MTIyLDggQEBcbiBcdEtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfSFZfVExCX0ZMVVNIIFxcXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzIsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4mIzQzOyNkZWZpbmUgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEIFxcXG4mIzQzO1x0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMzLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxuICNkZWZpbmUgS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFIFxcXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzQsIEtWTV9SRVFVRVNUX1dBSVQpXG4gXG5AQCAtMTg3OCw2ICYjNDM7MTg4MCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHRpbnQgKCp2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHRpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHR2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTtcbiYjNDM7XHR2b2lkICgqcmVsb2FkX3Ztc2EpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gXHRpbnQgKCpnZXRfZmVhdHVyZV9tc3IpKHUzMiBtc3IsIHU2NCAqZGF0YSk7XG4gXG5AQCAtMTkwMCw4ICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFxuIFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXHR2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gXHRpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi1cdHZvaWQgKCpnbWVtX2ludmFsaWRhdGUpKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO1x0dm9pZCAoKmdtZW1faW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuJiM0MztcdHZvaWQgKCpnbWVtX2ZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MzsjZW5kaWZcbiBcdGludCAoKmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCA2YzEzZGE5NDJiZmNjYy4uOGQzNmNhMGEzODBiNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjkyMSwyMCAmIzQzOzY5MjEsMTEgQEAgc3RhdGljIHZvaWQga3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm1fbW11X2NvbW1pdF96YXBfcGFnZShrdm0sIFx1MDAyNmludmFsaWRfbGlzdCk7XG4gfVxuIFxuLS8qXG4tICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxuLSAqIHRvIHphcCBvYnNvbGV0ZSBwYWdlcy5cbi0gKlxuLSAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4tICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xuLSAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzXG4tICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4tICovXG4tc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdHRyYWNlX2t2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XG4gXG4gXHQvKlxuQEAgLTY5NzEsOCAmIzQzOzY5NjIsMTIgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMpO1xuIFxuIFx0a3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhrdm0pO1xuJiM0Mzt9XG4gXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbiBcdC8qXG4gXHQgKiBaYXAgdGhlIGludmFsaWRhdGVkIFREUCBNTVUgcm9vdHMsIGFsbCBTUFRFcyBtdXN0IGJlIGRyb3BwZWQgYmVmb3JlXG5AQCAtNjk4Niw2ICYjNDM7Njk4MSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGxfZmFzdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIHRydWUpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxuJiM0MzsgKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4mIzQzOyAqIGRlc3Ryb3llZCwgaW4gdGhlc2UgY2FzZXMsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCBLVk0gTU1VIGRvZXNcbiYjNDM7ICogbm90IHVzZSBhbnkgcmVzb3VyY2Ugb2YgdGhlIGJlaW5nLWRlbGV0ZWQgc2xvdCBvciBhbGwgc2xvdHNcbiYjNDM7ICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGxfZmFzdChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKGt2bSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9tbXVfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0aW50IHIsIGk7XG5AQCAtNzU2MCw4ICYjNDM7NzU3MywxNCBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90X3BhZ2VzX2FuZF9mbHVzaChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRrdm1fbW11X3JlbW90ZV9mbHVzaF9vcl96YXAoa3ZtLCBcdTAwMjZpbnZhbGlkX2xpc3QsIGZsdXNoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4ge1xuIFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgcmFuZ2UgPSB7XG4gXHRcdC5zbG90ID0gc2xvdCxcbkBAIC03NTczLDI0ICYjNDM7NzU5MiwyMyBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGJvb2wgZmx1c2g7XG4gXG4gXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXHRmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZyYW5nZSk7XG4tXHRrdm1fbW11X3phcF9tZW1zbG90X3BhZ2VzX2FuZF9mbHVzaChrdm0sIHNsb3QsIGZsdXNoKTtcbi1cdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLX1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4te1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4tfVxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO1x0aWYgKHNsb3QtXHUwMDNlZ21lbS5maWxlKVxuJiM0MztcdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2cmFuZ2UpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoa3ZtKSkge1xuJiM0MztcdFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsdXNoID0ga3ZtX3VubWFwX2dmbl9yYW5nZShrdm0sIFx1MDAyNnJhbmdlKTtcbiYjNDM7XHRcdGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKGt2bSwgc2xvdCwgZmx1c2gpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4tdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLXtcbiBcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpXG4tXHRcdGt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XG4tXHRlbHNlXG4tXHRcdGt2bV9tbXVfemFwX21lbXNsb3Qoa3ZtLCBzbG90KTtcbiYjNDM7XHRcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKGt2bSk7XG4gfVxuIFxuIHZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX21taW9fc3B0ZXMoc3RydWN0IGt2bSAqa3ZtLCB1NjQgZ2VuKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA3NGZiMTU1NTFlODNmYS4uN2UwNmVkMTZmNDc0NjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMzk3OSwzMCAmIzQzOzM5NzksMjEgQEAgc3RhdGljIGludCBzbnBfYmVnaW5fcHNjKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHNucF9kb19wc2Moc3ZtKTtcbiB9XG4gXG4tLypcbi0gKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4tICovXG4tc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4mIzQzO1x0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbi1cdGdmbl90IGdmbjtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbi1cbi1cdGlmICghc3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XG4gXG4tXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XG4tXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG4gXG4tXHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EgKi9cbiYjNDM7XHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EuICovXG4gXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sXG5AQCAtNDAxMCwxNiAmIzQzOzQwMDEsMjcgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKi9cbiBcdHZtY2JfbWFya19hbGxfZGlydHkoc3ZtLVx1MDAzZXZtY2IpO1xuIFxuLVx0aWYgKCFWQUxJRF9QQUdFKHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXHUwMDNlc2V2X2VzLnZtc2EuIEluXG4mIzQzO1x0ICogdGhlb3J5LCBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbiYjNDM7XHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXG4mIzQzO1x0ICogaGFuZGxlZCBkdXJpbmcgdGVhcmRvd24gcmF0aGVyIHRoYW4gZ3Vlc3QgYm9vdC4gIERlZmVycmluZyB0aGF0IGFsc29cbiYjNDM7XHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4mIzQzO1x0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XG4gXG4tXHRnZm4gPSBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKTtcbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuJiM0MztcdGlmICghVkFMSURfUEFHRShncGEpKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0c2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFzbG90KVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0c21wX3JtYigpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbkBAIC00MDI3LDI5ICYjNDM7NDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdC8qXG4tXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxuLVx0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVx1MDAzZXNldl9lcy52bXNhLiBJblxuLVx0ICogdGhlb3J5LCBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbi1cdCAqIHRoYXQgaW52b2x2ZXMgY2xlYW51cHMgbGlrZSBmbHVzaGluZyBjYWNoZXMsIHdoaWNoIHdvdWxkIGlkZWFsbHkgYmVcbi1cdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4tXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4tXHQgKiBtaW5pbWFsIFNOUC1zcGVjaWZpYyBjaGFuZ2VzLlxuJiM0MztcdCAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnlcbiYjNDM7XHQgKiBhZ2FpbiB3aXRoIHRoZSBzYW1lIEdQQS4gIElmIHRoZSBWTVNBIGlzIHVzYWJsZSwgdGhlbiBLVk0gbmVlZHMgdG9cbiYjNDM7XHQgKiB0cmFjayB0aGUgR1BBIHNvIHRoYXQgdGhlIFZNU0EgY2FuIGJlIHJlbG9hZGVkIGlmIHRoZSBiYWNraW5nIHBhZ2VcbiYjNDM7XHQgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC5cbiBcdCAqL1xuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xuJiM0MztcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gZ3BhO1xuJiM0MztcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuJiM0MztcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiYjNDM7XHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcbiYjNDM7XHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcdGdwYV90IGdwYTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xuJiM0MztcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4gXG4tXHQvKiBVc2UgdGhlIG5ldyBWTVNBICovXG4tXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4mIzQzO1x0Z3BhID0gc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuLVx0LyogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSAqL1xuLVx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuJiM0MztcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xuIFxuIFx0Lypcbi1cdCAqIGdtZW0gcGFnZXMgYXJlbiYjMzk7dCBjdXJyZW50bHkgbWlncmF0YWJsZSwgYnV0IGlmIHRoaXMgZXZlciBjaGFuZ2VzXG4tXHQgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgaXMgcGlubmVkXG4tXHQgKiB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuXG4mIzQzO1x0ICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZFxuJiM0MztcdCAqIFZNU0EgR1BBLCBldmVuIGlmIGluc3RhbGxpbmcgdGhlIFZNU0EgZmFpbGVkLCBzbyB0aGF0IEtWTV9SVU4gd2lsbFxuJiM0MztcdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbiYjNDM7XHQgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLlxuIFx0ICovXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuJiM0MztcdGlmIChWQUxJRF9QQUdFKGdwYSkpXG4mIzQzO1x0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgKnNldl9lcyA9IFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2VzZXZfZXM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZzZXZfZXMtXHUwMDNlc25wX3Ztc2FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVx1MDAzZXNucF9ndWVzdF92bXNhX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbkBAIC00MTA1LDEwICYjNDM7NDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbi1cdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcbiYjNDM7XHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFNWTV9WTUdFWElUX0FQX0RFU1RST1k6XG4tXHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiYjNDM7XHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHZjcHVfdW5pbXBsKHZjcHUsIFwmIzM0O3ZtZ2V4aXQ6IGludmFsaWQgQVAgY3JlYXRpb24gcmVxdWVzdCBbJSN4XSBmcm9tIGd1ZXN0XFxuXCYjMzQ7LFxuQEAgLTQ3OTEsNiAmIzQzOzQ4MjgsOCBAQCBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdm0tXHUwMDNlc2V2X2VzLnZtc2EgPSBwYWdlX2FkZHJlc3Modm1zYV9wYWdlKTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuJiM0MztcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQgPSBzbnBfaXNfc2VjdXJlX3RzY19lbmFibGVkKHZjcHUtXHUwMDNla3ZtKTtcbiBcbkBAIC01MTE1LDkgJiM0Mzs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciBcJiMzNDtpcyBTTlBcJiMzNDsgaXMgYS1vayBoZXJlLCB0aGFua3MgdG8gbW11X2xvY2suXG4mIzQzO1x0ICogVGhlIHZDUFUmIzM5O3MgVk1TQSBHUEEgaXMgaW52YWxpZGF0ZWQgYmVmb3JlIHRoZSB2Q1BVIGlzIG1hZGUgdmlzaWJsZVxuJiM0MztcdCAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssXG4mIzQzO1x0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbiYjNDM7XHRcdGdwYV90IGdwYSA9IHRvX3N2bSh2Y3B1KS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuJiM0MztcbiYjNDM7XHRcdGlmIChWQUxJRF9QQUdFKGdwYSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzZT0gcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzYyByYW5nZS1cdTAwM2VlbmQpXG4mIzQzO1x0XHRcdGt2bV9tYWtlX3JlcXVlc3RfYW5kX2tpY2soS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcbiYjNDM7XHR9XG4mIzQzO31cbiBcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuJiM0Mzt2b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4mIzQzO1x0a3ZtX3Bmbl90IHN0YXJ0ID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xuJiM0MztcdGt2bV9wZm5fdCBlbmQgPSBzdGFydCAmIzQzOyAoMXVsIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZWY2OWE1MWFiMjdmOTguLjdkM2RkMzcxOTA3MDQ1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTU0NDUsNiAmIzQzOzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbiBcdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXG4gXHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxuJiM0MztcdC5yZWxvYWRfdm1zYSA9IHNldl9zbnBfcmVsb2FkX3Ztc2EsXG4gXG4gXHQudm1fY29weV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSxcbiBcdC52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLFxuQEAgLTU0NjAsOSAmIzQzOzU0NjEsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQudmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zID0gYXZpY192Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMsXG4gXHQuYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UgPSBzdm1fYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UsXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbiBcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxuLVx0LmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsXG4mIzQzO1x0LmdtZW1faW52YWxpZGF0ZV9yYW5nZSA9IHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2UsXG4mIzQzO1x0LmdtZW1fZnJlZV9mb2xpbyA9IHNldl9nbWVtX2ZyZWVfZm9saW8sXG4gXHQuZ21lbV9tYXhfbWFwcGluZ19sZXZlbCA9IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsLFxuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0yNzEsNyAmIzQzOzI3MSw4IEBAIHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSB7XG4gXHR1NjQgZ2hjYl9yZWdpc3RlcmVkX2dwYTtcbiBcbiBcdHN0cnVjdCBtdXRleCBzbnBfdm1zYV9tdXRleDsgLyogVXNlZCB0byBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIG9mIFZNU0EuICovXG4tXHRncGFfdCBzbnBfdm1zYV9ncGE7XG4mIzQzO1x0Z3BhX3Qgc25wX3BlbmRpbmdfdm1zYV9ncGE7XG4mIzQzO1x0Z3BhX3Qgc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuIFx0Ym9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7XG4gXHRib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTtcbiB9O1xuQEAgLTk5NSw2ICYjNDM7OTk2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuIHtcbiBcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gfVxuJiM0Mzt2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5AQCAtMTAwOCw3ICYjNDM7MTAxMCw4IEBAIGludCBzZXZfZGV2X2dldF9hdHRyKHUzMiBncm91cCwgdTY0IGF0dHIsIHU2NCAqdmFsKTtcbiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcbiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XG4gaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuJiM0Mzt2b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcbiBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHNldl9mcmVlX2RlY3J5cHRlZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp2bXNhKTtcbkBAIC0xMDM4LDcgJiM0MzsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW5cbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxuIHtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjlkZjZhY2Y5YTk4MmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04MTY3LDYgJiM0Mzs4MTY3LDggQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuJiM0MztcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSkpXG4mIzQzO1x0XHRcdGt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7XG4gXHR9XG4gXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSkgfHwgcmVxX2ludF93aW4gfHxcbkBAIC0xMDU5Miw5ICYjNDM7MTA1OTQsMTMgQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4tXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlKShzdGFydCwgZW5kKTtcbiYjNDM7XHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcbiYjNDM7fVxuJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pO1xuIH1cbiAjZW5kaWZcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi42YjdmODgwMTUwNWQ1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjYwNyw3ICYjNDM7MjYwNyw4IEBAIGxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC0xODUsNiAmIzQzOzE4NSwxMCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcdFx0fVxuIFxuIFx0XHRmbHVzaCB8PSBrdm1fbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIFx1MDAyNmdmbl9yYW5nZSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4mIzQzO1x0XHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoa3ZtLCBcdTAwMjZnZm5fcmFuZ2UpO1xuJiM0MzsjZW5kaWZcbiBcdH1cbiBcbiBcdGlmIChmbHVzaClcbkBAIC01MjMsMjMgJiM0Mzs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcbiBcdHJldHVybiBNRl9ERUxBWUVEO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XG4tXHRrdm1fcGZuX3QgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4tXHRpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4tXG4tXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUocGZuLCBwZm4gJiM0MzsgKDF1bCBcdTAwM2NcdTAwM2Mgb3JkZXIpKTtcbi19XG4tI2VuZGlmXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpbyA9IG5vb3BfZGlydHlfZm9saW8sXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvLFxuIFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGt2bV9nbWVtX2Vycm9yX2ZvbGlvLFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi1cdC5mcmVlX2ZvbGlvID0ga3ZtX2dtZW1fZnJlZV9mb2xpbyxcbiYjNDM7XHQuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyxcbiAjZW5kaWZcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE0ZGViYzYwY2M0NzMyOTZhZGRjOTU2MjliMjA0MzJkMWNmMjU4MDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwMTo0OTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IDgzZGM1MDg2MTM4YjM5Li5mZDA4NDU0Yzc1NTM2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC0xMzQsNiAmIzQzOzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbikKIEtWTV9YODZfT1BfT1BUSU9OQUwodm1fY29weV9lbmNfY29udGV4dF9mcm9tKQogS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pCiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChyZWxvYWRfdm1zYSkKIEtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKQogS1ZNX1g4Nl9PUChjaGVja19lbXVsYXRlX2luc3RydWN0aW9uKQogS1ZNX1g4Nl9PUChhcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQpCkBAIC0xNDUsOSAmIzQzOzE0NiwxNCBAQCBLVk1fWDg2X09QKHZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcikKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpOwogS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcikKIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSkKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGVfcmFuZ2UpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ZyZWVfZm9saW8pCiYjNDM7I2VuZGlmCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkKLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKQogI2VuZGlmCiAKICN1bmRlZiBLVk1fWDg2X09QCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBiNTE3MjU3YTYzMTUzMi4uZWU0N2EwZDFmZWI5OTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTIyLDYgJiM0MzsxMjIsOCBAQAogCUtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUCkKICNkZWZpbmUgS1ZNX1JFUV9IVl9UTEJfRkxVU0ggXAogCUtWTV9BUkNIX1JFUV9GTEFHUygzMiwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUCkKJiM0MzsjZGVmaW5lIEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCBcCiYjNDM7CUtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUCkKICNkZWZpbmUgS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFIFwKIAlLVk1fQVJDSF9SRVFfRkxBR1MoMzQsIEtWTV9SRVFVRVNUX1dBSVQpCiAKQEAgLTE4NzgsNiAmIzQzOzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCWludCAoKnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKTsKIAlpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7CiAJdm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CXZvaWQgKCpyZWxvYWRfdm1zYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCWludCAoKmdldF9mZWF0dXJlX21zcikodTMyIG1zciwgdTY0ICpkYXRhKTsKIApAQCAtMTkwMCw4ICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCiAJZ3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7CiAJdm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFCiAJaW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7Ci0Jdm9pZCAoKmdtZW1faW52YWxpZGF0ZSkoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCiYjNDM7CXZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTsKJiM0MzsJdm9pZCAoKmdtZW1fZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7I2VuZGlmCiAJaW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggNmMxM2RhOTQyYmZjY2MuLjhkMzZjYTBhMzgwYjVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTY5MjEsMjAgJiM0Mzs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIGt2bV96YXBfb2Jzb2xldGVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9tbXVfY29tbWl0X3phcF9wYWdlKGt2bSwgJmFtcDtpbnZhbGlkX2xpc3QpOwogfQogCi0vKgotICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZQotICogdG8gemFwIG9ic29sZXRlIHBhZ2VzLgotICoKLSAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nCi0gKiBkZXN0cm95ZWQsIGluIHRoZXNlIGNhc2VzLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgS1ZNIE1NVSBkb2VzCi0gKiBub3QgdXNlIGFueSByZXNvdXJjZSBvZiB0aGUgYmVpbmctZGVsZXRlZCBzbG90IG9yIGFsbCBzbG90cwotICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKQogewogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKLQl3cml0ZV9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAJdHJhY2Vfa3ZtX21tdV96YXBfYWxsX2Zhc3Qoa3ZtKTsKIAogCS8qCkBAIC02OTcxLDggJiM0Mzs2OTYyLDEyIEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSkKIAlrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUyk7CiAKIAlrdm1femFwX29ic29sZXRlX3BhZ2VzKGt2bSk7CiYjNDM7fQogCi0Jd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKIAkvKgogCSAqIFphcCB0aGUgaW52YWxpZGF0ZWQgVERQIE1NVSByb290cywgYWxsIFNQVEVzIG11c3QgYmUgZHJvcHBlZCBiZWZvcmUKQEAgLTY5ODYsNiAmIzQzOzY5ODEsMjQgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKQogCQlrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCB0cnVlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZQomIzQzOyAqIHRvIHphcCBvYnNvbGV0ZSBwYWdlcy4KJiM0MzsgKgomIzQzOyAqIEl0JiMzOTtzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nCiYjNDM7ICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lcwomIzQzOyAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzCiYjNDM7ICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJd3JpdGVfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoa3ZtKTsKJiM0MzsJd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CiYjNDM7CV9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKGt2bSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9tbXVfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJaW50IHIsIGk7CkBAIC03NTYwLDggJiM0Mzs3NTczLDE0IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKHN0cnVjdCBrdm0gKmt2bSwKIAlrdm1fbW11X3JlbW90ZV9mbHVzaF9vcl96YXAoa3ZtLCAmYW1wO2ludmFsaWRfbGlzdCwgZmx1c2gpOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwKLQkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm0tJmd0O2FyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gJmFtcDsmYW1wOwomIzQzOwkgICAgICAga3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpCiB7CiAJc3RydWN0IGt2bV9nZm5fcmFuZ2UgcmFuZ2UgPSB7CiAJCS5zbG90ID0gc2xvdCwKQEAgLTc1NzMsMjQgJiM0Mzs3NTkyLDIzIEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLAogCWJvb2wgZmx1c2g7CiAKIAl3cml0ZV9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci0JZmx1c2ggPSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgJmFtcDtyYW5nZSk7Ci0Ja3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goa3ZtLCBzbG90LCBmbHVzaCk7Ci0Jd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci19CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSkKLXsKLQlyZXR1cm4ga3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNICZhbXA7JmFtcDsKLQkgICAgICAga3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTsKLX0KJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCiYjNDM7CWlmIChzbG90LSZndDtnbWVtLmZpbGUpCiYjNDM7CQlrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoa3ZtLCAmYW1wO3JhbmdlKTsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoa3ZtKSkgewomIzQzOwkJX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCAmYW1wO3JhbmdlKTsKJiM0MzsJCWt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKGt2bSwgc2xvdCwgZmx1c2gpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCi12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwKLQkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQotewogCWlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpCi0JCWt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7Ci0JZWxzZQotCQlrdm1fbW11X3phcF9tZW1zbG90KGt2bSwgc2xvdCk7CiYjNDM7CQlfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pOwogfQogCiB2b2lkIGt2bV9tbXVfaW52YWxpZGF0ZV9tbWlvX3NwdGVzKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGdlbikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi43ZTA2ZWQxNmY0NzQ2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0zOTc5LDMwICYjNDM7Mzk3OSwyMSBAQCBzdGF0aWMgaW50IHNucF9iZWdpbl9wc2Moc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJcmV0dXJuIHNucF9kb19wc2Moc3ZtKTsKIH0KIAotLyoKLSAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC4KLSAqLwotc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7c3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKJiM0MzsJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpOwomIzQzOwl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJa3ZtX3Bmbl90IHBmbjsKLQlnZm5fdCBnZm47Ci0KLQlndWFyZChtdXRleCkoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7Ci0KLQlpZiAoIXN2bS0mZ3Q7c2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCkKLQkJcmV0dXJuOwotCi0Jc3ZtLSZndDtzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7CiAKLQkvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqLwotCXZjcHUtJmd0O2FyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTsKLQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7c3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpOwogCi0JLyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovCiYjNDM7CS8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQS4gKi8KIAlzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wudm1zYV9wYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJc3ZtLSZndDtzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwogCiAJLyoKIAkgKiBXaGVuIHJlcGxhY2luZyB0aGUgVk1TQSBkdXJpbmcgU0VWLVNOUCBBUCBjcmVhdGlvbiwKQEAgLTQwMTAsMTYgJiM0Mzs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqLwogCXZtY2JfbWFya19hbGxfZGlydHkoc3ZtLSZndDt2bWNiKTsKIAotCWlmICghVkFMSURfUEFHRShzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9ncGEpKQotCQlyZXR1cm47CiYjNDM7CS8qCiYjNDM7CSAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlCiYjNDM7CSAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS0mZ3Q7c2V2X2VzLnZtc2EuIEluCiYjNDM7CSAqIHRoZW9yeSwgc3ZtLSZndDtzZXZfZXMudm1zYSBjb3VsZCBiZSBmcmVlJiMzOTtkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dAomIzQzOwkgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlCiYjNDM7CSAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvCiYjNDM7CSAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGgKJiM0MzsJICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy4KJiM0MzsJICovCiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7CiAKLQlnZm4gPSBncGFfdG9fZ2ZuKHN2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSk7Ci0Jc3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwomIzQzOwlpZiAoIVZBTElEX1BBR0UoZ3BhKSkKJiM0MzsJCXJldHVybjsKIAogCXNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LSZndDtrdm0sIGdmbik7CiAJaWYgKCFzbG90KQogCQlyZXR1cm47CiAKJiM0MzsJbW11X3NlcSA9IGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CiAJLyoKIAkgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZQogCSAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuCkBAIC00MDI3LDI5ICYjNDM7NDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgTlVMTCkpCiAJCXJldHVybjsKIAomIzQzOwlyZWFkX2xvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIAkvKgotCSAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlCi0JICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLSZndDtzZXZfZXMudm1zYS4gSW4KLQkgKiB0aGVvcnksIHN2bS0mZ3Q7c2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXQKLQkgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlCi0JICogaGFuZGxlZCBkdXJpbmcgdGVhcmRvd24gcmF0aGVyIHRoYW4gZ3Vlc3QgYm9vdC4gIERlZmVycmluZyB0aGF0IGFsc28KLQkgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoCi0JICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy4KJiM0MzsJICogU2F2ZSB0aGUgZ3Vlc3QtcHJvdmlkZWQgR1BBLiAgSWYgcmV0cnkgaXMgbmVlZGVkLCB0aGVuIEtWTSB3aWxsIHRyeQomIzQzOwkgKiBhZ2FpbiB3aXRoIHRoZSBzYW1lIEdQQS4gIElmIHRoZSBWTVNBIGlzIHVzYWJsZSwgdGhlbiBLVk0gbmVlZHMgdG8KJiM0MzsJICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlCiYjNDM7CSAqIGZvciB0aGUgR1BBIGlzIGludmFsaWRhdGVkLgogCSAqLwotCXN2bS0mZ3Q7c2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTsKJiM0MzsJaWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpCiYjNDM7CQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7CiYjNDM7CWVsc2UKJiM0MzsJCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwomIzQzOwlyZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwlncGFfdCBncGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFzdm0tJmd0O3Nldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqLwomIzQzOwl2Y3B1LSZndDthcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7CiYjNDM7CWt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7CiAKLQkvKiBVc2UgdGhlIG5ldyBWTVNBICovCi0Jc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7CiYjNDM7CWdwYSA9IHN2bS0mZ3Q7c2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKIAotCS8qIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgKi8KLQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7CiYjNDM7CV9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpOwogCiAJLyoKLQkgKiBnbWVtIHBhZ2VzIGFyZW4mIzM5O3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlcwotCSAqIHRoZW4gY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHN2bS0mZ3Q7c2V2X2VzLnZtc2EgaXMgcGlubmVkCi0JICogdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLgomIzQzOwkgKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlIGZvciBDUkVBVEUgcmVxdWVzdHMsIGluZGljYXRlZCBieSBhIHZhbGlkCiYjNDM7CSAqIFZNU0EgR1BBLCBldmVuIGlmIGluc3RhbGxpbmcgdGhlIFZNU0EgZmFpbGVkLCBzbyB0aGF0IEtWTV9SVU4gd2lsbAomIzQzOwkgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmCiYjNDM7CSAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuCiAJICovCi0Ja3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKJiM0MzsJaWYgKFZBTElEX1BBR0UoZ3BhKSkKJiM0MzsJCWt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSAqc2V2X2VzID0gJmFtcDt0b19zdm0odmNwdSktJmd0O3Nldl9lczsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7c2V2X2VzLSZndDtzbnBfdm1zYV9tdXRleCk7CiYjNDM7CiYjNDM7CV9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBzZXZfZXMtJmd0O3NucF9ndWVzdF92bXNhX2dwYSk7CiB9CiAKIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKQEAgLTQxMDUsMTAgJiM0Mzs0MTQyLDEwIEBAIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJdGFyZ2V0X3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSA9IHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2luZm9fMjsKJiM0MzsJCXRhcmdldF9zdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2luZm9fMjsKIAkJYnJlYWs7CiAJY2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOgotCQl0YXJnZXRfc3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwomIzQzOwkJdGFyZ2V0X3N2bS0mZ3Q7c2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQl2Y3B1X3VuaW1wbCh2Y3B1LCAmIzM0O3ZtZ2V4aXQ6IGludmFsaWQgQVAgY3JlYXRpb24gcmVxdWVzdCBbJSN4XSBmcm9tIGd1ZXN0XG4mIzM0OywKQEAgLTQ3OTEsNiAmIzQzOzQ4MjgsOCBAQCBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdm0tJmd0O3Nldl9lcy52bXNhID0gcGFnZV9hZGRyZXNzKHZtc2FfcGFnZSk7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7CiAKIAl2Y3B1LSZndDthcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQgPSBzbnBfaXNfc2VjdXJlX3RzY19lbmFibGVkKHZjcHUtJmd0O2t2bSk7CiAKQEAgLTUxMTUsOSAmIzQzOzUxNTQsMzYgQEAgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpCiAKIAlyZXR1cm4gMDsKIH0KJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yICYjMzQ7aXMgU05QJiMzNDsgaXMgYS1vayBoZXJlLCB0aGFua3MgdG8gbW11X2xvY2suCiYjNDM7CSAqIFRoZSB2Q1BVJiMzOTtzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGUKJiM0MzsJICogdG8gb3RoZXIgdGFza3MsIGFuZCBjYW4gb25seSBiZWNvbWUgdmFsaWQgd2hpbGUgaG9sZGluZyBtbXVfbG9jaywKJiM0MzsJICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewomIzQzOwkJZ3BhX3QgZ3BhID0gdG9fc3ZtKHZjcHUpLSZndDtzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhOwomIzQzOwomIzQzOwkJaWYgKFZBTElEX1BBR0UoZ3BhKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZ3BhX3RvX2dmbihncGEpICZndDs9IHJhbmdlLSZndDtzdGFydCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZ3BhX3RvX2dmbihncGEpICZsdDsgcmFuZ2UtJmd0O2VuZCkKJiM0MzsJCQlrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7CiYjNDM7CX0KJiM0Mzt9CiAKLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpCiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CWt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTsKJiM0MzsJa3ZtX3Bmbl90IGVuZCA9IHN0YXJ0ICYjNDM7ICgxdWwgJmx0OyZsdDsgZm9saW9fb3JkZXIoZm9saW8pKTsKIAlrdm1fcGZuX3QgcGZuOwogCiAJaWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZWY2OWE1MWFiMjdmOTguLjdkM2RkMzcxOTA3MDQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTU0NDUsNiAmIzQzOzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sCiAJLm1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiwKIAkuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLAomIzQzOwkucmVsb2FkX3Ztc2EgPSBzZXZfc25wX3JlbG9hZF92bXNhLAogCiAJLnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20sCiAJLnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20sCkBAIC01NDYwLDkgJiM0Mzs1NDYxLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0gewogCS52Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMgPSBhdmljX3ZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucywKIAkuYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UgPSBzdm1fYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UsCiAKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCiAJLmdtZW1fcHJlcGFyZSA9IHNldl9nbWVtX3ByZXBhcmUsCi0JLmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsCiYjNDM7CS5nbWVtX2ludmFsaWRhdGVfcmFuZ2UgPSBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlLAomIzQzOwkuZ21lbV9mcmVlX2ZvbGlvID0gc2V2X2dtZW1fZnJlZV9mb2xpbywKIAkuZ21lbV9tYXhfbWFwcGluZ19sZXZlbCA9IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsLAomIzQzOyNlbmRpZgogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC0yNzEsNyAmIzQzOzI3MSw4IEBAIHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSB7CiAJdTY0IGdoY2JfcmVnaXN0ZXJlZF9ncGE7CiAKIAlzdHJ1Y3QgbXV0ZXggc25wX3Ztc2FfbXV0ZXg7IC8qIFVzZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiBWTVNBLiAqLwotCWdwYV90IHNucF92bXNhX2dwYTsKJiM0MzsJZ3BhX3Qgc25wX3BlbmRpbmdfdm1zYV9ncGE7CiYjNDM7CWdwYV90IHNucF9ndWVzdF92bXNhX2dwYTsKIAlib29sIHNucF9hcF93YWl0aW5nX2Zvcl9yZXNldDsKIAlib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTsKIH07CkBAIC05OTUsNiAmIzQzOzk5Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZCkKIHsKIAlyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogfQomIzQzO3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKQEAgLTEwMDgsNyAmIzQzOzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDsKIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKTsKIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTsKLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwomIzQzO3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7CiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTsKIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7CkBAIC0xMDM4LDcgJiM0MzsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW4KIHsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtODE2Nyw2ICYjNDM7ODE2Nyw4IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KJiM0MzsJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpKQomIzQzOwkJCWt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7CiAJfQogCiAJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8CkBAIC0xMDU5Miw5ICYjNDM7MTA1OTQsMTMgQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmQKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpCiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiB7Ci0Ja3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZSkoc3RhcnQsIGVuZCk7CiYjNDM7CWt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKGt2bSwgcmFuZ2UpOwomIzQzO30KJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJa3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pOwogfQogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBhYjhjZmFlYzgyZDMxZS4uNmI3Zjg4MDE1MDVkNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI2MDcsNyAmIzQzOzI2MDcsOCBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7CiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggODY2OTA2ODNiMmZlM2UuLjhlYzUwNDE5MzRkYmNmIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKQEAgLTE4NSw2ICYjNDM7MTg1LDEwIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAogCQl9CiAKIAkJZmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCAmYW1wO2dmbl9yYW5nZSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURQomIzQzOwkJa3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgJmFtcDtnZm5fcmFuZ2UpOwomIzQzOyNlbmRpZgogCX0KIAogCWlmIChmbHVzaCkKQEAgLTUyMywyMyAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbAogCXJldHVybiBNRl9ERUxBWUVEOwogfQogCi0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi1zdGF0aWMgdm9pZCBrdm1fZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCAwKTsKLQlrdm1fcGZuX3QgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7Ci0JaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwotCi0Ja3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKHBmbiwgcGZuICYjNDM7ICgxdWwgJmx0OyZsdDsgb3JkZXIpKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0gewogCS5kaXJ0eV9mb2xpbyA9IG5vb3BfZGlydHlfZm9saW8sCiAJLm1pZ3JhdGVfZm9saW8JPSBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvLAogCS5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbywKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKLQkuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sCiYjNDM7CS5mcmVlX2ZvbGlvID0ga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvLAogI2VuZGlmCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBQYXRjaCBmb3IgU0VWLVNOUCBhbmQgZ3Vlc3RfbWVtZmQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBvbiB4ODYsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBTRVYtU05QIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGd1ZXN0X21lbWZkYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9uYWxpdGllczogYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAsIGByZWxvYWRfdm1zYWAgd2l0aGluIGBrdm1feDg2X29wc2AuIEl0IGFsc28gcmVmYWN0b3JzIHBhcnRzIG9mIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UmIzM5O3JlIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBrdm1fbW11X3phcF9hbGxfZmFzdGAsIHNwbGl0dGluZyBpdCwgYW5kIGNoYW5nZXMgaW4gaG93IHRoZSBzaGFkb3cgbWVtb3J5IHNsb3RzIGFyZSBoYW5kbGVkIHZpYSBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgLCB3aGljaCBub3cgY29uc2lkZXJzIGBzbG90LSZndDtnbWVtLmZpbGVgLiBUaGVyZSBhcmUgZnVydGhlciB0d2Vha3MgdG8gYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYW5kIGFsc28gY2hhbmdlcyB0byBtZW1vcnkgaW52YWxpZGF0aW9uIHJvdXRpbmVzOiBzcGVjaWZpY2FsbHkgcmVmYWN0b3JpbmcgYGdtZW1faW52YWxpZGF0ZWAgaW50byBgZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYWxvbmcgd2l0aCB0aGUgYGdtZW1fZnJlZV9mb2xpb2AgZnVuY3Rpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBkZWZpbml0ZWx5IEtWTSBjb2RlLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBBTUQgU0VWLVNOUCBhbmQgZ3Vlc3RfbWVtZmQsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHNlY3VyZSB2aXJ0dWFsIG1hY2hpbmVzLiBTRVYtU05QIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgYnV0IHRoZSB1bmRlcmx5aW5nIEtWTSBjb2RlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmUgZnV6emVkLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBhIGtleSBxdWVzdGlvbiBhcmlzZXM6IGNhbiB3ZSBmdXp6IFNFVi1TTlAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGRvY3VtZW50YXRpb24gSSYjMzk7bSBsb29raW5nIGF0IHJhaXNlcyBhIGNvbmNlcm4gYWJvdXQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbnMuIENhbiBTRVYtU05QIGJlIHRyaWdnZXJlZCBpbiBRRU1VPyBJIGtub3cgUUVNVSBzdXBwb3J0cyBTRVYgYW5kIFNFVi1FUyBlbXVsYXRpb24sIGJ1dCBJJiMzOTttIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IFNFVi1TTlAuIEV2ZW4gaWYgdGhlIGVtdWxhdGlvbiBpc24mIzM5O3QgcGVyZmVjdCwgdGhlIEtWTSBpb2N0bHMgbWlnaHQgYmUgcmVhY2hhYmxlIHRvIHNvbWUgZXh0ZW50LgoKVGhlbiBJIHNlZSB0aGF0IGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYCBpcyB1c2VkIGluIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gVGhpcyBtZWFucyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHMgZm9yIFNFVi1TTlAuIFllcywgU0VWLVNOUCByZXF1aXJlcyBzcGVjaWZpYyBBTUQgRVBZQyBwcm9jZXNzb3JzLgoKU28sIGNhbiB3ZSBmdXp6IHRoaXMgaW4gR0NFPyBHQ0UgZG9lcyBvZmZlciBBTUQgaW5zdGFuY2VzLCBhbmQgc29tZSBvZiB0aGVtICptaWdodCogc3VwcG9ydCBTRVYtU05QLiBUaGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4gQWxzbywgSSBrbm93IHN5emthbGxlciBoZWF2aWx5IGZ1enplcyBLVk0sIHdoaWNoIGlzIGEgcHJvbWlzaW5nIHNpZ24uCgpJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBzcGVjaWZpY2FsbHksIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGFuZCBgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYC4gVGltZSBmb3IgYSBxdWljayBncmVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19LVk1fQU1EX1NFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ4LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjQ5OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1MC1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yND1rdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI2Omt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXHQmIzQzOz0gc3ZtL3Nldi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjcta3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHN2bS9oeXBlcnYub1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzMzMj1zdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MDQtXHRbU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTU11cdD0gYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0MDU6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDA2LVx0W1NWTV9FWElUX1ZNR0VYSVRdXHRcdFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNjIwPWludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2NDYtXHRcdHJldHVybiBucGZfaW50ZXJjZXB0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjQ3OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0OC1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDM5Mj1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkzLXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTUtXHRpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00Njg1PXN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDY5NC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDY5NTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ2OTYtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzI1PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0MjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDMtXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NjMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NjQ6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDY1LVx0LmdtZW1fcHJlcGFyZSA9IHNldl9nbWVtX3ByZXBhcmUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD02Nj1lbnVtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk3LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5LXN0cnVjdCBrdm1fc2V2X2luZm8ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTI2PXN0cnVjdCBrdm1fc3ZtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTM1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTM2LVx0c3RydWN0IGt2bV9zZXZfaW5mbyBzZXZfaW5mbztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fc3ZtICp0b19rdm1fc3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTM5My1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6Mzk0OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMzk1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zZXZfaW5mbyAqdG9fa3ZtX3Nldl9pbmZvKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk3OT12b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODItaW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTIxMD1TWU1fRlVOQ19FTkQoX19zdm1fdmNwdV9ydW4pXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUy0yMTEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUzoyMTI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjEzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTI4Mz1TWU1fRlVOQ19FTkQoX19zdm1fc2V2X2VzX3ZjcHVfcnVuKVxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM6Mjg0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0FNRF9TRVYgKi9cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZS0yLVxuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfS1ZNX0FNRF9TRVYpICYjNDM7PSBzZXYub1xuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpICYjNDM7PSBjbWRsaW5lLm9cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc3AtZGV2LmM9MjY2PXN0YXRpYyBpbnQgX19pbml0IHNwX21vZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3NwLWRldi5jLTMwMC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zcC1kZXYuYzozMDE6I2lmIElTX0JVSUxUSU4oQ09ORklHX0tWTV9BTUQpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19LVk1fQU1EX1NFVilcbmRyaXZlcnMvY3J5cHRvL2NjcC9zcC1kZXYuYy0zMDItaW50IF9faW5pdCBzZXZfbW9kdWxlX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM3Mj1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzMte1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMzNzQ6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzUtXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM0MTM9c3RhdGljIHZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fc25wKHZvaWQpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQxNC17XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQxNTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQxNi1cdGlmICghYW1kX2lvbW11X3NucF9lbilcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9NDAyMD1pbnQgYW1kX2lvbW11X3BjX3NldF9yZWcoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJhbmssIHU4IGNudHIsIHU4IGZ4biwgdTY0ICp2YWx1ZSlcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtNDAyNy1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzo0MDI4OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy00MDI5LXN0YXRpYyBpbnQgaW9tbXVfcGFnZV9tYWtlX3NoYXJlZCh2b2lkICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9Njk9c3RydWN0IGFtZF9pb21tdSAqZ2V0X2FtZF9pb21tdSh1bnNpZ25lZCBpbnQgaWR4KTtcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNzAtXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjcxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNzItaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9MTQ9ZW51bSBtaXNjX3Jlc190eXBlIHtcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoxNTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtMTYtXHQvKiogQE1JU0NfQ0dfUkVTX1NFVjogQU1EIFNFViBBU0lEcyByZXNvdXJjZSAqL1xuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTIwPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtaXNjX3Jlc19uYW1lW10gPSB7XG5rZXJuZWwvY2dyb3VwL21pc2MuYzoyMTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yMi1cdC8qIEFNRCBTRVYgQVNJRHMgcmVzb3VyY2UgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoqKkFuYWx5emluZyBUaGlzIEtWTS9BTUQgU0VWIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IEtWTS9BTUQgU0VWIHJlbGF0ZWQgZmlsZXM6IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgdGhlIGNvcmUgU1ZNIGNvZGUsIHRoZW4gc29tZSBvZiB0aGUgTU1VIGNvZGUgaW4gYG1tdS5jYCwgYW5kIGV2ZW4gdGhlIGBndWVzdF9tZW1mZC5jYCBmaWxlLiBJbnRlcmVzdGluZy4gU2VlbXMgbGlrZSB0aGV5IGFyZSByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBkZXRhaWxzIGhlcmUuIExvb2tzIGxpa2UgdGhlIGRldmVsb3BlciBpcyBhbHNvIHdvcmtpbmcgd2l0aCBgQ09ORklHX0tWTV9BTURfU0VWYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIHRoYXQgaXMgdGhlIG1haW4gY29uZmlnIG9wdGlvbi4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aGV5IGFyZSBhbHNvIHVzaW5nIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBOb3csIHRoYXQmIzM5O3MgYSBiaXQgbGVzcyBvYnZpb3VzLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGF0IGlzIHNvbWV0aGluZyB3ZSBjYW4gdG9nZ2xlIG9yIGlmIGl0JiMzOTtzIGp1c3QgYSBkZWZhdWx0IGJvb2xlYW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGVwZW5kZW5jeSBiZXR0ZXIgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTA9S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUxLSNlbmRpZlxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTI6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNTMtS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGVfcmFuZ2UpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNjgwPXN0cnVjdCBrdm1feDg2X29wcyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTA4LSNlbmRpZlxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxOTA5OiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTkxMC1cdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYzLVx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjQ6XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2NS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1ODI9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTk1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTk2OiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU5Ny1cdGlmIChzbG90LVx1MDAzZWdtZW0uZmlsZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1OTA9aW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRlcilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1OTUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1OTY6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTk3LXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNjA0PWxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MDgtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYwOTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxMC12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMTA9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMTMtXG52aXJ0L2t2bS9LY29uZmlnOjExNDpjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbnZpcnQva3ZtL0tjb25maWctMTE1LSAgICAgICBib29sXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz0xNjA9c3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xODgtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjE4OTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTE5MC1cdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0ge1xuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNTMzLVx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGt2bV9nbWVtX2Vycm9yX2ZvbGlvLFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo1MzQ6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01MzUtXHQuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgU0VWIFN1cHBvcnQqKgoKT2theSwgc28gYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBpcyBnZXR0aW5nIHB1bGxlZCBpbiBiZWNhdXNlIG9mIGBLVk1fQU1EX1NFVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbiB1bmRlcnN0YW5kaW5nICppdCogYXMgdGhlIGNvcmUgb2YgdGhlIHN1cHBvcnQuCgpIbW0sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGt2bV9tbXVfemFwX2FsbF9mYXN0YCBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEludGVyZXN0aW5nLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YC4gIFdhaXQgYSBtaW51dGUuLi4gYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCBpc24mIzM5O3Qgc3BlY2lmaWMgdG8gU0VWLCBpcyBpdD8gIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYnJvYWRlciBjb25uZWN0aW9uLiBJdCYjMzk7cyBub3QgKmp1c3QqIGFmZmVjdGluZyB0aGUgU0VWLXNwZWNpZmljIHBhdGguIExldCBtZSBnbyBjaGVjayB3aGF0JiMzOTtzIHVwIHdpdGggdGhhdCBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vbW11LmM9MjcwND12b2lkIGt2bV9hcmNoX21lbXNsb3RzX3VwZGF0ZWQoc3RydWN0IGt2bSAqa3ZtLCB1NjQgZ2VuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MDctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNzA4OnZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjcwOS1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jPTQ0Mj12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNDY2LVx0ICogTU9WRS9ERUxFVEU6XHRUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjQ2NzpcdCAqXHRcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KClcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy00NjgtXHQgKi9cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM9NDg3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTQ5MS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYzo0OTI6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNDkzLXtcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYz0xODE9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYy0xODctXG5hcmNoL21pcHMva3ZtL21pcHMuYzoxODg6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL21pcHMva3ZtL21pcHMuYy0xODktXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTIxMj12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yMjUtXHQgKiBNT1ZFL0RFTEVURTpcdFRoZSBvbGQgbWFwcGluZ3Mgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBjbGVhbmVkIHVwIGJ5XG5hcmNoL21pcHMva3ZtL21pcHMuYzoyMjY6XHQgKlx0XHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yMjctXHQgKi9cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUzNTQ9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfY29tbWl0X21lbW9yeV9yZWdpb25faHYoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTM2OS1cdCAqIEZvciBjaGFuZ2UgPT0gS1ZNX01SX01PVkUgb3IgS1ZNX01SX0RFTEVURSwgaGlnaGVyIGxldmVsc1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1MzcwOlx0ICogaGF2ZSBhbHJlYWR5IGNhbGxlZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpIHRvXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUzNzEtXHQgKiBmbHVzaCBzaGFkb3cgbWFwcGluZ3MuICBGb3IgS1ZNX01SX0NSRUFURSB3ZSBoYXZlIG5vXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NzI3PXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTczNC1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjczNTp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTczNi1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9MTMxPXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTM1LVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6MTM2OnZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTM3LVx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD03NjI9c3RhdGljIGlubGluZSB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKSB7fVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NzYzOnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC03NjQtXHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpIHt9XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NTc2PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1ODEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1ODI6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1ODMtXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDE2MD1zdGF0aWMgdm9pZCBrdm1fbW11X3Nsb3RfYXBwbHlfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4Mi1cdCAqIE1PVkUvREVMRVRFOiBUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTgzOlx0ICpcdFx0a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QoKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTg0LVx0ICpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODgtXHQgKiBNT1ZFL0RFTEVURTogVGhlIG9sZCBtYXBwaW5ncyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgYnlcbmFyY2gveDg2L2t2bS94ODYuYzoxMDE4OTpcdCAqXHRcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KCkuXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxOTAtXHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI1ND12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjU1LS8qIGZsdXNoIG1lbW9yeSB0cmFuc2xhdGlvbnMgcG9pbnRpbmcgdG8gJiMzOTtzbG90JiMzOTsgKi9cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxMjU2OnZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTctXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE3OTg9c3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xODIzLVx0ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE4MjQ6XHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChrdm0sIG9sZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjUtXHRrdm1fYXJjaF9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKGt2bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtWTSBNTVUgTG9naWMgTW9kaWZpY2F0aW9ucyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgbWVtc2xvdCBpcyBkZWxldGVkIG9yIG1vdmVkLCB0cmlnZ2VyZWQgYnkgYGt2bV9pbnZhbGlkYXRlX21lbXNsb3RgIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuCgpUaGUgY29kZSBpdHNlbGYgaGFzIGEgZmV3IGludGVyZXN0aW5nIHBhdGhzLiBFdmVuIHdpdGhvdXQgU0VWLVNOUCwgaXQmIzM5O3MgcmVhY2hhYmxlIGlmIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUgb3IgaWYgYHNsb3QtJmd0O2dtZW0uZmlsZWAgaXMgc2V0LiBOb3csIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUgdW5kZXIgdGhlIGRlZmF1bHQgS1ZNIFg4NiBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHdoZW4gYGt2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfREVGQVVMVF9WTWAgYW5kIGBrdm1fY2hlY2tfaGFzX3F1aXJrKGt2bSwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpYC4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvIGZvciBLVk0sIG1lYW5pbmcgdGhlc2UgY29kZSBwYXRocyBhcmUgaGlnaGx5IHJlbGV2YW50IGFuZCBkZWZpbml0ZWx5IGZ1enphYmxlLgoKVGhpcyBpcyBjb3JlIEtWTSBNTVUgbG9naWMuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHRhcmdldGluZy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBjb25maWd1cmUgc3l6a2FsbGVyIGZvciB0aGlzLgoKTGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWcgZmxhZ3MuICBJIHNlZSBgQ09ORklHX0tWTV9BTURfU0VWYC4gIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhbmQgc3BlY2lmaWNhbGx5IGNvdmVycyB0aGUgbW9kaWZpZWQgY29kZS4gU2hvdWxkIGJlIGxpc3RlZCBhcyBhIGNvbmZpZ3VyYXRpb24gaW4gYEVuYWJsZUNvbmZpZ3NgLiBIb3dldmVyLCBgS1ZNX0FNRF9TRVZgIGlzIHNwZWNpZmljIHRvIEFNRCwgYW5kIHN5emthbGxlciBkb2VzIHRlc3RzIG9uIEludGVsIGFuZCBBTUQuCgpUaGUgcHJvbXB0IG5vdGVzLCAmIzM0O09ubHkgbGlzdCB0aG9zZSB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBhbmQgYEtWTV9BTURfU0VWYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gCkkgYWxzbyBuZWVkIHRvIHNlZSB3aGF0IGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzLCBhbmQgbm90ZSB0aGF0IGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBLVk1fQU1EX1NFVmAuCgpOb3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgLCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4KClN5emthbGxlciBuZWVkcyB0aGUgZnVsbCBsaXN0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAgYW5kIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAgYXJlIHN0YXRpYywgYnV0IHN5emthbGxlciBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBmdXp6IHRoZW0gaWYgdGhleSBhcmUgaW4gdGhlIGJpbmFyeS4gU3l6a2FsbGVyIGZvY3VzZXMgb24gZnVuY3Rpb25zLCBzbyBsZXQmIzM5O3MgbGlzdCB0aGVtIGFsbDogYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuCgpJIGhhdmUgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRocy4gIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXMgY2FsbGVkIGR1cmluZyBtZW1zbG90IGRlbGV0aW9uIG9yIG1vdmVtZW50LCBzbyBub3QgYSBob3QgcGF0aC4gU2FtZSBmb3IgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBpbml0aWFsaXphdGlvbiBvciByYXJlIGV2ZW50IHBhdGhzLgoKSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgYENPTkZJR19LVk1fQU1EX1NFVmAgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRF9TRVYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjk2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyBhbmQgUGF0Y2ggU2NvcGUqKgoKQWxyaWdodCwgc28gYEtWTV9BTURfU0VWYCwgeWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZywgSSBrbm93IHRoYXQgb25lLiBNYWtlcyB5b3Ugd29uZGVyIHRob3VnaCwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGF0ZWQgY29uZmlncyBpbiBwbGF5IGhlcmUgdGhhdCBJJiMzOTttIG1pc3Npbmc/IEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc2VjdXJpdHkgZmVhdHVyZXMuCgpIbW0sIHRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBPa2F5LCBzbyBpdOKAmXMgZGVhbGluZyB3aXRoIHRoZSBndWVzdCBtZW1vcnkgZmlsZSBkZXNjcmlwdG9yIGludGVyZmFjZSB3aXRoaW4gS1ZNLiBUaGlzIGhhcyBtZSB3b25kZXJpbmcgLSBpcyB0aGVyZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gdGhlIGBndWVzdF9tZW1mZGAgZnVuY3Rpb25hbGl0eSBpdHNlbGY/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGEgZmVhdHVyZSB0aGF0IGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGF0IGNvbXBpbGUgdGltZSBvciBydW50aW1lIGluZGVwZW5kZW50bHkgb2YgYEtWTV9BTURfU0VWYCwgYXMgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaXRzIGludGVncmF0aW9uIHdpdGggU0VWLiBUaGF04oCZcyBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgaW50by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1BSSVZBVEVfTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGd1ZXN0X21lbWZkYCBPcHRpb24gaW4gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb3IgdXNhZ2Ugb2YgYGd1ZXN0X21lbWZkYC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhpcyBpcyByZWxhdGVkIHRvIGEgS1ZNIGZlYXR1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgS1ZNIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGB2aXJ0L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgZm9yIGNvbmZpZ3VyaW5nIGZlYXR1cmVzIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGJlZ2luIG15IHNlYXJjaC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBLY29uZmlnYCBmaWxlIHRvIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyIG9uIHdoYXQgYGd1ZXN0X21lbWZkYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndWVzdF9tZW1mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM1OmFsbG93cyBtYXBwaW5nIGd1ZXN0X21lbWZkIG1lbW9yeSBpbnRvIGEgZ3Vlc3QuICBBbGwgZmllbGRzIHNoYXJlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzNi1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBpZGVudGljYWxseS4gIFVzZXJzcGFjZSBjYW4gc2V0IEtWTV9NRU1fR1VFU1RfTUVNRkRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzg6W2d1ZXN0X21lbWZkX29mZnNldCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM5LW11c3QgcG9pbnQgYXQgYSBmaWxlIGNyZWF0ZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQgb24gdGhlIGN1cnJlbnQgVk0sIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTE6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcdF9fdTMyIGd1ZXN0X21lbWZkO1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTMtXHRfX3UzMiBwYWQxO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcJiMzNDt2YWxpZFwmIzM0OyBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNjQ9V2hlbiBtYXBwaW5nIGEgZ2ZuIGludG8gdGhlIGd1ZXN0LCBLVk0gc2VsZWN0cyBzaGFyZWQgdnMuIHByaXZhdGUsIGkuZSBjb25zdW1lc1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJiMzOTtzIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MTA9VGhlIFwmIzM0O2ZsYWdzXCYjMzQ7IGZpZWxkIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgbXVzdCBiZSAmIzM5OzAmIzM5Oy5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQxNy06VHlwZTogdm0gaW9jdGxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDE4OjpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZChpbilcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMjp0aGF0IHJlZmVycyB0byBpdC4gIGd1ZXN0X21lbWZkIGZpbGVzIGFyZSByb3VnaGx5IGFuYWxvZ291cyB0byBmaWxlcyBjcmVhdGVkXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMzp2aWEgbWVtZmRfY3JlYXRlKCksIGUuZy4gZ3Vlc3RfbWVtZmQgZmlsZXMgbGl2ZSBpbiBSQU0sIGhhdmUgdm9sYXRpbGUgc3RvcmFnZSxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNTpcJiMzNDtyZWd1bGFyXCYjMzQ7IG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQyNi12aXJ0dWFsIG1hY2hpbmUgKHNlZSBiZWxvdyksIGNhbm5vdCBiZSBtYXBwZWQsIHJlYWQsIG9yIHdyaXR0ZW4gYnkgdXNlcnNwYWNlLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mjc6YW5kIGNhbm5vdCBiZSByZXNpemVkICAoZ3Vlc3RfbWVtZmQgZmlsZXMgZG8gaG93ZXZlciBzdXBwb3J0IFBVTkNIX0hPTEUpLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzAtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDMyLVx0X191NjQgc2l6ZTtcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzNi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDM3OkNvbmNlcHR1YWxseSwgdGhlIGlub2RlIGJhY2tpbmcgYSBndWVzdF9tZW1mZCBmaWxlIHJlcHJlc2VudHMgcGh5c2ljYWwgbWVtb3J5LFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXCYjMzQ7c3RydWN0IGt2bVwmIzM0Oy4gIFRoZVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDQzPW1pZ3JhdGlvbiBvZiBhIHZpcnR1YWwgbWFjaGluZS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDQ0LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ2OmFuZCBtb3JlIHNwZWNpZmljYWxseSB2aWEgdGhlIGd1ZXN0X21lbWZkIGFuZCBndWVzdF9tZW1mZF9vZmZzZXQgZmllbGRzIGluXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NzpcJiMzNDtzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlwmIzM0Oywgd2hlcmUgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGlzIHRoZSBvZmZzZXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ4OmludG8gdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgRm9yIGEgZ2l2ZW4gZ3Vlc3RfbWVtZmQgZmlsZSwgdGhlcmUgY2FuIGJlIGF0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDUwOmd1ZXN0X21lbWZkIHJhbmdlIGlzIG5vdCBhbGxvd2VkIChhbnkgbnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGNhbiBiZSBib3VuZCB0b1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NTE6YSBzaW5nbGUgZ3Vlc3RfbWVtZmQgZmlsZSwgYnV0IHRoZSBib3VuZCByYW5nZXMgbXVzdCBub3Qgb3ZlcmxhcCkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ1ND1zcGVjaWZpZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBDdXJyZW50bHkgZGVmaW5lZCBmbGFnczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Ni0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1NzogIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCAgICAgICAgRW5hYmxlIHVzaW5nIG1tYXAoKSBvbiB0aGUgZ3Vlc3RfbWVtZmQgZmlsZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0NjY9V2hlbiB0aGUgS1ZNIE1NVSBwZXJmb3JtcyBhIFBGTiBsb29rdXAgdG8gc2VydmljZSBhIGd1ZXN0IGZhdWx0IGFuZCB0aGUgYmFja2luZ1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njg6Y29uc3VtZWQgZnJvbSBndWVzdF9tZW1mZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgc2hhcmVkIG9yIGEgcHJpdmF0ZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NjktZmF1bHQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjYxMT1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVx0LypcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI2NDQ6XHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjY0NS1cdCAqIHRoZXJlIGFyZW4mIzM5O3QgYW55IENvQ28gVk1zIHRoYXQgc3VwcG9ydCBvbmx5IHByaXZhdGUgbWVtb3J5IG9uIGFybTY0LlxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwMy1cdFx0XHQvKlxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcdFx0XHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTA1LVx0XHRcdCAqIGNyZWF0ZSBhIGZvbGlvIHRvIGJhY2sgdGhlIG1lbW9yeS4gSW5mb3JtIHVzZXJzcGFjZS5cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNTctXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozMzU4Olx0XHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1OTpcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0dldCBwZm4mIzQzO29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcJiMzNDspO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzYwLVx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzItXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3MzpcdCAqIHBvcHVsYXRpbmcgYSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEFzc2VydCB0aGF0IHRoZSBzbG90IGlzIGJhY2tlZFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0Olx0ICogYnkgZ3Vlc3RfbWVtZmQgYW5kIHRoYXQgdGhlIGdtZW0gaW5zdGFuY2UmIzM5O3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzUtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIzOTg9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXHQgKiAgICAgIGJlZm9yZWhhbmQuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0Mzg6XHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzktXHQgKiAgICAgIGluIHRoZSBSTVAgdGFibGUuXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDUyPXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDA3NzpcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNzgtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxODM9dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVx0XHQgKiB1c2Vyc3BhY2UgbWF5IGFsc28gZnJlZSBnbWVtIHBhZ2VzIGR1cmluZyBydW4tdGltZSB2aWFcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcdFx0ICogaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zIG9uIHRoZSBndWVzdF9tZW1mZCwgc28gZmx1c2ggdGhlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXHRcdCAqIGNhY2hlIGVudHJpZXMgZm9yIHRoZXNlIHBhZ2VzIGJlZm9yZSBmcmVlJiMzOTtpbmcgdGhlbSBiYWNrIHRvXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwMTUtXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMDE2Olx0ICogYSBjb25jdXJyZW50IFBVTkNIX0hPTEUgb24gZ3Vlc3RfbWVtZmQgdHJpZ2dlcnMgcmVtb3ZhbCBvZiBTUFRFcy5cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjEzLVx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMjE0Olx0ICogdXBkYXRlcywgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soKSBwcmV2ZW50cyBndWVzdF9tZW1mZCB1cGRhdGVzLFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVx0ICogbW11X25vdGlmaWVyIGV2ZW50cyBjYW4mIzM5O3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSYjMzk7cyBpbnRlcm5hbFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDU3Mz1ib29sIGt2bV9hcmNoX25vX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTgwOiAqIEtWTSBkb2VzbiYjMzk7dCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1ODEtICogd2l0aCBwcml2YXRlIG1lbW9yeSAodGhlIHByaXZhdGUgdnMuIHNoYXJlZCB0cmFja2luZyBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1ODI6ICogZ3Vlc3RfbWVtZmQpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ0LVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDY6XHRfX3UzMiBndWVzdF9tZW1mZDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ny1cdF9fdTMyIHBhZDE7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NDU9c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1NDojZGVmaW5lIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjU4OnN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU5LVx0X191NjQgc2l6ZTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzg9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00My1cdF9fdTY0IHVzZXJzcGFjZV9hZGRyO1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0Olx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ1Olx0X191MzIgZ3Vlc3RfbWVtZmQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDYtXHRfX3UzMiBwYWQxO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjM1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXHRfSU9XUihLVk1JTywgIDB4ZDQsIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0OS1cdF9fdTY0IHNpemU7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xNTc9VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtOjE1ODpURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTU5LVRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaGFyZHdhcmVfZGlzYWJsZV90ZXN0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGdldC1yZWctbGlzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTQyPXN0YXRpYyB2b2lkIHRlc3RfbW1hcF9jb3coaW50IGZkLCBzaXplX3Qgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVx0bWVtID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzpcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcJiMzNDtDb3B5LW9uLXdyaXRlIG5vdCBhbGxvd2VkIGJ5IGd1ZXN0X21lbWZkLlwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTE3ND1zdGF0aWMgdm9pZCB0ZXN0X2NvbGxhcHNlKGludCBmZCwgdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTgyLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlx0ICogVG8gZXZlbiByZWFjaCB0aGUgcG9pbnQgd2hlcmUgdGhlIGd1ZXN0X21lbWZkIGZvbGlvcyB3aWxsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4NC1cdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjE4NTpcdCAqIHdpdGhpbiB0aGUgZ3Vlc3RfbWVtZmQgaGF2ZSB0byBiZSBhbGlnbmVkIHRvIHBtZF9zaXplLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXHQgKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MjA5Olx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMTAtXHQgKiBmaW5lLi4uXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz0zNDg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2JpbmRpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBmZCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1ODpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9pbnZhbGlkX3NpemVzKHN0cnVjdCBrdm1fdm0gKnZtLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTk6XHRcdFx0XHRcdFx0ICB1NjQgZ3Vlc3RfbWVtZmRfZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjQtXHRmb3IgKHNpemUgPSAxOyBzaXplIFx1MDAzYyBwYWdlX3NpemU7IHNpemUmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcdFx0ZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIG5vbi1wYWdlLWFsaWduZWQgcGFnZSBzaXplICYjMzk7MHglbHgmIzM5OyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzY4LVx0XHRcdCAgICBzaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzcyOnN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX211bHRpcGxlKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNzc6XHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc4LVx0VEVTVF9BU1NFUlQoZmQxICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM4NDpcdGZkMiA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBwYWdlX3NpemUgKiAyLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVx0VEVTVF9BU1NFUlQoZmQyICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDEte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVx0Zm9yIChmbGFnID0gQklUKDApOyBmbGFnOyBmbGFnIFx1MDAzY1x1MDAzYz0gMSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MDc6XHRcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOC1cdFx0aWYgKGZsYWcgXHUwMDI2IHZhbGlkX2ZsYWdzKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOS1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2U9IDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQxMDpcdFx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAmIzM5OzB4JWx4JiMzOTsgc2hvdWxkIHN1Y2NlZWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cdFx0XHRcdCAgICBmbGFnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTU6XHRcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJiMzOTsweCVseCYjMzk7IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXHRcdFx0XHQgICAgZmxhZyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcdGludCBmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChfX3ZtLCBfX2dtZW1fc2l6ZSwgX19mbGFncyk7XHRcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MjQtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQxOnN0YXRpYyB2b2lkIF9fdGVzdF9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NDIte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XHR0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZSh2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0NDpcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDQ1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzI6c3RhdGljIHZvaWQgdGVzdF9ndWVzdF9tZW1mZCh1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3My17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3NzpcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OTpcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cdGlmIChmbGFncyBcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19NTUFQKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg2LVx0aWYgKGZsYWdzIFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODc6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg4LVx0XHRcdFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NDkzPXN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodTggKm1lbSwgdTY0IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUwNTpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2d1ZXN0KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzQtXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1MzU6XHQgKiBLVk0gcmVxdWlyZXMgZ3Vlc3RfbWVtZmQgZmlsZXMgYW5kIG1lbXNsb3RzIHRvIGJlIHNpemVkIHRvIG11bHRpcGxlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXHQgKiBvZiB0aGUgaG9zdCBwYWdlIHNpemUuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXHRzaXplID0gbWF4X3Qoc2l6ZV90LCB2bS1cdTAwM2VwYWdlX3NpemUsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcdGZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBHVUVTVF9NRU1GRF9GTEFHX01NQVAgfFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NDAtXHRcdFx0XHRcdCAgICAgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3MC1cdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTcxOlx0ICogc3VwcG9ydCBndWVzdF9tZW1mZCBoYXZlIHRoYXQgc3VwcG9ydCBmb3IgdGhlIGRlZmF1bHQgVk0gdHlwZS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXHRmb3JfZWFjaF9zZXRfYml0KHZtX3R5cGUsIFx1MDAyNnZtX3R5cGVzLCBCSVRTX1BFUl9UWVBFKHZtX3R5cGVzKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4Olx0XHR0ZXN0X2d1ZXN0X21lbWZkKHZtX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU4MDpcdHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3QoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY2NT12b2lkIHZtX2NyZWF0ZV9pcnFjaGlwKHN0cnVjdCBrdm1fdm0gKnZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2Njc6c3RhdGljIGlubGluZSBpbnQgX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBzaXplLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NjgtXHRcdFx0XHRcdCAgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02Njkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XHRzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCBndWVzdF9tZW1mZCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjcxLVx0XHQuc2l6ZSA9IHNpemUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY3NTpcdHJldHVybiBfX3ZtX2lvY3RsKHZtLCBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELCBcdTAwMjZndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ni19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3OS1cdFx0XHRcdFx0dTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2ODE6XHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjkyLVx0XHRcdFx0Z3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XHRcdFx0XHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTQtaW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5NjpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDItXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NzAzOlx0XHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcxLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00OTktXHRmbGFncyA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NTAwOlx0aWYgKGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHNoYXBlKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTgwND1zdGF0aWMgdm9pZCBfX3ZtX21lbV9yZWdpb25fZGVsZXRlKHN0cnVjdCBrdm1fdm0gKnZtLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXHR9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODE5Olx0aWYgKChpbnQpcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCBcdTAwM2U9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlx0XHRrdm1fZnJlZV9mZChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NDgtXHRcdFx0XHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTUwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU2LVx0XHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTc6XHRcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcdFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXHR9O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NjctXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4Olx0XHRcdFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVx0aW50IHJldCA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIGZsYWdzLCBncGEsIHNpemUsIGh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XHRcdFx0XHRcdCAgICAgICBndWVzdF9tZW1mZCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlx0XHRpbnQgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4NS1cdGlmIChmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODY6XHRcdGlmIChndWVzdF9tZW1mZCBcdTAwM2MgMCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XHRcdFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg4Olx0XHRcdFRFU1RfQVNTRVJUKCFndWVzdF9tZW1mZF9vZmZzZXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4OTpcdFx0XHRcdCAgICBcJiMzNDtPZmZzZXQgbXVzdCBiZSB6ZXJvIHdoZW4gY3JlYXRpbmcgbmV3IGd1ZXN0X21lbWZkXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlx0XHRcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTEtXHRcdH0gZWxzZSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTctXHRcdFx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcdFx0XHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTktXHRcdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDE6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSBndWVzdF9tZW1mZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAzLVx0fSBlbHNlIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0Olx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwNS1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTExOS1cdFx0XCYjMzQ7ICBzbG90OiAldSBmbGFnczogMHgleFxcblwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMjA6XHRcdFwmIzM0OyAgZ3Vlc3RfcGh5c19hZGRyOiAweCVseCBzaXplOiAweCVsbHggZ3Vlc3RfbWVtZmQ6ICVkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMjEtXHRcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMjpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9MTI3ND12b2lkIHZtX2d1ZXN0X21lbV9mYWxsb2NhdGUoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBiYXNlLCB1NjQgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5MS1cdFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5MjpcdFx0ZmRfb2Zmc2V0ID0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgJiM0Mzsgb2Zmc2V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTMtXHRcdGxlbiA9IG1pbl90KHU2NCwgZW5kIC0gZ3BhLCByZWdpb24tXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplIC0gb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyOTU6XHRcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkLCBtb2RlLCBmZF9vZmZzZXQsIGxlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ni1cdFx0VEVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkIHRvICVzIGF0ICVseCAobGVuID0gJWx1KSwgZmQgPSAlZCwgbW9kZSA9ICV4LCBvZmZzZXQgPSAlbHhcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ny1cdFx0XHQgICAgcHVuY2hfaG9sZSA/IFwmIzM0O3B1bmNoIGhvbGVcJiMzNDsgOiBcJiMzNDthbGxvY2F0ZVwmIzM0OywgZ3BhLCBsZW4sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcdFx0XHQgICAgcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk5LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODYtXHRpZiAoc3VwcG9ydGVkX2ZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM4NzpcdFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXHRcdFx0XHRcdFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzkxOlx0XHRcdFx0XHRcdCAwLCBNRU1fUkVHSU9OX1NJWkUsIE5VTEwsIGd1ZXN0X21lbWZkLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzkyLVx0XHRURVNUX0FTU0VSVChyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTYtXHRcdFx0XHRcdFx0IEtWTV9NRU1fUkVBRE9OTFkgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTgtXHRcdFRFU1RfQVNTRVJUKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDAxOlx0XHRjbG9zZShndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMi1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTQwOT1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9tYXhfbWVtb3J5X3JlZ2lvbnModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1Ny0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NTg6c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbWVtZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cdFx0XHRcdCAgICAgc2l6ZV90IG9mZnNldCwgY29uc3QgY2hhciAqbXNnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIHZtLVx1MDAzZWt2bV9mZCwgMCwgXCYjMzQ7S1ZNIGZkIHNob3VsZCBmYWlsXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDc3Olx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cdTAwM2VmZCwgMCwgXCYjMzQ7Vk0mIzM5O3MgZmQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3OS1cdG1lbWZkID0ga3ZtX21lbWZkX2FsbG9jKE1FTV9SRUdJT05fU0laRSwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCAwLCBcJiMzNDtSZWd1bGFyIG1lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODEtXHRjbG9zZShtZW1mZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODMtXHR2bTIgPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NTpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFwmIzM0O090aGVyIFZNJiMzOTtzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5MjpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTMtXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBQQUdFX1NJWkU7IGkmIzQzOyYjNDM7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0OTQ6XHRcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIGksIFwmIzM0O1VuYWxpZ25lZCBvZmZzZXQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgTUVNX1JFR0lPTl9TSVpFICogNSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyMy1cdCAqIERlbGV0ZSB0aGUgZmlyc3QgbWVtc2xvdCwgYW5kIHRoZW4gYXR0ZW1wdCB0byByZWNyZWF0ZSBpdCBleGNlcHRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0Olx0ICogd2l0aCBhIFwmIzM0O2JhZFwmIzM0OyBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTI5LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlx0ICogVmVyaWZ5IHRoYXQgb3ZlcmxhcCBpbiB0aGUgZ3Vlc3RfbWVtZmQgYmluZGluZ3MgKGkuZS4gaW4gZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTMxLVx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNy1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90JiMzOTtzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0MS1cdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU0NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU1ODpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MjMwPXN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfcHVuY2hfaG9sZSh1NjQgYmFzZV9ncGEsIGJvb2wgcHJlY2lzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXHQgKiBDb252ZXJ0IHRoZSBlbnRpcmUgcmFuZ2UgdG8gcHJpdmF0ZSwgdGhpcyB0ZXN0Y2FzZSBpcyBhbGwgYWJvdXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjIzNzpcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJiMzOTt0IG5lZWRlZC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yNzQtXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mjc1Olx0ICogdGhlIGd1ZXN0X21lbWZkIGJhY2tpbmcgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gc2hhcmVkIGFuZCBwcml2YXRlLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI4MTpcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI4Mi1cdCAqIGZhdWx0ZWQgaW4sIG9uY2Ugd2l0aCBvbmx5IHRoZSB0YXJnZXQgcmFuZ2UgZmF1bHRlZCBpbi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0zNjk9c3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjM5NzpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1mZF9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjUtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI2Olx0ICogQWxsb2NhdGUgYW5kIGZyZWUgbWVtb3J5IGZyb20gdGhlIGd1ZXN0X21lbWZkIGFmdGVyIGNsb3NpbmcgdGhlIFZNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XHQgKiBmZC4gIFRoZSBndWVzdF9tZW1mZCBpcyBnaWZ0ZWQgYSByZWZlcmVuY2UgdG8gaXRzIG93bmluZyBWTSwgaS5lLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDI4LVx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjk6XHQgKiByZWZlcmVuY2UgdG8gdGhlIGd1ZXN0X21lbWZkIGlzIGFsc28gcHV0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVx0ICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2ODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGBndWVzdF9tZW1mZGAgSW1wbGVtZW50YXRpb24gaW4gS1ZNKioKCkFscmlnaHQsIHNvIGBndWVzdF9tZW1mZGAgaXMgZGlyZWN0bHkgdGllZCB0byBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCB3aXRoIHRoZSBgS1ZNX01FTV9HVUVTVF9NRU1GRGAgZmxhZy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgZXhwbGljaXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBpdCDigJMgaXQgc2VlbXMgdG8gYmUgZW5hYmxlZCBpbXBsaWNpdGx5IHdoZW4gYENPTkZJR19LVk1gIGlzIGFjdGl2ZSBhbmQgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGlzIGNvbXBhdGlibGUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBzb21ld2hhdC4KCk5vdywgd2FpdCBhIHNlY29uZC4uLiB0aGlzIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBBTUQmIzM5O3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBhbHNvIGJyaW5ncyBpbiBgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVgIGFuZCBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBIbW1tLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24gYmV0dGVyLiBJcyBgZ3Vlc3RfbWVtZmRgIGluZGlyZWN0bHkgZW5hYmxlZCBieSBgQ09ORklHX0tWTWAgd2hlbiAqZWl0aGVyKiBgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVgIG9yIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAgYXJlIHByZXNlbnQ/IE9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgY29uZGl0aW9uIEkgYW0gbWlzc2luZz8gSXQgc2VlbXMgbGlrZSBpdCBtdXN0IGJlIGVuYWJsZWQgY29uZGl0aW9uYWxseSBzb21laG93LCByYXRoZXIgdGhhbiBiZWluZyB1bml2ZXJzYWxseSBhdmFpbGFibGUuCgpJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUgaW1tZWRpYXRlbHkuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHNwb3QgZm9yIGEgY2xlYXIgZGVmaW5pdGlvbiBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbiBoZXJlLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IHRoZSByZWxhdGlvbnNoaXAgaXMgYmV0d2VlbiBgZ3Vlc3RfbWVtZmRgLCB0aGVzZSBgSEFWRV9LVk1fQVJDSF9HTUVNXypgIG1hY3JvcywgYW5kIHRoZSBvdmVyYWxsIGBDT05GSUdfS1ZNYCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1BSSVZBVEVfTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyNjMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBHdWVzdCBNZW1vcnkgU2hhcmluZyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBzaGFyaW5nIHdpdGhpbiBLVk0gZ3Vlc3RzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWVtZmRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzc29jaWF0ZWQgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBJdOKAmWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGJlaW5nIHVzZWQgb3IgY2FuIGJlIGVuYWJsZWQgZm9yIHRoZXNlIGd1ZXN0cy4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBlbnRyeSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSB3b3JrLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgaXQsIGFuZCBpZiBpdCYjMzk7cyByZWxldmFudCB0byB0aGlzIGN1cnJlbnQgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d1ZXN0X21lbWZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NzcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzM0PUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMiBpcyBhbiBleHRlbnNpb24gdG8gS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gdGhhdFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzU6YWxsb3dzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGludG8gYSBndWVzdC4gIEFsbCBmaWVsZHMgc2hhcmVkIHdpdGhcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzc6aW4gZmxhZ3MgdG8gaGF2ZSBLVk0gYmluZCB0aGUgbWVtb3J5IHJlZ2lvbiB0byBhIGdpdmVuIGd1ZXN0X21lbWZkIHJhbmdlIG9mXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzODpbZ3Vlc3RfbWVtZmRfb2Zmc2V0LCBndWVzdF9tZW1mZF9vZmZzZXQgJiM0MzsgbWVtb3J5X3NpemVdLiAgVGhlIHRhcmdldCBndWVzdF9tZW1mZFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzMzktbXVzdCBwb2ludCBhdCBhIGZpbGUgY3JlYXRlZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBvbiB0aGUgY3VycmVudCBWTSwgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNDE9Ym91bmRzIGNoZWNrcyBhcHBseSAodXNlIGNvbW1vbiBzZW5zZSkuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjsgLyogc3RhcnQgb2YgdGhlIHVzZXJzcGFjZSBhbGxvY2F0ZWQgbWVtb3J5ICovXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MTpcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUyOlx0X191MzIgZ3Vlc3RfbWVtZmQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cdF9fdTMyIHBhZDE7XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1NzpBIEtWTV9NRU1fR1VFU1RfTUVNRkQgcmVnaW9uIF9tdXN0XyBoYXZlIGEgdmFsaWQgZ3Vlc3RfbWVtZmQgKHByaXZhdGUgbWVtb3J5KSBhbmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU4LXVzZXJzcGFjZV9hZGRyIChzaGFyZWQgbWVtb3J5KS4gIEhvd2V2ZXIsIFwmIzM0O3ZhbGlkXCYjMzQ7IGZvciB1c2Vyc3BhY2VfYWRkciBzaW1wbHlcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM2NTp1c2Vyc3BhY2VfYWRkciB2cy4gZ3Vlc3RfbWVtZmQsIGJhc2VkIG9uIHRoZSBnZm4mIzM5O3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNjYtc3RhdGUuICBBdCBWTSBjcmVhdGlvbiB0aW1lLCBhbGwgbWVtb3J5IGlzIHNoYXJlZCwgaS5lLiB0aGUgUFJJVkFURSBhdHRyaWJ1dGVcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXCYjMzQ7ZmxhZ3NcJiMzNDsgZmllbGQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBtdXN0IGJlICYjMzk7MCYjMzk7LlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE3LTpUeXBlOiB2bSBpb2N0bFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTktOlJldHVybnM6IEEgZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3Jcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQyMT1LVk1fQ1JFQVRFX0dVRVNUX01FTUZEIGNyZWF0ZXMgYW4gYW5vbnltb3VzIGZpbGUgYW5kIHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3JcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIyOnRoYXQgcmVmZXJzIHRvIGl0LiAgZ3Vlc3RfbWVtZmQgZmlsZXMgYXJlIHJvdWdobHkgYW5hbG9nb3VzIHRvIGZpbGVzIGNyZWF0ZWRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjQtYW5kIGFyZSBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQuICBVbmxpa2VcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDI1OlwmIzM0O3JlZ3VsYXJcJiMzNDsgbWVtZmRfY3JlYXRlKCkgZmlsZXMsIGd1ZXN0X21lbWZkIGZpbGVzIGFyZSBib3VuZCB0byB0aGVpciBvd25pbmdcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI2LXZpcnR1YWwgbWFjaGluZSAoc2VlIGJlbG93KSwgY2Fubm90IGJlIG1hcHBlZCwgcmVhZCwgb3Igd3JpdHRlbiBieSB1c2Vyc3BhY2UsXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQyOC1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDMxOiAgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzItXHRfX3U2NCBzaXplO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDM2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzOC1pLmUuIGlzIGNvdXBsZWQgdG8gdGhlIHZpcnR1YWwgbWFjaGluZSBhcyBhIHRoaW5nLCBub3QgdG8gYSBcJiMzNDtzdHJ1Y3Qga3ZtXCYjMzQ7LiAgVGhlXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0NDM9bWlncmF0aW9uIG9mIGEgdmlydHVhbCBtYWNoaW5lLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NTpLVk0gY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgbWFwcGluZyBndWVzdF9tZW1mZCB2aWEgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDY6YW5kIG1vcmUgc3BlY2lmaWNhbGx5IHZpYSB0aGUgZ3Vlc3RfbWVtZmQgYW5kIGd1ZXN0X21lbWZkX29mZnNldCBmaWVsZHMgaW5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlwmIzM0O3N0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yXCYjMzQ7LCB3aGVyZSBndWVzdF9tZW1mZF9vZmZzZXQgaXMgdGhlIG9mZnNldFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDQ5LW1vc3Qgb25lIG1hcHBpbmcgcGVyIHBhZ2UsIGkuZS4gYmluZGluZyBtdWx0aXBsZSBtZW1vcnkgcmVnaW9ucyB0byBhIHNpbmdsZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NTA6Z3Vlc3RfbWVtZmQgcmFuZ2UgaXMgbm90IGFsbG93ZWQgKGFueSBudW1iZXIgb2YgbWVtb3J5IHJlZ2lvbnMgY2FuIGJlIGJvdW5kIHRvXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDUyLVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDU2LSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1OC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ2NzpndWVzdF9tZW1mZCBoYXMgdGhlIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCBzZXQsIHRoZW4gdGhlIGZhdWx0IHdpbGwgYWx3YXlzIGJlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ2ODpjb25zdW1lZCBmcm9tIGd1ZXN0X21lbWZkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgYSBzaGFyZWQgb3IgYSBwcml2YXRlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNjExPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDMtXHQvKlxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcdCAqIE9ubHkgc3VwcG9ydCBndWVzdF9tZW1mZCBiYWNrZWQgbWVtc2xvdHMgd2l0aCBtYXBwYWJsZSBtZW1vcnksIHNpbmNlXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQ1LVx0ICogdGhlcmUgYXJlbiYjMzk7dCBhbnkgQ29DbyBWTXMgdGhhdCBzdXBwb3J0IG9ubHkgcHJpdmF0ZSBtZW1vcnkgb24gYXJtNjQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTQ3ND1pbnQga3ZtX2hhbmRsZV92bmNyX2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVx0XHRcdC8qXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTA0Olx0XHRcdCAqIEZvciBndWVzdF9tZW1mZCwgdGhpcyBpbmRpY2F0ZXMgdGhhdCBpdCBmYWlsZWQgdG9cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1MDUtXHRcdFx0ICogY3JlYXRlIGEgZm9saW8gdG8gYmFjayB0aGUgbWVtb3J5LiBJbmZvcm0gdXNlcnNwYWNlLlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzM0Nj1zdGF0aWMgdTgga3ZtX2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cdH0gZWxzZSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTg6XHRcdC8qIFRPRE86IENhbGwgaW50byBndWVzdF9tZW1mZCBvbmNlIGh1Z2VwYWdlcyBhcmUgc3VwcG9ydGVkLiAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozMzU5Olx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7R2V0IHBmbiYjNDM7b3JkZXIgZnJvbSBndWVzdF9tZW1mZFwmIzM0Oyk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXHRcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE0Nz1pbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cdCAqIE1hcHBpbmcgYSBwcmUtZGV0ZXJtaW5lZCBwcml2YXRlIHBmbiBpcyBpbnRlbmRlZCBvbmx5IGZvciB1c2Ugd2hlblxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTczOlx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzQ6XHQgKiBieSBndWVzdF9tZW1mZCBhbmQgdGhhdCB0aGUgZ21lbSBpbnN0YW5jZSYjMzk7cyBpbnZhbGlkYXRlX2xvY2sgaXMgaGVsZC5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3NS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjM5OD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzNy1cdCAqICAgICAgYmVmb3JlaGFuZC5cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcdCAqICAgMykgVGhlIFBGTiBvZiB0aGUgZ3Vlc3RfbWVtZmQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gc2V0IHRvIHByaXZhdGVcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzOS1cdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQwNTI9c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc2LVx0ICogZmFpbCBpbnN0ZWFkIG9mIGJsb2NraW5nIGluZGVmaW5pdGVseSBhbmQgaGFuZ2luZyB0aGUgdkNQVSwgZS5nLiBpZlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3Olx0ICogdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgcGFnZSBpcyB1bmF2YWlsYWJsZS5cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3OC1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTE4Mz12b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzUtXHRcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjM2Olx0XHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIzNy1cdFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUmIzM5O2luZyB0aGVtIGJhY2sgdG9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI5NTI9c3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cdCAqIHRoZSBURFgtTW9kdWxlLCBhbmQgdG8gZW5zdXJlIHRoZSBuby1mYWlsIE1NVSBwYXRocyBzdWNjZWVkLCBlLmcuIGlmXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMwMTY6XHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMDE3LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMTg5PXN0YXRpYyBpbnQgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXHQgKiBiZXR3ZWVuIG1hcHBpbmcgdGhlIHBmbiBhbmQgbm93LCBidXQgc2xvdHNfbG9jayBwcmV2ZW50cyBtZW1zbG90XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMyMTQ6XHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTUtXHQgKiBtbXVfbm90aWZpZXIgZXZlbnRzIGNhbiYjMzk7dCByZWFjaCBTLUVQVCBlbnRyaWVzLCBhbmQgS1ZNJiMzOTtzIGludGVybmFsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTczPWJvb2wga3ZtX2FyY2hfbm9fcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTc5LS8qXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1ODA6ICogS1ZNIGRvZXNuJiMzOTt0IHlldCBzdXBwb3J0IGluaXRpYWxpemluZyBndWVzdF9tZW1mZCBtZW1vcnkgYXMgc2hhcmVkIGZvciBWTXNcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU4MS0gKiB3aXRoIHByaXZhdGUgbWVtb3J5ICh0aGUgcHJpdmF0ZSB2cy4gc2hhcmVkIHRyYWNraW5nIG5lZWRzIHRvIGJlIG1vdmVkIGludG9cbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1ODMtICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDQtXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NTpcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcdF9fdTMyIGd1ZXN0X21lbWZkO1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ3LVx0X191MzIgcGFkMTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY0NT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1My1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjU0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU1LSNkZWZpbmUgR1VFU1RfTUVNRkRfRkxBR19NTUFQXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyAwKVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU3LVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXHRfX3U2NCBzaXplO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQzLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDQ6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XHRfX3UzMiBndWVzdF9tZW1mZDtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ni1cdF9fdTMyIHBhZDE7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2MzU9c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDMtXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0NDojZGVmaW5lIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0Ny1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ4OnN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVx0X191NjQgc2l6ZTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gZ3Vlc3RfbWVtZmRfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBoYXJkd2FyZV9kaXNhYmxlX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE5Nj1URVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gZ2V0LXJlZy1saXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtOjE5NzpURVNUX0dFTl9QUk9HU19hcm02NCAmIzQzOz0gZ3Vlc3RfbWVtZmRfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xOTgtVEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NDI9c3RhdGljIHZvaWQgdGVzdF9tbWFwX2NvdyhpbnQgZmQsIHNpemVfdCBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDYtXHRtZW0gPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLCBmZCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3Olx0VEVTVF9BU1NFUlQobWVtID09IE1BUF9GQUlMRUQsIFwmIzM0O0NvcHktb24td3JpdGUgbm90IGFsbG93ZWQgYnkgZ3Vlc3RfbWVtZmQuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDgtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODItXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODM6XHQgKiBUbyBldmVuIHJlYWNoIHRoZSBwb2ludCB3aGVyZSB0aGUgZ3Vlc3RfbWVtZmQgZm9saW9zIHdpbGxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVx0ICogZ2V0IGNvbGxhcHNlZCwgYm90aCB0aGUgdXNlcnNwYWNlIGFkZHJlc3MgYW5kIHRoZSBvZmZzZXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTg1Olx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Ni1cdCAqXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMDgtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XHQgKiBBZHZpc2luZyB0aGUgdXNlIG9mIGh1Z2UgcGFnZXMgaW4gZ3Vlc3RfbWVtZmQgc2hvdWxkIGJlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTIxMC1cdCAqIGZpbmUuLi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTM0OD1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfYmluZGluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGZkLCBzaXplX3Qgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM1Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzU4OnN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXMoc3RydWN0IGt2bV92bSAqdm0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcdFx0XHRcdFx0XHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzYwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cdGZvciAoc2l6ZSA9IDE7IHNpemUgXHUwMDNjIHBhZ2Vfc2l6ZTsgc2l6ZSYjNDM7JiM0MzspIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzY1Olx0XHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2Ni1cdFx0VEVTVF9BU1NFUlQoZmQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzY3Olx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggbm9uLXBhZ2UtYWxpZ25lZCBwYWdlIHNpemUgJiMzOTsweCVseCYjMzk7IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjgtXHRcdFx0ICAgIHNpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNzI6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUoc3RydWN0IGt2bV92bSAqdm0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcdGZkMSA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBwYWdlX3NpemUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzgtXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFwmIzM0O21lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM4My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6Mzg0Olx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODUtXHRURVNUX0FTU0VSVChmZDIgIT0gLTEsIFwmIzM0O21lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDAwOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Moc3RydWN0IGt2bV92bSAqdm0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwMS17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDYtXHRmb3IgKGZsYWcgPSBCSVQoMCk7IGZsYWc7IGZsYWcgXHUwMDNjXHUwMDNjPSAxKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwNzpcdFx0ZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCBmbGFnKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA4LVx0XHRpZiAoZmxhZyBcdTAwMjYgdmFsaWRfZmxhZ3MpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVx0XHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzZT0gMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDEwOlx0XHRcdFx0ICAgIFwmIzM0O2d1ZXN0X21lbWZkKCkgd2l0aCBmbGFnICYjMzk7MHglbHgmIzM5OyBzaG91bGQgc3VjY2VlZFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDExLVx0XHRcdFx0ICAgIGZsYWcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDE0LVx0XHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQxNTpcdFx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAmIzM5OzB4JWx4JiMzOTsgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNi1cdFx0XHRcdCAgICBmbGFnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTQyMj1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDIzOlx0aW50IGZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKF9fdm0sIF9fZ21lbV9zaXplLCBfX2ZsYWdzKTtcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDE6c3RhdGljIHZvaWQgX190ZXN0X2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MzpcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX211bHRpcGxlKHZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0Olx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyh2bSwgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NDUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3MjpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkKHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3Olx0dGVzdF9ndWVzdF9tZW1mZF9mbGFncyh2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5Olx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDgwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDgyLVx0aWYgKGZsYWdzIFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4MzpcdFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXHRpZiAoZmxhZ3MgXHUwMDI2IEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcdFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVAgfFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXHRcdFx0XHQgICAgICAgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA2LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cdCAqIFVzZSB0aGUgbWF4IG9mIHRoZSBob3N0IG9yIGd1ZXN0IHBhZ2Ugc2l6ZSBmb3IgYWxsIG9wZXJhdGlvbnMsIGFzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzNTpcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNi1cdCAqIG9mIHRoZSBob3N0IHBhZ2Ugc2l6ZS5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzOC1cdHNpemUgPSBtYXhfdChzaXplX3QsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM5Olx0ZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHNpemUsIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cdFx0XHRcdFx0ICAgICBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTU2MT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVx0ICogTm90IGFsbCBhcmNoaXRlY3R1cmVzIHN1cHBvcnQgS1ZNX0NBUF9WTV9UWVBFUy4gSG93ZXZlciwgdGhvc2UgdGhhdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1NzE6XHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzItXHQgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3Ny1cdGZvcl9lYWNoX3NldF9iaXQodm1fdHlwZSwgXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1Nzg6XHRcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTgwOlx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01ODEtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY2NzpzdGF0aWMgaW5saW5lIGludCBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cdFx0XHRcdFx0ICB1NjQgZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY3MDpcdHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIGd1ZXN0X21lbWZkID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXHRcdC5zaXplID0gc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc1Olx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFx1MDAyNmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc2LX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2Nzg6c3RhdGljIGlubGluZSBpbnQgdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc5LVx0XHRcdFx0XHR1NjQgZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY4MC17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcdGludCBmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBmbGFncyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY4Mi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY5MT12b2lkIHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTItXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5MzpcdFx0XHRcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk1LVx0XHRcdFx0IGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTcwMT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwMi1cdFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo3MDM6XHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDM4PXZvaWQga3ZtX3NldF9maWxlc19ybGltaXQodTMyIG5yX3ZjcHVzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NDcwOnN0YXRpYyBib29sIGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NzEte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz00Nzk9c3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cdGZsYWdzID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo1MDA6XHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTUwMS1cdFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9ODA0PXN0YXRpYyB2b2lkIF9fdm1fbWVtX3JlZ2lvbl9kZWxldGUoc3RydWN0IGt2bV92bSAqdm0sXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTgxOC1cdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XHRpZiAoKGludClyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkIFx1MDAzZT0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MjA6XHRcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTgyMS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTQ3PWludCBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk0OC1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTQ5Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTYtXHRcdC51c2Vyc3BhY2VfYWRkciA9ICh1aW50cHRyX3QpaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1NzpcdFx0Lmd1ZXN0X21lbWZkID0gZ3Vlc3RfbWVtZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU4Olx0XHQuZ3Vlc3RfbWVtZmRfb2Zmc2V0ID0gZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1OS1cdH07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk2Nj12b2lkIHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cdFx0XHRcdGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5Njg6XHRcdFx0XHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTY5LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzAtXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk3MTpcdFx0XHRcdFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3Mi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODAtXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5ODE6XHRcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODIte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVx0aWYgKGZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcdFx0aWYgKGd1ZXN0X21lbWZkIFx1MDAzYyAwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NzpcdFx0XHR1MzIgZ3Vlc3RfbWVtZmRfZmxhZ3MgPSAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODg6XHRcdFx0VEVTVF9BU1NFUlQoIWd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5Olx0XHRcdFx0ICAgIFwmIzM0O09mZnNldCBtdXN0IGJlIHplcm8gd2hlbiBjcmVhdGluZyBuZXcgZ3Vlc3RfbWVtZmRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwOTA6XHRcdFx0Z3Vlc3RfbWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbV9zaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5MS1cdFx0fSBlbHNlIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cdFx0XHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDk4Olx0XHRcdGd1ZXN0X21lbWZkID0ga3ZtX2R1cChndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5OS1cdFx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDI6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmRfb2Zmc2V0ID0gZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDMtXHR9IGVsc2Uge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDQ6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSAtMTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTA1LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTE5LVx0XHRcJiMzNDsgIHNsb3Q6ICV1IGZsYWdzOiAweCV4XFxuXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcdFx0XCYjMzQ7ICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMS1cdFx0cmV0LCBlcnJubywgc2xvdCwgZmxhZ3MsIGdwYSwgcmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjkxLVx0XHRvZmZzZXQgPSBncGEgLSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlx0XHRmZF9vZmZzZXQgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCAmIzQzOyBvZmZzZXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cdFx0bGVuID0gbWluX3QodTY0LCBlbmQgLSBncGEsIHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5NTpcdFx0cmV0ID0gZmFsbG9jYXRlKHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCwgbGVuKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVx0XHRURVNUX0FTU0VSVCghcmV0LCBcJiMzNDtmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk3LVx0XHRcdCAgICBwdW5jaF9ob2xlID8gXCYjMzQ7cHVuY2ggaG9sZVwmIzM0OyA6IFwmIzM0O2FsbG9jYXRlXCYjMzQ7LCBncGEsIGxlbixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk4Olx0XHRcdCAgICByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkLCBtb2RlLCBmZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM4Ni1cdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6Mzg3Olx0XHRpbnQgZ3Vlc3RfbWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM4OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5MC1cdFx0XHRcdFx0XHQgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTE6XHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXHRcdFRFU1RfQVNTRVJUKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cdFx0XHRcdFx0XHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5NzpcdFx0XHRcdFx0XHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5OC1cdFx0VEVTVF9BU1NFUlQociBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XHRcdGNsb3NlKGd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDU3LSNpZmRlZiBfX3g4Nl82NF9fXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDU5LVx0XHRcdFx0ICAgICBzaXplX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICptc2cpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00Njc9c3RhdGljIHZvaWQgdGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ3NjpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgdm0tXHUwMDNla3ZtX2ZkLCAwLCBcJiMzNDtLVk0gZmQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIHZtLVx1MDAzZWZkLCAwLCBcJiMzNDtWTSYjMzk7cyBmZCBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc5LVx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4MDpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFwmIzM0O1JlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4MS1cdGNsb3NlKG1lbWZkKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4My1cdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NDpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtMiwgTUVNX1JFR0lPTl9TSVpFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1Olx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXCYjMzQ7T3RoZXIgVk0mIzM5O3MgZ3Vlc3RfbWVtZmQoKSBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5My1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIFBBR0VfU0laRTsgaSYjNDM7JiM0MzspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcdFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgaSwgXCYjMzQ7VW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5NS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTUwMz1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9vdmVybGFwcGluZ19wcml2YXRlX21lbW9yeV9yZWdpb25zKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUxMzpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUgKiA1LCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTIzLVx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MjQ6XHQgKiB3aXRoIGEgXCYjMzQ7YmFkXCYjMzQ7IG9mZnNldCB0aGF0IHJlc3VsdHMgaW4gb3ZlcmxhcCBpbiB0aGUgZ3Vlc3RfbWVtZmQoKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTI1LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjktXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MzA6XHQgKiBWZXJpZnkgdGhhdCBvdmVybGFwIGluIHRoZSBndWVzdF9tZW1mZCBiaW5kaW5ncyAoaS5lLiBpbiBndWVzdF9tZW1mZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXHQgKiBmaWxlIG9mZnNldHMpLCBidXQgX25vdF8gaW4gdGhlIEdQQSBzcGFjZSwgZmFpbHMgd2l0aCAtRUVYSVNULlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVx0VEVTVF9BU1NFUlQociA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1Mzg6XHRcdCAgICBcJiMzNDtPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NDA6XHQvKiBBbmQgbm93IHRoZSBiYWNrIGhhbGYgb2YgdGhlIG90aGVyIHNsb3QmIzM5O3MgZ3Vlc3RfbWVtZmQgYmluZGluZy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQxLVx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0NS1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1Ny1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTU4Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTY2Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0yMzA9c3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wdW5jaF9ob2xlKHU2NCBiYXNlX2dwYSwgYm9vbCBwcmVjaXNlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzNi1cdCAqIENvbnZlcnQgdGhlIGVudGlyZSByYW5nZSB0byBwcml2YXRlLCB0aGlzIHRlc3RjYXNlIGlzIGFsbCBhYm91dFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3Olx0ICogcHVuY2hpbmcgaG9sZXMgaW4gZ3Vlc3RfbWVtZmQsIGkuZS4gc2hhcmVkIG1hcHBpbmdzIGFyZW4mIzM5O3QgbmVlZGVkLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjM4LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MjcxPXN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodTY0IGJhc2VfZ3BhKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cdCAqIFJ1biB0aGUgY29udmVyc2lvbiB0ZXN0IHR3aWNlLCB3aXRoIGFuZCB3aXRob3V0IGRvaW5nIGZhbGxvY2F0ZSgpIG9uXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzoyNzU6XHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yNzYtXHQgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODAtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlx0ICogUnVuIHRoZSBQVU5DSF9IT0xFIHRlc3QgdHdpY2UgdG9vLCBvbmNlIHdpdGggdGhlIGVudGlyZSBndWVzdF9tZW1mZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgyLVx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTM2OT1zdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdmNwdXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzk2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mzk3Olx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzk4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0MjY6XHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNzpcdCAqIGZkLiAgVGhlIGd1ZXN0X21lbWZkIGlzIGdpZnRlZCBhIHJlZmVyZW5jZSB0byBpdHMgb3duaW5nIFZNLCBpLmUuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXHQgKiBzaG91bGQgcHJldmVudCB0aGUgVk0gZnJvbSBiZWluZyBmdWxseSBkZXN0cm95ZWQgdW50aWwgdGhlIGxhc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyOTpcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MzAtXHQgKi9cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDk4NgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA3OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGd1ZXN0X21lbWZkYCDigJMgdGhhdCYjMzk7cyBqdXN0IGEgS1ZNIGZlYXR1cmUsIG5vdGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLiBTbywgdGhlIGtleSBjb25maWcgdG8gdGFyZ2V0IGhlcmUgYXBwZWFycyB0byBiZSBgS1ZNX0FNRF9TRVZgLiBBbmQgeWVzLCBgS1ZNX0FNRF9TRVZgIGlzIGEgc2ltcGxlIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuIEl0IGxvb2tzIGxpa2UgaXQgc2VsZWN0cyBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLCB3aGljaCBzb3VuZHMgcHJvbWlzaW5nLgoKTm93LCBsZXQmIzM5O3Mgc2NydXRpbml6ZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFdlIGhhdmUgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuCgpXYWl0LCBJIG5lZWQgdG8gaW5jbHVkZSBgX19zZXZfc25wX3JlbG9hZF92bXNhYCBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIG9mIHRoZXNlIGFyZSByZWFjaGFibGUgcmVnYXJkbGVzcyBvZiBTRVYgYmVpbmcgZW5hYmxlZC4gYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCBpcyBjYWxsZWQgZHVyaW5nIG1lbXNsb3QgbW92ZW1lbnQgb3IgZGVsZXRpb24sIHNvIHRoYXQmIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGUgemFwIGZ1bmN0aW9ucywgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAgYW5kIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGFyZSByZWFjaGFibGUgdG9vIGlmIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUuIEhvd2V2ZXIsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCBhbmQgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIHNlZW0gU0VWLVNOUCBzcGVjaWZpYy4gU2ltaWxhcmx5LCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgcmVsaWVzIG9uIGBfX19fc2V2X3NucF9ndWVzdChrdm0pYCBhbmQgYHNldl9nbWVtX2ZyZWVfZm9saW9gIGNoZWNrcyBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAsIGNvbmZpcm1pbmcgdGhlaXIgU0VWLVNOUCBleGNsdXNpdml0eS4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgYWxzbyBpbmplY3RpbmcgU0VWLVNOUCBzcGVjaWZpYyBjb2RlLiBUaGF0JiMzOTtzIGEgcGVyZmVjdCBjb21iaW5hdGlvbiBmb3IgZnV6emluZy4gV2UgaGF2ZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYm90aCBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCAobWVtc2xvdCBmbHVzaGluZywgYW5kIHphcCBmdW5jdGlvbnMpIGFuZCB0aGUgbmV3IFNFVi1TTlAgYmVoYXZpb3IgKFZNU0EgcmVsb2FkaW5nLCBhbmQgcHJvdGVjdGVkIGd1ZXN0IHN0YXRlIGluaXRpYWxpc2F0aW9uKS4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFsmIzM0O0tWTVxfQU1EXF9TRVYmIzM0O1xdKioKKiAgICoqRm9jdXNTeW1ib2xzOioqCgogICAgKiAgIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAKICAgICogICBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmYAogICAgKiAgIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAKICAgICogICBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAKICAgICogICBgX19zZXZfc25wX3JlbG9hZF92bXNhYAogICAgKiAgIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYAogICAgKiAgIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYAoqICAgKipSZWFzb25pbmc6KiogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0XF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDsKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgcnVsZSBvdXQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MuIGBLVk1gIGlzIGZhciB0b28gYnJvYWQsIGBLVk1fQU1EYCBpcyB0b28gZ2VuZXJpYy4gWWVzLCBgS1ZNX0FNRF9TRVZgIGxvb2tzIGxpa2UgdGhlIHBlcmZlY3QgYW5kIG9ubHkgbmVjZXNzYXJ5IGNvbmZpZy4gT2theSwgSSYjMzk7bSByZWFkeSB0byBjb21taXQgdG8gdGhpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3QmIzM0OywKICAgICYjMzQ7X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmJiMzNDssCiAgICAmIzM0O19fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUmIzM0OywKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo0OTo1MC4wOTQ5NzMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMjkxNTc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdFwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmXCIsXG4gICAgXCJfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZlwiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiLFxuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbnMgYW5kIFZNU0EgcmVsb2FkaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NDk6NTAuMDk0OTc4MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDM1MDY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE0ZGViYzYwY2M0NzMyOTZhZGRjOTU2MjliMjA0MzJkMWNmMjU4MDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDE6NDk6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uZmQwODQ1NGM3NTUzNjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5AQCAtMTM0LDYgKzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbilcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwodm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpXFxuK0tWTV9YODZfT1BfT1BUSU9OQUwocmVsb2FkX3Ztc2EpXFxuIEtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKVxcbiBLVk1fWDg2X09QKGNoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24pXFxuIEtWTV9YODZfT1AoYXBpY19pbml0X3NpZ25hbF9ibG9ja2VkKVxcbkBAIC0xNDUsOSArMTQ2LDE0IEBAIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ZyZWVfZm9saW8pXFxuKyNlbmRpZlxcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcXG4tS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXFxuICNlbmRpZlxcbiBcXG4gI3VuZGVmIEtWTV9YODZfT1BcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBiNTE3MjU3YTYzMTUzMi4uZWU0N2EwZDFmZWI5OTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMTIyLDYgKzEyMiw4IEBAXFxuIFxcdEtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcXG4gI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcXFxcXFxuIFxcdEtWTV9BUkNIX1JFUV9GTEFHUygzMiwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcXG4rI2RlZmluZSBLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQgXFxcXFxcbitcXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzMsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXFxuICNkZWZpbmUgS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFIFxcXFxcXG4gXFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDM0LCBLVk1fUkVRVUVTVF9XQUlUKVxcbiBcXG5AQCAtMTg3OCw2ICsxODgwLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcXG4gXFx0aW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xcbiBcXHRpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XFxuIFxcdHZvaWQgKCpndWVzdF9tZW1vcnlfcmVjbGFpbWVkKShzdHJ1Y3Qga3ZtICprdm0pO1xcbitcXHR2b2lkICgqcmVsb2FkX3Ztc2EpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBcXHRpbnQgKCpnZXRfZmVhdHVyZV9tc3IpKHUzMiBtc3IsIHU2NCAqZGF0YSk7XFxuIFxcbkBAIC0xOTAwLDggKzE5MDMsMTMgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcXG4gXFxuIFxcdGd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXHR2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIFxcdGludCAoKmdtZW1fcHJlcGFyZSkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xcbi1cXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbitcXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK1xcdHZvaWQgKCpnbWVtX2ZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbisjZW5kaWZcXG4gXFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCA2YzEzZGE5NDJiZmNjYy4uOGQzNmNhMGEzODBiNWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNjkyMSwyMCArNjkyMSwxMSBAQCBzdGF0aWMgdm9pZCBrdm1femFwX29ic29sZXRlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtX21tdV9jb21taXRfemFwX3BhZ2Uoa3ZtLCBcXHUwMDI2aW52YWxpZF9saXN0KTtcXG4gfVxcbiBcXG4tLypcXG4tICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxcbi0gKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXFxuLSAqXFxuLSAqIEl0J3MgcmVxdWlyZWQgd2hlbiBtZW1zbG90IGlzIGJlaW5nIGRlbGV0ZWQgb3IgVk0gaXMgYmVpbmdcXG4tICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xcbi0gKiBub3QgdXNlIGFueSByZXNvdXJjZSBvZiB0aGUgYmVpbmctZGVsZXRlZCBzbG90IG9yIGFsbCBzbG90c1xcbi0gKiBhZnRlciBjYWxsaW5nIHRoZSBmdW5jdGlvbi5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFxuLVxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXHR0cmFjZV9rdm1fbW11X3phcF9hbGxfZmFzdChrdm0pO1xcbiBcXG4gXFx0LypcXG5AQCAtNjk3MSw4ICs2OTYyLDEyIEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMpO1xcbiBcXG4gXFx0a3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhrdm0pO1xcbit9XFxuIFxcbi1cXHR3cml0ZV91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitzdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogWmFwIHRoZSBpbnZhbGlkYXRlZCBURFAgTU1VIHJvb3RzLCBhbGwgU1BURXMgbXVzdCBiZSBkcm9wcGVkIGJlZm9yZVxcbkBAIC02OTg2LDYgKzY5ODEsMjQgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCB0cnVlKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRmFzdCBpbnZhbGlkYXRlIGFsbCBzaGFkb3cgcGFnZXMgYW5kIHVzZSBsb2NrLWJyZWFrIHRlY2huaXF1ZVxcbisgKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXFxuKyAqXFxuKyAqIEl0J3MgcmVxdWlyZWQgd2hlbiBtZW1zbG90IGlzIGJlaW5nIGRlbGV0ZWQgb3IgVk0gaXMgYmVpbmdcXG4rICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xcbisgKiBub3QgdXNlIGFueSByZXNvdXJjZSBvZiB0aGUgYmVpbmctZGVsZXRlZCBzbG90IG9yIGFsbCBzbG90c1xcbisgKiBhZnRlciBjYWxsaW5nIHRoZSBmdW5jdGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbF9mYXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XFxuK1xcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pO1xcbit9XFxuK1xcbiBpbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRpbnQgciwgaTtcXG5AQCAtNzU2MCw4ICs3NTczLDE0IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0a3ZtX21tdV9yZW1vdGVfZmx1c2hfb3JfemFwKGt2bSwgXFx1MDAyNmludmFsaWRfbGlzdCwgZmx1c2gpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlIHJhbmdlID0ge1xcbiBcXHRcXHQuc2xvdCA9IHNsb3QsXFxuQEAgLTc1NzMsMjQgKzc1OTIsMjMgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGJvb2wgZmx1c2g7XFxuIFxcbiBcXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tXFx0Zmx1c2ggPSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnJhbmdlKTtcXG4tXFx0a3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goa3ZtLCBzbG90LCBmbHVzaCk7XFxuLVxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuLX1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4te1xcbi1cXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKGt2bSwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpO1xcbi19XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4rXFx0aWYgKHNsb3QtXFx1MDAzZWdtZW0uZmlsZSlcXG4rXFx0XFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXFx1MDAyNnJhbmdlKTtcXG4rI2VuZGlmXFxuK1xcbitcXHRpZiAoa3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChrdm0pKSB7XFxuK1xcdFxcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZihrdm0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcXHUwMDI2cmFuZ2UpO1xcbitcXHRcXHRrdm1fbW11X3phcF9tZW1zbG90X3BhZ2VzX2FuZF9mbHVzaChrdm0sIHNsb3QsIGZsdXNoKTtcXG4rXFx0fVxcbitcXG4rXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFxuLXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi17XFxuIFxcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpXFxuLVxcdFxcdGt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0a3ZtX21tdV96YXBfbWVtc2xvdChrdm0sIHNsb3QpO1xcbitcXHRcXHRfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV9tbXVfaW52YWxpZGF0ZV9tbWlvX3NwdGVzKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGdlbilcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA3NGZiMTU1NTFlODNmYS4uN2UwNmVkMTZmNDc0NjEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMzk3OSwzMCArMzk3OSwyMSBAQCBzdGF0aWMgaW50IHNucF9iZWdpbl9wc2Moc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdHJldHVybiBzbnBfZG9fcHNjKHN2bSk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC5cXG4tICovXFxuLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4rXFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xcbitcXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRrdm1fcGZuX3QgcGZuO1xcbi1cXHRnZm5fdCBnZm47XFxuLVxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNnN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcXG4tXFxuLVxcdGlmICghc3ZtLVxcdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTtcXG4gXFxuLVxcdC8qIE1hcmsgdGhlIHZDUFUgYXMgb2ZmbGluZSBhbmQgbm90IHJ1bm5hYmxlICovXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTtcXG4tXFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbiBcXG4tXFx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovXFxuK1xcdC8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQS4gKi9cXG4gXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gcmVwbGFjaW5nIHRoZSBWTVNBIGR1cmluZyBTRVYtU05QIEFQIGNyZWF0aW9uLFxcbkBAIC00MDEwLDE2ICs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKi9cXG4gXFx0dm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tXFx1MDAzZXZtY2IpO1xcbiBcXG4tXFx0aWYgKCFWQUxJRF9QQUdFKHN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSkpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0LypcXG4rXFx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcXG4rXFx0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVxcdTAwM2VzZXZfZXMudm1zYS4gSW5cXG4rXFx0ICogdGhlb3J5LCBzdm0tXFx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcXG4rXFx0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxcbitcXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xcbitcXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXFxuK1xcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXFxuK1xcdCAqL1xcbitcXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xcbiBcXG4tXFx0Z2ZuID0gZ3BhX3RvX2dmbihzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEpO1xcbi1cXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdGlmICghVkFMSURfUEFHRShncGEpKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS1cXHUwMDNla3ZtLCBnZm4pO1xcbiBcXHRpZiAoIXNsb3QpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG1tdV9zZXEgPSBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0c21wX3JtYigpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcXG4gXFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cXG5AQCAtNDAyNywyOSArNDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0cmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFx0LypcXG4tXFx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcXG4tXFx0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVxcdTAwM2VzZXZfZXMudm1zYS4gSW5cXG4tXFx0ICogdGhlb3J5LCBzdm0tXFx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcXG4tXFx0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxcbi1cXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xcbi1cXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXFxuLVxcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXFxuK1xcdCAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnlcXG4rXFx0ICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvXFxuK1xcdCAqIHRyYWNrIHRoZSBHUEEgc28gdGhhdCB0aGUgVk1TQSBjYW4gYmUgcmVsb2FkZWQgaWYgdGhlIGJhY2tpbmcgcGFnZVxcbitcXHQgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC5cXG4gXFx0ICovXFxuLVxcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTtcXG4rXFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcXG4rXFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcXG4rfVxcbitcXG4rLypcXG4rICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuK1xcdGdwYV90IGdwYTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKCFzdm0tXFx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xcbitcXG4rXFx0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xcbitcXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xcbiBcXG4tXFx0LyogVXNlIHRoZSBuZXcgVk1TQSAqL1xcbi1cXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcXG4rXFx0Z3BhID0gc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGE7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbiBcXG4tXFx0LyogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSAqL1xcbi1cXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XFxuK1xcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogZ21lbSBwYWdlcyBhcmVuJ3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlc1xcbi1cXHQgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tXFx1MDAzZXNldl9lcy52bXNhIGlzIHBpbm5lZFxcbi1cXHQgKiB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuXFxuK1xcdCAqIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgZm9yIENSRUFURSByZXF1ZXN0cywgaW5kaWNhdGVkIGJ5IGEgdmFsaWRcXG4rXFx0ICogVk1TQSBHUEEsIGV2ZW4gaWYgaW5zdGFsbGluZyB0aGUgVk1TQSBmYWlsZWQsIHNvIHRoYXQgS1ZNX1JVTiB3aWxsXFxuK1xcdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcXG4rXFx0ICogdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgcGFnZSBpcyB1bmF2YWlsYWJsZS5cXG4gXFx0ICovXFxuLVxcdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XFxuK1xcdGlmIChWQUxJRF9QQUdFKGdwYSkpXFxuK1xcdFxcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcXG4rfVxcbitcXG4rdm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgKnNldl9lcyA9IFxcdTAwMjZ0b19zdm0odmNwdSktXFx1MDAzZXNldl9lcztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2c2V2X2VzLVxcdTAwM2VzbnBfdm1zYV9tdXRleCk7XFxuK1xcbitcXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVxcdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuQEAgLTQxMDUsMTAgKzQxNDIsMTAgQEAgc3RhdGljIGludCBzZXZfc25wX2FwX2NyZWF0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0dGFyZ2V0X3N2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcXG4rXFx0XFx0dGFyZ2V0X3N2bS1cXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOlxcbi1cXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbitcXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHR2Y3B1X3VuaW1wbCh2Y3B1LCBcXFwidm1nZXhpdDogaW52YWxpZCBBUCBjcmVhdGlvbiByZXF1ZXN0IFslI3hdIGZyb20gZ3Vlc3RcXFxcblxcXCIsXFxuQEAgLTQ3OTEsNiArNDgyOCw4IEBAIGludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgPSBwYWdlX2FkZHJlc3Modm1zYV9wYWdlKTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4gXFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCA9IHNucF9pc19zZWN1cmVfdHNjX2VuYWJsZWQodmNwdS1cXHUwMDNla3ZtKTtcXG4gXFxuQEAgLTUxMTUsOSArNTE1NCwzNiBAQCBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciBcXFwiaXMgU05QXFxcIiBpcyBhLW9rIGhlcmUsIHRoYW5rcyB0byBtbXVfbG9jay5cXG4rXFx0ICogVGhlIHZDUFUncyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlXFxuK1xcdCAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssXFxuK1xcdCAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcXG4rXFx0XFx0Z3BhX3QgZ3BhID0gdG9fc3ZtKHZjcHUpLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhO1xcbitcXG4rXFx0XFx0aWYgKFZBTElEX1BBR0UoZ3BhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZ3BhX3RvX2dmbihncGEpIFxcdTAwM2U9IHJhbmdlLVxcdTAwM2VzdGFydCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZ3BhX3RvX2dmbihncGEpIFxcdTAwM2MgcmFuZ2UtXFx1MDAzZWVuZClcXG4rXFx0XFx0XFx0a3ZtX21ha2VfcmVxdWVzdF9hbmRfa2ljayhLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xcbitcXHR9XFxuK31cXG4gXFxuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdGt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcXG4rXFx0a3ZtX3Bmbl90IGVuZCA9IHN0YXJ0ICsgKDF1bCBcXHUwMDNjXFx1MDAzYyBmb2xpb19vcmRlcihmb2xpbykpO1xcbiBcXHRrdm1fcGZuX3QgcGZuO1xcbiBcXG4gXFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC01NDQ1LDYgKzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxcbiBcXHQubWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uLFxcbiBcXHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxcbitcXHQucmVsb2FkX3Ztc2EgPSBzZXZfc25wX3JlbG9hZF92bXNhLFxcbiBcXG4gXFx0LnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20sXFxuIFxcdC52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLFxcbkBAIC01NDYwLDkgKzU0NjEsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcdC52Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMgPSBhdmljX3ZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyxcXG4gXFx0LmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLFxcbiBcXG4rI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbiBcXHQuZ21lbV9wcmVwYXJlID0gc2V2X2dtZW1fcHJlcGFyZSxcXG4tXFx0LmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsXFxuK1xcdC5nbWVtX2ludmFsaWRhdGVfcmFuZ2UgPSBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlLFxcbitcXHQuZ21lbV9mcmVlX2ZvbGlvID0gc2V2X2dtZW1fZnJlZV9mb2xpbyxcXG4gXFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCxcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC0yNzEsNyArMjcxLDggQEAgc3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlIHtcXG4gXFx0dTY0IGdoY2JfcmVnaXN0ZXJlZF9ncGE7XFxuIFxcbiBcXHRzdHJ1Y3QgbXV0ZXggc25wX3Ztc2FfbXV0ZXg7IC8qIFVzZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiBWTVNBLiAqL1xcbi1cXHRncGFfdCBzbnBfdm1zYV9ncGE7XFxuK1xcdGdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhO1xcbitcXHRncGFfdCBzbnBfZ3Vlc3Rfdm1zYV9ncGE7XFxuIFxcdGJvb2wgc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0O1xcbiBcXHRib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTtcXG4gfTtcXG5AQCAtOTk1LDYgKzk5Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiB9XFxuK3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5AQCAtMTAwOCw3ICsxMDEwLDggQEAgaW50IHNldl9kZXZfZ2V0X2F0dHIodTMyIGdyb3VwLCB1NjQgYXR0ciwgdTY0ICp2YWwpO1xcbiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcXG4gdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xcbiBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XFxuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbit2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xcbit2b2lkIHNldl9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHNldl9mcmVlX2RlY3J5cHRlZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp2bXNhKTtcXG5AQCAtMTAzOCw3ICsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW5cXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCAwNjI2ZTgzNWU5ZWI3Ny4uOWRmNmFjZjlhOTgyZTYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTgxNjcsNiArODE2Nyw4IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSkpXFxuK1xcdFxcdFxcdGt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KSB8fCByZXFfaW50X3dpbiB8fFxcbkBAIC0xMDU5Miw5ICsxMDU5NCwxMyBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxcbit2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4ge1xcbi1cXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlKShzdGFydCwgZW5kKTtcXG4rXFx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XFxuK31cXG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRrdm1feDg2X2NhbGwoZ21lbV9mcmVlX2ZvbGlvKShmb2xpbyk7XFxuIH1cXG4gI2VuZGlmXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uNmI3Zjg4MDE1MDVkNWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTI2MDcsNyArMjYwNyw4IEBAIGxvbmcga3ZtX2dtZW1fcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydF9nZm4sIHZvaWQgX191c2VyICpzcmMsXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbit2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC0xODUsNiArMTg1LDEwIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRmbHVzaCB8PSBrdm1fbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIFxcdTAwMjZnZm5fcmFuZ2UpO1xcbitcXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbitcXHRcXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoa3ZtLCBcXHUwMDI2Z2ZuX3JhbmdlKTtcXG4rI2VuZGlmXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmbHVzaClcXG5AQCAtNTIzLDIzICs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcXG4gXFx0cmV0dXJuIE1GX0RFTEFZRUQ7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4tc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi17XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XFxuLVxcdGt2bV9wZm5fdCBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4tXFx0aW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbi1cXG4tXFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKHBmbiwgcGZuICsgKDF1bCBcXHUwMDNjXFx1MDAzYyBvcmRlcikpO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHtcXG4gXFx0LmRpcnR5X2ZvbGlvID0gbm9vcF9kaXJ0eV9mb2xpbyxcXG4gXFx0Lm1pZ3JhdGVfZm9saW9cXHQ9IGt2bV9nbWVtX21pZ3JhdGVfZm9saW8sXFxuIFxcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi1cXHQuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sXFxuK1xcdC5mcmVlX2ZvbGlvID0ga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvLFxcbiAjZW5kaWZcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjQ5OjUwLjYxNTkxNDQyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc1MDgyMDk0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdFwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmXCIsXG4gICAgXCJfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZlwiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiLFxuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbnMgYW5kIFZNU0EgcmVsb2FkaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNGRlYmM2MGNjNDczMjk2YWRkYzk1NjI5YjIwNDMyZDFjZjI1ODA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDE6NDk6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMzkuLmZkMDg0NTRjNzU1MzY0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTEzNCw2ICsxMzQsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMKG1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxuK0tWTV9YODZfT1BfT1BUSU9OQUwocmVsb2FkX3Ztc2EpXG4gS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXG4gS1ZNX1g4Nl9PUChjaGVja19lbXVsYXRlX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1AoYXBpY19pbml0X3NpZ25hbF9ibG9ja2VkKVxuQEAgLTE0NSw5ICsxNDYsMTQgQEAgS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcbiBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbylcbisjZW5kaWZcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcbi1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcbiAjZW5kaWZcbiBcbiAjdW5kZWYgS1ZNX1g4Nl9PUFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiNTE3MjU3YTYzMTUzMi4uZWU0N2EwZDFmZWI5OTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTIyLDYgKzEyMiw4IEBAXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzEsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4gI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxuKyNkZWZpbmUgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEIFxcXG4rXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzMsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4gI2RlZmluZSBLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUgXFxcbiBcdEtWTV9BUkNIX1JFUV9GTEFHUygzNCwgS1ZNX1JFUVVFU1RfV0FJVClcbiBcbkBAIC0xODc4LDYgKzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0aW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XG4rXHR2b2lkICgqcmVsb2FkX3Ztc2EpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gXHRpbnQgKCpnZXRfZmVhdHVyZV9tc3IpKHUzMiBtc3IsIHU2NCAqZGF0YSk7XG4gXG5AQCAtMTkwMCw4ICsxOTAzLDEzIEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXG4gXHRndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBcdHZvaWQgKigqYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XG4tXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbitcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbitcdHZvaWQgKCpnbWVtX2ZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuKyNlbmRpZlxuIFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDZjMTNkYTk0MmJmY2NjLi44ZDM2Y2EwYTM4MGI1YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02OTIxLDIwICs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIGt2bV96YXBfb2Jzb2xldGVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX21tdV9jb21taXRfemFwX3BhZ2Uoa3ZtLCBcdTAwMjZpbnZhbGlkX2xpc3QpO1xuIH1cbiBcbi0vKlxuLSAqIEZhc3QgaW52YWxpZGF0ZSBhbGwgc2hhZG93IHBhZ2VzIGFuZCB1c2UgbG9jay1icmVhayB0ZWNobmlxdWVcbi0gKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXG4tICpcbi0gKiBJdCdzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4tICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xuLSAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzXG4tICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4tICovXG4tc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4tXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHR0cmFjZV9rdm1fbW11X3phcF9hbGxfZmFzdChrdm0pO1xuIFxuIFx0LypcbkBAIC02OTcxLDggKzY5NjIsMTIgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMpO1xuIFxuIFx0a3ZtX3phcF9vYnNvbGV0ZV9wYWdlcyhrdm0pO1xuK31cbiBcbi1cdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK3N0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4gXHQvKlxuIFx0ICogWmFwIHRoZSBpbnZhbGlkYXRlZCBURFAgTU1VIHJvb3RzLCBhbGwgU1BURXMgbXVzdCBiZSBkcm9wcGVkIGJlZm9yZVxuQEAgLTY5ODYsNiArNjk4MSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGxfZmFzdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIHRydWUpO1xuIH1cbiBcbisvKlxuKyAqIEZhc3QgaW52YWxpZGF0ZSBhbGwgc2hhZG93IHBhZ2VzIGFuZCB1c2UgbG9jay1icmVhayB0ZWNobmlxdWVcbisgKiB0byB6YXAgb2Jzb2xldGUgcGFnZXMuXG4rICpcbisgKiBJdCdzIHJlcXVpcmVkIHdoZW4gbWVtc2xvdCBpcyBiZWluZyBkZWxldGVkIG9yIFZNIGlzIGJlaW5nXG4rICogZGVzdHJveWVkLCBpbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IEtWTSBNTVUgZG9lc1xuKyAqIG5vdCB1c2UgYW55IHJlc291cmNlIG9mIHRoZSBiZWluZy1kZWxldGVkIHNsb3Qgb3IgYWxsIHNsb3RzXG4rICogYWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24uXG4rICovXG4rc3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZihrdm0pO1xuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZihrdm0pO1xuK31cbitcbiBpbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpbnQgciwgaTtcbkBAIC03NTYwLDggKzc1NzMsMTQgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goc3RydWN0IGt2bSAqa3ZtLFxuIFx0a3ZtX21tdV9yZW1vdGVfZmx1c2hfb3JfemFwKGt2bSwgXHUwMDI2aW52YWxpZF9saXN0LCBmbHVzaCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4rfVxuK1xuK3ZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSByYW5nZSA9IHtcbiBcdFx0LnNsb3QgPSBzbG90LFxuQEAgLTc1NzMsMjQgKzc1OTIsMjMgQEAgc3RhdGljIHZvaWQga3ZtX21tdV96YXBfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRib29sIGZsdXNoO1xuIFxuIFx0d3JpdGVfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLVx0Zmx1c2ggPSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2cmFuZ2UpO1xuLVx0a3ZtX21tdV96YXBfbWVtc2xvdF9wYWdlc19hbmRfZmx1c2goa3ZtLCBzbG90LCBmbHVzaCk7XG4tXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi19XG4gXG4tc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLXtcbi1cdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKGt2bSwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpO1xuLX1cbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4rXHRpZiAoc2xvdC1cdTAwM2VnbWVtLmZpbGUpXG4rXHRcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFx1MDAyNnJhbmdlKTtcbisjZW5kaWZcbitcbitcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpIHtcbitcdFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmKGt2bSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmbHVzaCA9IGt2bV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZyYW5nZSk7XG4rXHRcdGt2bV9tbXVfemFwX21lbXNsb3RfcGFnZXNfYW5kX2ZsdXNoKGt2bSwgc2xvdCwgZmx1c2gpO1xuK1x0fVxuK1xuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4tdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLXtcbiBcdGlmIChrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSkpXG4tXHRcdGt2bV9tbXVfemFwX2FsbF9mYXN0KGt2bSk7XG4tXHRlbHNlXG4tXHRcdGt2bV9tbXVfemFwX21lbXNsb3Qoa3ZtLCBzbG90KTtcbitcdFx0X19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoa3ZtKTtcbiB9XG4gXG4gdm9pZCBrdm1fbW11X2ludmFsaWRhdGVfbW1pb19zcHRlcyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBnZW4pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi43ZTA2ZWQxNmY0NzQ2MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0zOTc5LDMwICszOTc5LDIxIEBAIHN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiBzbnBfZG9fcHNjKHN2bSk7XG4gfVxuIFxuLS8qXG4tICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbitcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbitcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbi1cdGdmbl90IGdmbjtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbi1cbi1cdGlmICghc3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XG4gXG4tXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XG4tXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbiBcbi1cdC8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQSAqL1xuK1x0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBLiAqL1xuIFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sXG5AQCAtNDAxMCwxNiArNDAwMSwyNyBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqL1xuIFx0dm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tXHUwMDNldm1jYik7XG4gXG4tXHRpZiAoIVZBTElEX1BBR0Uoc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEpKVxuLVx0XHRyZXR1cm47XG4rXHQvKlxuK1x0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2VcbitcdCAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS1cdTAwM2VzZXZfZXMudm1zYS4gSW5cbitcdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbitcdCAqIHRoYXQgaW52b2x2ZXMgY2xlYW51cHMgbGlrZSBmbHVzaGluZyBjYWNoZXMsIHdoaWNoIHdvdWxkIGlkZWFsbHkgYmVcbitcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4rXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4rXHQgKiBtaW5pbWFsIFNOUC1zcGVjaWZpYyBjaGFuZ2VzLlxuK1x0ICovXG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XG4gXG4tXHRnZm4gPSBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKTtcbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0aWYgKCFWQUxJRF9QQUdFKGdwYSkpXG4rXHRcdHJldHVybjtcbiBcbiBcdHNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2ZuKTtcbiBcdGlmICghc2xvdClcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRzbXBfcm1iKCk7XG4rXG4gXHQvKlxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG5AQCAtNDAyNywyOSArNDAyOSw2NCBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbitcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFx0Lypcbi1cdCAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlXG4tXHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXHUwMDNlc2V2X2VzLnZtc2EuIEluXG4tXHQgKiB0aGVvcnksIHN2bS1cdTAwM2VzZXZfZXMudm1zYSBjb3VsZCBiZSBmcmVlJ2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0XG4tXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXG4tXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xuLVx0ICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aFxuLVx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cbitcdCAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnlcbitcdCAqIGFnYWluIHdpdGggdGhlIHNhbWUgR1BBLiAgSWYgdGhlIFZNU0EgaXMgdXNhYmxlLCB0aGVuIEtWTSBuZWVkcyB0b1xuK1x0ICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlXG4rXHQgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC5cbiBcdCAqL1xuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xuK1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBncGE7XG4rXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xuK1x0ZWxzZVxuK1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4rXHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1xuK1x0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbit9XG4rXG4rLypcbisgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4rICovXG4rc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4rXHRncGFfdCBncGE7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG4rXG4rXHRpZiAoIXN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xuK1xuK1x0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xuK1x0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiBcbi1cdC8qIFVzZSB0aGUgbmV3IFZNU0EgKi9cbi1cdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbitcdGdwYSA9IHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGE7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuLVx0LyogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSAqL1xuLVx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuK1x0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIGdwYSk7XG4gXG4gXHQvKlxuLVx0ICogZ21lbSBwYWdlcyBhcmVuJ3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlc1xuLVx0ICogdGhlbiBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBlbnN1cmUgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGlzIHBpbm5lZFxuLVx0ICogdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLlxuK1x0ICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZFxuK1x0ICogVk1TQSBHUEEsIGV2ZW4gaWYgaW5zdGFsbGluZyB0aGUgVk1TQSBmYWlsZWQsIHNvIHRoYXQgS1ZNX1JVTiB3aWxsXG4rXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXG4rXHQgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLlxuIFx0ICovXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuK1x0aWYgKFZBTElEX1BBR0UoZ3BhKSlcbitcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuK31cbitcbit2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSAqc2V2X2VzID0gXHUwMDI2dG9fc3ZtKHZjcHUpLVx1MDAzZXNldl9lcztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZzZXZfZXMtXHUwMDNlc25wX3Ztc2FfbXV0ZXgpO1xuK1xuK1x0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIHNldl9lcy1cdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtNDEwNSwxMCArNDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbi1cdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMjtcbitcdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgU1ZNX1ZNR0VYSVRfQVBfREVTVFJPWTpcbi1cdFx0dGFyZ2V0X3N2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR2Y3B1X3VuaW1wbCh2Y3B1LCBcInZtZ2V4aXQ6IGludmFsaWQgQVAgY3JlYXRpb24gcmVxdWVzdCBbJSN4XSBmcm9tIGd1ZXN0XFxuXCIsXG5AQCAtNDc5MSw2ICs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3ZtLVx1MDAzZXNldl9lcy52bXNhID0gcGFnZV9hZGRyZXNzKHZtc2FfcGFnZSk7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuK1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCA9IHNucF9pc19zZWN1cmVfdHNjX2VuYWJsZWQodmNwdS1cdTAwM2Vrdm0pO1xuIFxuQEAgLTUxMTUsOSArNTE1NCwzNiBAQCBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcbiBcbiBcdHJldHVybiAwO1xuIH1cbit2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1xuK1x0LypcbitcdCAqIEFuIHVuc3RhYmxlIHJlc3VsdCBmb3IgXCJpcyBTTlBcIiBpcyBhLW9rIGhlcmUsIHRoYW5rcyB0byBtbXVfbG9jay5cbitcdCAqIFRoZSB2Q1BVJ3MgVk1TQSBHUEEgaXMgaW52YWxpZGF0ZWQgYmVmb3JlIHRoZSB2Q1BVIGlzIG1hZGUgdmlzaWJsZVxuK1x0ICogdG8gb3RoZXIgdGFza3MsIGFuZCBjYW4gb25seSBiZWNvbWUgdmFsaWQgd2hpbGUgaG9sZGluZyBtbXVfbG9jayxcbitcdCAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLlxuK1x0ICovXG4rXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG4rXHRcdHJldHVybjtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuK1x0XHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYTtcbitcbitcdFx0aWYgKFZBTElEX1BBR0UoZ3BhKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2U9IHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzYyByYW5nZS1cdTAwM2VlbmQpXG4rXHRcdFx0a3ZtX21ha2VfcmVxdWVzdF9hbmRfa2ljayhLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xuK1x0fVxuK31cbiBcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbitcdGt2bV9wZm5fdCBlbmQgPSBzdGFydCArICgxdWwgXHUwMDNjXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKSk7XG4gXHRrdm1fcGZuX3QgcGZuO1xuIFxuIFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlZjY5YTUxYWIyN2Y5OC4uN2QzZGQzNzE5MDcwNDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNTQ0NSw2ICs1NDQ1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4gXHQubWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uLFxuIFx0Lmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCxcbitcdC5yZWxvYWRfdm1zYSA9IHNldl9zbnBfcmVsb2FkX3Ztc2EsXG4gXG4gXHQudm1fY29weV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSxcbiBcdC52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLFxuQEAgLTU0NjAsOSArNTQ2MSwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC52Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMgPSBhdmljX3ZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyxcbiBcdC5hbGxvY19hcGljX2JhY2tpbmdfcGFnZSA9IHN2bV9hbGxvY19hcGljX2JhY2tpbmdfcGFnZSxcbiBcbisjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4gXHQuZ21lbV9wcmVwYXJlID0gc2V2X2dtZW1fcHJlcGFyZSxcbi1cdC5nbWVtX2ludmFsaWRhdGUgPSBzZXZfZ21lbV9pbnZhbGlkYXRlLFxuK1x0LmdtZW1faW52YWxpZGF0ZV9yYW5nZSA9IHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2UsXG4rXHQuZ21lbV9mcmVlX2ZvbGlvID0gc2V2X2dtZW1fZnJlZV9mb2xpbyxcbiBcdC5nbWVtX21heF9tYXBwaW5nX2xldmVsID0gc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwsXG4rI2VuZGlmXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uYzdlY2M1ZmNhNjg5YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMjcxLDcgKzI3MSw4IEBAIHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSB7XG4gXHR1NjQgZ2hjYl9yZWdpc3RlcmVkX2dwYTtcbiBcbiBcdHN0cnVjdCBtdXRleCBzbnBfdm1zYV9tdXRleDsgLyogVXNlZCB0byBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIG9mIFZNU0EuICovXG4tXHRncGFfdCBzbnBfdm1zYV9ncGE7XG4rXHRncGFfdCBzbnBfcGVuZGluZ192bXNhX2dwYTtcbitcdGdwYV90IHNucF9ndWVzdF92bXNhX2dwYTtcbiBcdGJvb2wgc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0O1xuIFx0Ym9vbCBzbnBfaGFzX2d1ZXN0X3Ztc2E7XG4gfTtcbkBAIC05OTUsNiArOTk2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuIHtcbiBcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gfVxuK3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIGludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbkBAIC0xMDA4LDcgKzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfc2V2X2FzaWQ7XG4gdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xuIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbit2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xuQEAgLTEwMzgsNyArMTA0MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGluXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSlcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODE2Nyw2ICs4MTY3LDggQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuK1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KSlcbitcdFx0XHRrdm1feDg2X2NhbGwocmVsb2FkX3Ztc2EpKHZjcHUpO1xuIFx0fVxuIFxuIFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8XG5AQCAtMTA1OTIsOSArMTA1OTQsMTMgQEAgaW50IGt2bV9hcmNoX2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwgaW50IG1heF9vcmRcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIHtcbi1cdGt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGUpKHN0YXJ0LCBlbmQpO1xuK1x0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XG4rfVxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0a3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pO1xuIH1cbiAjZW5kaWZcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi42YjdmODgwMTUwNWQ1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjYwNyw3ICsyNjA3LDggQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYyxcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbit2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC0xODUsNiArMTg1LDEwIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxuIFx0XHR9XG4gXG4gXHRcdGZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4rXHRcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFx1MDAyNmdmbl9yYW5nZSk7XG4rI2VuZGlmXG4gXHR9XG4gXG4gXHRpZiAoZmx1c2gpXG5AQCAtNTIzLDIzICs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcbiBcdHJldHVybiBNRl9ERUxBWUVEO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XG4tXHRrdm1fcGZuX3QgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4tXHRpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4tXG4tXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUocGZuLCBwZm4gKyAoMXVsIFx1MDAzY1x1MDAzYyBvcmRlcikpO1xuLX1cbi0jZW5kaWZcbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvID0gbm9vcF9kaXJ0eV9mb2xpbyxcbiBcdC5taWdyYXRlX2ZvbGlvXHQ9IGt2bV9nbWVtX21pZ3JhdGVfZm9saW8sXG4gXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvID0ga3ZtX2dtZW1fZXJyb3JfZm9saW8sXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLVx0LmZyZWVfZm9saW8gPSBrdm1fZ21lbV9mcmVlX2ZvbGlvLFxuK1x0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXG4gI2VuZGlmXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjQ5OjUwLjYxNTkxNTUyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTM1NDA0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIFBhdGNoIGZvciBTRVYtU05QIGFuZCBndWVzdF9tZW1mZCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBvbiB4ODYsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBTRVYtU05QIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGd1ZXN0X21lbWZkYC4gSXQncyBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25hbGl0aWVzOiBgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEYCwgYHJlbG9hZF92bXNhYCB3aXRoaW4gYGt2bV94ODZfb3BzYC4gSXQgYWxzbyByZWZhY3RvcnMgcGFydHMgb2YgdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBXZSdyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBga3ZtX21tdV96YXBfYWxsX2Zhc3RgLCBzcGxpdHRpbmcgaXQsIGFuZCBjaGFuZ2VzIGluIGhvdyB0aGUgc2hhZG93IG1lbW9yeSBzbG90cyBhcmUgaGFuZGxlZCB2aWEgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgd2hpY2ggbm93IGNvbnNpZGVycyBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLiBUaGVyZSBhcmUgZnVydGhlciB0d2Vha3MgdG8gYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYW5kIGFsc28gY2hhbmdlcyB0byBtZW1vcnkgaW52YWxpZGF0aW9uIHJvdXRpbmVzOiBzcGVjaWZpY2FsbHkgcmVmYWN0b3JpbmcgYGdtZW1faW52YWxpZGF0ZWAgaW50byBgZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYWxvbmcgd2l0aCB0aGUgYGdtZW1fZnJlZV9mb2xpb2AgZnVuY3Rpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIEl0J3MgZGVmaW5pdGVseSBLVk0gY29kZSwgYW5kIGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBBTUQgU0VWLVNOUCBhbmQgZ3Vlc3RfbWVtZmQsIHdoaWNoIGFyZSByZWxhdGVkIHRvIHNlY3VyZSB2aXJ0dWFsIG1hY2hpbmVzLiBTRVYtU05QIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgYnV0IHRoZSB1bmRlcmx5aW5nIEtWTSBjb2RlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmUgZnV6emVkLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlczogY2FuIHdlIGZ1enogU0VWLVNOUCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgZG9jdW1lbnRhdGlvbiBJJ20gbG9va2luZyBhdCByYWlzZXMgYSBjb25jZXJuIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBoYXJkd2FyZSBlbXVsYXRpb25zLiBDYW4gU0VWLVNOUCBiZSB0cmlnZ2VyZWQgaW4gUUVNVT8gSSBrbm93IFFFTVUgc3VwcG9ydHMgU0VWIGFuZCBTRVYtRVMgZW11bGF0aW9uLCBidXQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IFNFVi1TTlAuIEV2ZW4gaWYgdGhlIGVtdWxhdGlvbiBpc24ndCBwZXJmZWN0LCB0aGUgS1ZNIGlvY3RscyBtaWdodCBiZSByZWFjaGFibGUgdG8gc29tZSBleHRlbnQuXG5cblRoZW4gSSBzZWUgdGhhdCBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgaXMgdXNlZCBpbiBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuIFRoaXMgbWVhbnMgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGZvciBTRVYtU05QLiBZZXMsIFNFVi1TTlAgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIEVQWUMgcHJvY2Vzc29ycy5cblxuU28sIGNhbiB3ZSBmdXp6IHRoaXMgaW4gR0NFPyBHQ0UgZG9lcyBvZmZlciBBTUQgaW5zdGFuY2VzLCBhbmQgc29tZSBvZiB0aGVtICptaWdodCogc3VwcG9ydCBTRVYtU05QLiBUaGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4gQWxzbywgSSBrbm93IHN5emthbGxlciBoZWF2aWx5IGZ1enplcyBLVk0sIHdoaWNoIGlzIGEgcHJvbWlzaW5nIHNpZ24uXG5cbkkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IHNwZWNpZmljYWxseSwgYENPTkZJR19LVk1fQU1EX1NFVmAgYW5kIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBUaW1lIGZvciBhIHF1aWNrIGdyZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NDk6NTcuOTA5NDU3NTI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM5Mzk3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0tWTV9BTURfU0VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY0NT1zdGF0aWMgaW5saW5lIHU2NCBzYXZpY19naGNiX21zcl9yZWFkKHUzMiByZWcpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY0OC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NDk6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1MC1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTI0PWt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjY6a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcXHQrPSBzdm0vc2V2Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjcta3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzMyPXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDA0LVxcdFtTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXVxcdD0gYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDA1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MDYtXFx0W1NWTV9FWElUX1ZNR0VYSVRdXFx0XFx0XFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MjA9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjQ2LVxcdFxcdHJldHVybiBucGZfaW50ZXJjZXB0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY0NzojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjQ4LVxcdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00MzkyPXN0YXRpYyBpbnQgc3ZtX3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkzLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzOTQ6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5NS1cXHRpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZW5lZWRfaW5pdClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDY4NT1zdGF0aWMgYm9vbCBzdm1faGFzX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDY5NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ2OTU6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDY5Ni1cXHRcXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzI1PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQxLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0MjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQzLVxcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDYzLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ2NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDY1LVxcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD02Nj1lbnVtIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OS1zdHJ1Y3Qga3ZtX3Nldl9pbmZvIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTI2PXN0cnVjdCBrdm1fc3ZtIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTM0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTM1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNi1cXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvIHNldl9pbmZvO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0zODk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3N2bSAqdG9fa3ZtX3N2bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTM5My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjM5NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0zOTUtc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3Nldl9pbmZvICp0b19rdm1fc2V2X2luZm8oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzk9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODAtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODE6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgyLWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTIxMD1TWU1fRlVOQ19FTkQoX19zdm1fdmNwdV9ydW4pXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjExLVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TOjIxMjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjEzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM9MjgzPVNZTV9GVU5DX0VORChfX3N2bV9zZXZfZXNfdmNwdV9ydW4pXFxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM6Mjg0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0FNRF9TRVYgKi9cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlLTItXFxuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfS1ZNX0FNRF9TRVYpICs9IHNldi5vXFxuYXJjaC94ODYvdmlydC9zdm0vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfQ1BVX1NVUF9BTUQpICs9IGNtZGxpbmUub1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3NwLWRldi5jPTI2Nj1zdGF0aWMgaW50IF9faW5pdCBzcF9tb2RfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3NwLWRldi5jLTMwMC1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc3AtZGV2LmM6MzAxOiNpZiBJU19CVUlMVElOKENPTkZJR19LVk1fQU1EKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19LVk1fQU1EX1NFVilcXG5kcml2ZXJzL2NyeXB0by9jY3Avc3AtZGV2LmMtMzAyLWludCBfX2luaXQgc2V2X21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM3Mj1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzczLXtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM3NDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzNzUtXFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM0MTM9c3RhdGljIHZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fc25wKHZvaWQpXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MTQte1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNDE1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQxNi1cXHRpZiAoIWFtZF9pb21tdV9zbnBfZW4pXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9NDAyMD1pbnQgYW1kX2lvbW11X3BjX3NldF9yZWcoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJhbmssIHU4IGNudHIsIHU4IGZ4biwgdTY0ICp2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy00MDI3LVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzo0MDI4OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtNDAyOS1zdGF0aWMgaW50IGlvbW11X3BhZ2VfbWFrZV9zaGFyZWQodm9pZCAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9Njk9c3RydWN0IGFtZF9pb21tdSAqZ2V0X2FtZF9pb21tdSh1bnNpZ25lZCBpbnQgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTcwLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6NzE6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNzItaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoxNTojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTE2LVxcdC8qKiBATUlTQ19DR19SRVNfU0VWOiBBTUQgU0VWIEFTSURzIHJlc291cmNlICovXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0yMD1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWlzY19yZXNfbmFtZVtdID0ge1xcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjIxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yMi1cXHQvKiBBTUQgU0VWIEFTSURzIHJlc291cmNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjQ5OjU5Ljk2MzQwMTk4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTI1MTg4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipBbmFseXppbmcgVGhpcyBLVk0vQU1EIFNFViBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IEtWTS9BTUQgU0VWIHJlbGF0ZWQgZmlsZXM6IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgdGhlIGNvcmUgU1ZNIGNvZGUsIHRoZW4gc29tZSBvZiB0aGUgTU1VIGNvZGUgaW4gYG1tdS5jYCwgYW5kIGV2ZW4gdGhlIGBndWVzdF9tZW1mZC5jYCBmaWxlLiBJbnRlcmVzdGluZy4gU2VlbXMgbGlrZSB0aGV5IGFyZSByZWFsbHkgZ2V0dGluZyBpbnRvIHRoZSBkZXRhaWxzIGhlcmUuIExvb2tzIGxpa2UgdGhlIGRldmVsb3BlciBpcyBhbHNvIHdvcmtpbmcgd2l0aCBgQ09ORklHX0tWTV9BTURfU0VWYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIHRoYXQgaXMgdGhlIG1haW4gY29uZmlnIG9wdGlvbi4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aGV5IGFyZSBhbHNvIHVzaW5nIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgLiBOb3csIHRoYXQncyBhIGJpdCBsZXNzIG9idmlvdXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoYXQgaXMgc29tZXRoaW5nIHdlIGNhbiB0b2dnbGUgb3IgaWYgaXQncyBqdXN0IGEgZGVmYXVsdCBib29sZWFuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgYmV0dGVyIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDowMy4zNzU5MjI2MjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MDk4NTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTE1MD1LVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUxLSNlbmRpZlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTUyOiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE1My1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTY4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTA4LSNlbmRpZlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTkwOTojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTEwLVxcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjQ6XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTY1LVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzU4Mj12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU5NS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1OTY6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU5Ny1cXHRpZiAoc2xvdC1cXHUwMDNlZ21lbS5maWxlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTkwPWludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1OTUtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTk2OiNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1OTctdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYwND1sb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MDgtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MDk6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEwLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9MTEwPWNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMTMtXFxudmlydC9rdm0vS2NvbmZpZzoxMTQ6Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxudmlydC9rdm0vS2NvbmZpZy0xMTUtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MTYwPXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xODgtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxODk6I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMTkwLVxcdFxcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFxcdTAwMjZnZm5fcmFuZ2UpO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz01MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNTMzLVxcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjUzNDojaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01MzUtXFx0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjUwOjA1LjE2NjkxMjg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDM3ODkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgU0VWIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzIGdldHRpbmcgcHVsbGVkIGluIGJlY2F1c2Ugb2YgYEtWTV9BTURfU0VWYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2U7IGBLVk1fQU1EX1NFVmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHVuZGVyc3RhbmRpbmcgKml0KiBhcyB0aGUgY29yZSBvZiB0aGUgc3VwcG9ydC5cblxuSG1tLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBrdm1fbW11X3phcF9hbGxfZmFzdGAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJbnRlcmVzdGluZy4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAuICBXYWl0IGEgbWludXRlLi4uIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXNuJ3Qgc3BlY2lmaWMgdG8gU0VWLCBpcyBpdD8gIFRoYXQncyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBicm9hZGVyIGNvbm5lY3Rpb24uIEl0J3Mgbm90ICpqdXN0KiBhZmZlY3RpbmcgdGhlIFNFVi1zcGVjaWZpYyBwYXRoLiBMZXQgbWUgZ28gY2hlY2sgd2hhdCdzIHVwIHdpdGggdGhhdCBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjUwOjA4LjQyMTI5MzQ4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzOTE2MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jPTI3MDQ9dm9pZCBrdm1fYXJjaF9tZW1zbG90c191cGRhdGVkKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGdlbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjcwODp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNzA5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM9NDQyPXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTQ2Ni1cXHQgKiBNT1ZFL0RFTEVURTpcXHRUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYzo0Njc6XFx0ICpcXHRcXHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTQ2OC1cXHQgKi9cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYz00ODc9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy00OTEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjQ5Mjp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNDkzLXtcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTE4MT12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtMTg3LVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjE4ODp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL21pcHMva3ZtL21pcHMuYy0xODktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTIxMj12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jLTIyNS1cXHQgKiBNT1ZFL0RFTEVURTpcXHRUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjIyNjpcXHQgKlxcdFxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KClcXG5hcmNoL21pcHMva3ZtL21pcHMuYy0yMjctXFx0ICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUzNTQ9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfY29tbWl0X21lbW9yeV9yZWdpb25faHYoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MzY5LVxcdCAqIEZvciBjaGFuZ2UgPT0gS1ZNX01SX01PVkUgb3IgS1ZNX01SX0RFTEVURSwgaGlnaGVyIGxldmVsc1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTM3MDpcXHQgKiBoYXZlIGFscmVhZHkgY2FsbGVkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KCkgdG9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUzNzEtXFx0ICogZmx1c2ggc2hhZG93IG1hcHBpbmdzLiAgRm9yIEtWTV9NUl9DUkVBVEUgd2UgaGF2ZSBub1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NzI3PXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzM0LVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjczNTp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03MzYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTEzMT12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTM1LVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjEzNjp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xMzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTc2Mj1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pIHt9XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NzYzOnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNzY0LVxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpIHt9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1NzY9c3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTgxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzU4Mjp2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1ODMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDE2MD1zdGF0aWMgdm9pZCBrdm1fbW11X3Nsb3RfYXBwbHlfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTgyLVxcdCAqIE1PVkUvREVMRVRFOiBUaGUgb2xkIG1hcHBpbmdzIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY2xlYW5lZCB1cCBieVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDE4MzpcXHQgKlxcdFxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODQtXFx0ICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4OC1cXHQgKiBNT1ZFL0RFTEVURTogVGhlIG9sZCBtYXBwaW5ncyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgYnlcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxODk6XFx0ICpcXHRcXHRrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdCgpLlxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE5MC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xMjU0PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjU1LS8qIGZsdXNoIG1lbW9yeSB0cmFuc2xhdGlvbnMgcG9pbnRpbmcgdG8gJ3Nsb3QnICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyNTY6dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyNTctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE3OTg9c3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjMtXFx0ICovXFxudmlydC9rdm0va3ZtX21haW4uYzoxODI0OlxcdGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KGt2bSwgb2xkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE4MjUtXFx0a3ZtX2FyY2hfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChrdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDoxMC4wNzUyMTQ1MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgxNzA0NzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLVk0gTU1VIExvZ2ljIE1vZGlmaWNhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhcyBpdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBJdCdzIGNhbGxlZCB3aGVuIGEgbWVtc2xvdCBpcyBkZWxldGVkIG9yIG1vdmVkLCB0cmlnZ2VyZWQgYnkgYGt2bV9pbnZhbGlkYXRlX21lbXNsb3RgIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhhdCdzIGltcG9ydGFudC5cblxuVGhlIGNvZGUgaXRzZWxmIGhhcyBhIGZldyBpbnRlcmVzdGluZyBwYXRocy4gRXZlbiB3aXRob3V0IFNFVi1TTlAsIGl0J3MgcmVhY2hhYmxlIGlmIGBrdm1fbWVtc2xvdF9mbHVzaF96YXBfYWxsKGt2bSlgIGlzIHRydWUgb3IgaWYgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCBpcyBzZXQuIE5vdywgYGt2bV9tZW1zbG90X2ZsdXNoX3phcF9hbGwoa3ZtKWAgaXMgdHJ1ZSB1bmRlciB0aGUgZGVmYXVsdCBLVk0gWDg2IGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2hlbiBga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk1gIGFuZCBga3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKWAuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBzY2VuYXJpbyBmb3IgS1ZNLCBtZWFuaW5nIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGhpZ2hseSByZWxldmFudCBhbmQgZGVmaW5pdGVseSBmdXp6YWJsZS5cblxuVGhpcyBpcyBjb3JlIEtWTSBNTVUgbG9naWMuIFNvLCBpdCdzIGRlZmluaXRlbHkgd29ydGggdGFyZ2V0aW5nLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGNvbmZpZ3VyZSBzeXprYWxsZXIgZm9yIHRoaXMuXG5cbkxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWcgZmxhZ3MuICBJIHNlZSBgQ09ORklHX0tWTV9BTURfU0VWYC4gIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFuZCBzcGVjaWZpY2FsbHkgY292ZXJzIHRoZSBtb2RpZmllZCBjb2RlLiBTaG91bGQgYmUgbGlzdGVkIGFzIGEgY29uZmlndXJhdGlvbiBpbiBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIGBLVk1fQU1EX1NFVmAgaXMgc3BlY2lmaWMgdG8gQU1ELCBhbmQgc3l6a2FsbGVyIGRvZXMgdGVzdHMgb24gSW50ZWwgYW5kIEFNRC5cblxuVGhlIHByb21wdCBub3RlcywgXCJPbmx5IGxpc3QgdGhvc2UgdGhhdCBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuXCIgYW5kIGBLVk1fQU1EX1NFVmAgbG9va3MgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFxuSSBhbHNvIG5lZWQgdG8gc2VlIHdoYXQgYENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAgaXMsIGFuZCBub3RlIHRoYXQgaXQncyBzZWxlY3RlZCBieSBgS1ZNX0FNRF9TRVZgLlxuXG5Ob3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgLCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC5cblxuU3l6a2FsbGVyIG5lZWRzIHRoZSBmdWxsIGxpc3Qgb2YgdGhlc2UgZnVuY3Rpb25zLiBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGlzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmYCBhbmQgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmYCBhcmUgc3RhdGljLCBidXQgc3l6a2FsbGVyIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGZ1enogdGhlbSBpZiB0aGV5IGFyZSBpbiB0aGUgYmluYXJ5LiBTeXprYWxsZXIgZm9jdXNlcyBvbiBmdW5jdGlvbnMsIHNvIGxldCdzIGxpc3QgdGhlbSBhbGw6IGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgLCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBhbmQgYHNldl9nbWVtX2ZyZWVfZm9saW9gLlxuXG5JIGhhdmUgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRocy4gIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdGAgaXMgY2FsbGVkIGR1cmluZyBtZW1zbG90IGRlbGV0aW9uIG9yIG1vdmVtZW50LCBzbyBub3QgYSBob3QgcGF0aC4gU2FtZSBmb3IgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gVGhlc2UgYWxsIGxvb2sgbGlrZSBpbml0aWFsaXphdGlvbiBvciByYXJlIGV2ZW50IHBhdGhzLlxuXG5JIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgQ09ORklHX0tWTV9BTURfU0VWYCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDoyMi44OTIyNjM3NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQwMTY2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURfU0VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6MjQuODM2Mjg1ODExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTgwMzg5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbnMgYW5kIFBhdGNoIFNjb3BlKipcblxuQWxyaWdodCwgc28gYEtWTV9BTURfU0VWYCwgeWVhaCwgdGhhdCdzIGRlZmluaXRlbHkgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlnLCBJIGtub3cgdGhhdCBvbmUuIE1ha2VzIHlvdSB3b25kZXIgdGhvdWdoLCBhcmUgdGhlcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzIGluIHBsYXkgaGVyZSB0aGF0IEknbSBtaXNzaW5nPyBHb3R0YSBtYWtlIHN1cmUgSSdtIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc2VjdXJpdHkgZmVhdHVyZXMuXG5cbkhtbSwgdGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIE9rYXksIHNvIGl04oCZcyBkZWFsaW5nIHdpdGggdGhlIGd1ZXN0IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3IgaW50ZXJmYWNlIHdpdGhpbiBLVk0uIFRoaXMgaGFzIG1lIHdvbmRlcmluZyAtIGlzIHRoZXJlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byB0aGUgYGd1ZXN0X21lbWZkYCBmdW5jdGlvbmFsaXR5IGl0c2VsZj8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhdCBjb21waWxlIHRpbWUgb3IgcnVudGltZSBpbmRlcGVuZGVudGx5IG9mIGBLVk1fQU1EX1NFVmAsIGFzIHRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIFNFVi4gVGhhdOKAmXMgc29tZXRoaW5nIEkgbmVlZCB0byBsb29rIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjk2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6MjcuODM0MzI2NTQxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0NzEzNDA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1BSSVZBVEVfTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDoyOS40NTkwNDYyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMyMDExNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGd1ZXN0X21lbWZkYCBPcHRpb24gaW4gS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciB1c2FnZSBvZiBgZ3Vlc3RfbWVtZmRgLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBoaWdobHkgbGlrZWx5IHRoaXMgaXMgcmVsYXRlZCB0byBhIEtWTSBmZWF0dXJlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIEtWTSBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgdmlydC9rdm0vS2NvbmZpZ2AuIFRoYXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgZm9yIGNvbmZpZ3VyaW5nIGZlYXR1cmVzIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbiBteSBzZWFyY2guIExldCdzIHN0YXJ0IGRpZ2dpbmcgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJ20gZXhwZWN0aW5nIHRoaXMgYEtjb25maWdgIGZpbGUgdG8gZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCBgZ3Vlc3RfbWVtZmRgIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTk3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6MzMuMzkxMDYwMDM3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3OTIxMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNTphbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM4OltndWVzdF9tZW1mZF9vZmZzZXQsIGd1ZXN0X21lbWZkX29mZnNldCArIG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzOS1tdXN0IHBvaW50IGF0IGEgZmlsZSBjcmVhdGVkIHZpYSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEIG9uIHRoZSBjdXJyZW50IFZNLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUxOlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cXHRfX3UzMiBwYWQxO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTgtdXNlcnNwYWNlX2FkZHIgKHNoYXJlZCBtZW1vcnkpLiAgSG93ZXZlciwgXFxcInZhbGlkXFxcIiBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJ3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXFxcImZsYWdzXFxcIiBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIG11c3QgYmUgJzAnLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTctOlR5cGU6IHZtIGlvY3RsXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjI6dGhhdCByZWZlcnMgdG8gaXQuICBndWVzdF9tZW1mZCBmaWxlcyBhcmUgcm91Z2hseSBhbmFsb2dvdXMgdG8gZmlsZXMgY3JlYXRlZFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjU6XFxcInJlZ3VsYXJcXFwiIG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjYtdmlydHVhbCBtYWNoaW5lIChzZWUgYmVsb3cpLCBjYW5ub3QgYmUgbWFwcGVkLCByZWFkLCBvciB3cml0dGVuIGJ5IHVzZXJzcGFjZSxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMi1cXHRfX3U2NCBzaXplO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXFxcInN0cnVjdCBrdm1cXFwiLiAgVGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0Mz1taWdyYXRpb24gb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlxcXCJzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlxcXCIsIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MDpndWVzdF9tZW1mZCByYW5nZSBpcyBub3QgYWxsb3dlZCAoYW55IG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBjYW4gYmUgYm91bmQgdG9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTYtICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDY4OmNvbnN1bWVkIGZyb20gZ3Vlc3RfbWVtZmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHNoYXJlZCBvciBhIHByaXZhdGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI2MTE9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcXHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDUtXFx0ICogdGhlcmUgYXJlbid0IGFueSBDb0NvIFZNcyB0aGF0IHN1cHBvcnQgb25seSBwcml2YXRlIG1lbW9yeSBvbiBhcm02NC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVxcdFxcdFxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcXHRcXHRcXHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwNS1cXHRcXHRcXHQgKiBjcmVhdGUgYSBmb2xpbyB0byBiYWNrIHRoZSBtZW1vcnkuIEluZm9ybSB1c2Vyc3BhY2UuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1ODpcXHRcXHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTk6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJHZXQgcGZuK29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcXFwiKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzM6XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0OlxcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJ3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc1LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzk4PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXFx0ICogICAgICBiZWZvcmVoYW5kLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcXHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDM5LVxcdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDA1Mj1zdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3OlxcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTgzPXZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVxcdFxcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcXHRcXHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXFx0XFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUnaW5nIHRoZW0gYmFjayB0b1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzAxNjpcXHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXFx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzIxNDpcXHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVxcdCAqIG1tdV9ub3RpZmllciBldmVudHMgY2FuJ3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSdzIGludGVybmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzM9Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MDogKiBLVk0gZG9lc24ndCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgxLSAqIHdpdGggcHJpdmF0ZSBtZW1vcnkgKHRoZSBwcml2YXRlIHZzLiBzaGFyZWQgdHJhY2tpbmcgbmVlZHMgdG8gYmUgbW92ZWQgaW50b1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NC1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDctXFx0X191MzIgcGFkMTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjQ1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXFx0X191NjQgc2l6ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDMtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0OlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIHBhZDE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYzNT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFxcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVxcdF9fdTY0IHNpemU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ2V0LXJlZy1saXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ3Vlc3RfbWVtZmRfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00Mj1zdGF0aWMgdm9pZCB0ZXN0X21tYXBfY293KGludCBmZCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVxcdG1lbSA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OlxcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcXFwiQ29weS1vbi13cml0ZSBub3QgYWxsb3dlZCBieSBndWVzdF9tZW1mZC5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Mi1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlxcdCAqIFRvIGV2ZW4gcmVhY2ggdGhlIHBvaW50IHdoZXJlIHRoZSBndWVzdF9tZW1mZCBmb2xpb3Mgd2lsbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVxcdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODU6XFx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXFx0ICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XFx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjEwLVxcdCAqIGZpbmUuLi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MzQ4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9iaW5kaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgZmQsIHNpemVfdCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTg6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cXHRmb3IgKHNpemUgPSAxOyBzaXplIFxcdTAwM2MgcGFnZV9zaXplOyBzaXplKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcXHRcXHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXFx0XFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcXHRcXHRcXHQgICAgXFxcImd1ZXN0X21lbWZkKCkgd2l0aCBub24tcGFnZS1hbGlnbmVkIHBhZ2Ugc2l6ZSAnMHglbHgnIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2OC1cXHRcXHRcXHQgICAgc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3MjpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcXHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3OC1cXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFxcXCJtZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozODQ6XFx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVxcdFRFU1RfQVNTRVJUKGZkMiAhPSAtMSwgXFxcIm1lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDAxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVxcdGZvciAoZmxhZyA9IEJJVCgwKTsgZmxhZzsgZmxhZyBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDA3OlxcdFxcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDgtXFx0XFx0aWYgKGZsYWcgXFx1MDAyNiB2YWxpZF9mbGFncykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVxcdFxcdFxcdFRFU1RfQVNTRVJUKGZkIFxcdTAwM2U9IDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAnMHglbHgnIHNob3VsZCBzdWNjZWVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cXHRcXHRcXHRcXHQgICAgZmxhZyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cXHRcXHRcXHRURVNUX0FTU0VSVChmZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDE1OlxcdFxcdFxcdFxcdCAgICBcXFwiZ3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJzB4JWx4JyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXFx0XFx0XFx0XFx0ICAgIGZsYWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcXHRpbnQgZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoX192bSwgX19nbWVtX3NpemUsIF9fZmxhZ3MpO1xcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MTpzdGF0aWMgdm9pZCBfX3Rlc3RfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XFx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUodm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0OlxcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDcyOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmQodW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3OlxcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5OlxcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XFx0XFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXFx0aWYgKGZsYWdzIFxcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcXHRcXHRfX3Rlc3RfZ3Vlc3RfbWVtZmQodm0sIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXFx0XFx0XFx0XFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM1OlxcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXFx0ICogb2YgdGhlIGhvc3QgcGFnZSBzaXplLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXFx0c2l6ZSA9IG1heF90KHNpemVfdCwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcXHRmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVxcdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXFx0Zm9yX2VhY2hfc2V0X2JpdCh2bV90eXBlLCBcXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4OlxcdFxcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1ODA6XFx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjY3OnN0YXRpYyBpbmxpbmUgaW50IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cXHRcXHRcXHRcXHRcXHQgIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXFx0XFx0LnNpemUgPSBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzU6XFx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzYtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzktXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcXHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Mi1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XFx0XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2OlxcdFxcdFxcdFxcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzAyLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjcwMzpcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzA0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3MS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cXHRmbGFncyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjUwMDpcXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz04MDQ9c3RhdGljIHZvaWQgX192bV9tZW1fcmVnaW9uX2RlbGV0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XFx0aWYgKChpbnQpcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgXFx1MDAzZT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlxcdFxcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtODIxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTQ4LVxcdFxcdFxcdFxcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1Ni1cXHRcXHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU3OlxcdFxcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTg6XFx0XFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU5LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTY2PXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk2ODpcXHRcXHRcXHRcXHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3MC1cXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlxcdFxcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVxcdGlmIChmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcXHRcXHRpZiAoZ3Vlc3RfbWVtZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5OlxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlxcdFxcdFxcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDkxLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cXHRcXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcXHRcXHRcXHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDk5LVxcdFxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDUtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMTktXFx0XFx0XFxcIiAgc2xvdDogJXUgZmxhZ3M6IDB4JXhcXFxcblxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcXHRcXHRcXFwiICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIxLVxcdFxcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk1OlxcdFxcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0LCBsZW4pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTctXFx0XFx0XFx0ICAgIHB1bmNoX2hvbGUgPyBcXFwicHVuY2ggaG9sZVxcXCIgOiBcXFwiYWxsb2NhdGVcXFwiLCBncGEsIGxlbixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcXHRcXHRcXHQgICAgcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg2LVxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODc6XFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5MTpcXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXFx0XFx0VEVTVF9BU1NFUlQociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzk4LVxcdFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00MDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XFx0XFx0Y2xvc2UoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNla3ZtX2ZkLCAwLCBcXFwiS1ZNIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNlZmQsIDAsIFxcXCJWTSdzIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzktXFx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXFxcIlJlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgxLVxcdGNsb3NlKG1lbWZkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgzLVxcdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0yLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1OlxcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFxcXCJPdGhlciBWTSdzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlxcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkzLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBQQUdFX1NJWkU7IGkrKylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcXHRcXHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCBpLCBcXFwiVW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSAqIDUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjMtXFx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0OlxcdCAqIHdpdGggYSBcXFwiYmFkXFxcIiBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyOS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlxcdCAqIFZlcmlmeSB0aGF0IG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkIGJpbmRpbmdzIChpLmUuIGluIGd1ZXN0X21lbWZkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXFx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlxcdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdCdzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDEtXFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ1LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXFx0VEVTVF9BU1NFUlQociA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTg6XFx0XFx0ICAgIFxcXCJPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cXHRURVNUX0FTU0VSVChyID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVFWElTVCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcXHRcXHQgICAgXFxcIk92ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTIzMD1zdGF0aWMgdm9pZCBndWVzdF90ZXN0X3B1bmNoX2hvbGUodTY0IGJhc2VfZ3BhLCBib29sIHByZWNpc2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXFx0ICogQ29udmVydCB0aGUgZW50aXJlIHJhbmdlIHRvIHByaXZhdGUsIHRoaXMgdGVzdGNhc2UgaXMgYWxsIGFib3V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3OlxcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJ3QgbmVlZGVkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI3NTpcXHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlxcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODItXFx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzozOTc6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNjpcXHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XFx0ICogZmQuICBUaGUgZ3Vlc3RfbWVtZmQgaXMgZ2lmdGVkIGEgcmVmZXJlbmNlIHRvIGl0cyBvd25pbmcgVk0sIGkuZS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXFx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI5OlxcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVxcdCAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDozNS4wNjg5ODU0NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2OTgxMTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZ3Vlc3RfbWVtZmRgIEltcGxlbWVudGF0aW9uIGluIEtWTSoqXG5cbkFscmlnaHQsIHNvIGBndWVzdF9tZW1mZGAgaXMgZGlyZWN0bHkgdGllZCB0byBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCB3aXRoIHRoZSBgS1ZNX01FTV9HVUVTVF9NRU1GRGAgZmxhZy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgZG9uJ3Qgc2VlIGFueSBleHBsaWNpdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGl0IOKAkyBpdCBzZWVtcyB0byBiZSBlbmFibGVkIGltcGxpY2l0bHkgd2hlbiBgQ09ORklHX0tWTWAgaXMgYWN0aXZlIGFuZCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgaXMgY29tcGF0aWJsZS4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuXG5cbk5vdywgd2FpdCBhIHNlY29uZC4uLiB0aGlzIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBBTUQncyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIGFsc28gYnJpbmdzIGluIGBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRWAgYW5kIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAuIEhtbW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbiBiZXR0ZXIuIElzIGBndWVzdF9tZW1mZGAgaW5kaXJlY3RseSBlbmFibGVkIGJ5IGBDT05GSUdfS1ZNYCB3aGVuICplaXRoZXIqIGBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRWAgb3IgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBhcmUgcHJlc2VudD8gT3IgaXMgdGhlcmUgc29tZSBvdGhlciBjb25kaXRpb24gSSBhbSBtaXNzaW5nPyBJdCBzZWVtcyBsaWtlIGl0IG11c3QgYmUgZW5hYmxlZCBjb25kaXRpb25hbGx5IHNvbWVob3csIHJhdGhlciB0aGFuIGJlaW5nIHVuaXZlcnNhbGx5IGF2YWlsYWJsZS5cblxuSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUgaW1tZWRpYXRlbHkuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgc3BvdCBmb3IgYSBjbGVhciBkZWZpbml0aW9uIG9mIHRoZSBkZXBlbmRlbmN5IGNoYWluIGhlcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgdGhlIHJlbGF0aW9uc2hpcCBpcyBiZXR3ZWVuIGBndWVzdF9tZW1mZGAsIHRoZXNlIGBIQVZFX0tWTV9BUkNIX0dNRU1fKmAgbWFjcm9zLCBhbmQgdGhlIG92ZXJhbGwgYENPTkZJR19LVk1gIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY4OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDozOS43Mzg4MDAxODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODk2NTA5MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUFJJVkFURV9NRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjUwOjQxLjQyODQ1NzAwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc3NjcwMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIEd1ZXN0IE1lbW9yeSBTaGFyaW5nKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBzaGFyaW5nIHdpdGhpbiBLVk0gZ3Vlc3RzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWVtZmRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQncyByZWxldmFudCB0byB0aGlzIGN1cnJlbnQgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjYzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6NDUuOTA2MTI5ODUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4MDQ3ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNTphbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM4OltndWVzdF9tZW1mZF9vZmZzZXQsIGd1ZXN0X21lbWZkX29mZnNldCArIG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzOS1tdXN0IHBvaW50IGF0IGEgZmlsZSBjcmVhdGVkIHZpYSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEIG9uIHRoZSBjdXJyZW50IFZNLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUxOlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cXHRfX3UzMiBwYWQxO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTgtdXNlcnNwYWNlX2FkZHIgKHNoYXJlZCBtZW1vcnkpLiAgSG93ZXZlciwgXFxcInZhbGlkXFxcIiBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJ3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXFxcImZsYWdzXFxcIiBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIG11c3QgYmUgJzAnLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTctOlR5cGU6IHZtIGlvY3RsXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjI6dGhhdCByZWZlcnMgdG8gaXQuICBndWVzdF9tZW1mZCBmaWxlcyBhcmUgcm91Z2hseSBhbmFsb2dvdXMgdG8gZmlsZXMgY3JlYXRlZFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjU6XFxcInJlZ3VsYXJcXFwiIG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjYtdmlydHVhbCBtYWNoaW5lIChzZWUgYmVsb3cpLCBjYW5ub3QgYmUgbWFwcGVkLCByZWFkLCBvciB3cml0dGVuIGJ5IHVzZXJzcGFjZSxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMi1cXHRfX3U2NCBzaXplO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXFxcInN0cnVjdCBrdm1cXFwiLiAgVGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0Mz1taWdyYXRpb24gb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlxcXCJzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlxcXCIsIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MDpndWVzdF9tZW1mZCByYW5nZSBpcyBub3QgYWxsb3dlZCAoYW55IG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBjYW4gYmUgYm91bmQgdG9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTYtICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDY4OmNvbnN1bWVkIGZyb20gZ3Vlc3RfbWVtZmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHNoYXJlZCBvciBhIHByaXZhdGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI2MTE9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcXHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDUtXFx0ICogdGhlcmUgYXJlbid0IGFueSBDb0NvIFZNcyB0aGF0IHN1cHBvcnQgb25seSBwcml2YXRlIG1lbW9yeSBvbiBhcm02NC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVxcdFxcdFxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcXHRcXHRcXHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwNS1cXHRcXHRcXHQgKiBjcmVhdGUgYSBmb2xpbyB0byBiYWNrIHRoZSBtZW1vcnkuIEluZm9ybSB1c2Vyc3BhY2UuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1ODpcXHRcXHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTk6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJHZXQgcGZuK29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcXFwiKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzM6XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0OlxcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJ3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc1LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzk4PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXFx0ICogICAgICBiZWZvcmVoYW5kLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcXHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDM5LVxcdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDA1Mj1zdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3OlxcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTgzPXZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVxcdFxcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcXHRcXHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXFx0XFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUnaW5nIHRoZW0gYmFjayB0b1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzAxNjpcXHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXFx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzIxNDpcXHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVxcdCAqIG1tdV9ub3RpZmllciBldmVudHMgY2FuJ3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSdzIGludGVybmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzM9Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MDogKiBLVk0gZG9lc24ndCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgxLSAqIHdpdGggcHJpdmF0ZSBtZW1vcnkgKHRoZSBwcml2YXRlIHZzLiBzaGFyZWQgdHJhY2tpbmcgbmVlZHMgdG8gYmUgbW92ZWQgaW50b1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NC1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDctXFx0X191MzIgcGFkMTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjQ1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXFx0X191NjQgc2l6ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDMtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0OlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIHBhZDE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYzNT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFxcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVxcdF9fdTY0IHNpemU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ2V0LXJlZy1saXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ3Vlc3RfbWVtZmRfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00Mj1zdGF0aWMgdm9pZCB0ZXN0X21tYXBfY293KGludCBmZCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVxcdG1lbSA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OlxcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcXFwiQ29weS1vbi13cml0ZSBub3QgYWxsb3dlZCBieSBndWVzdF9tZW1mZC5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Mi1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlxcdCAqIFRvIGV2ZW4gcmVhY2ggdGhlIHBvaW50IHdoZXJlIHRoZSBndWVzdF9tZW1mZCBmb2xpb3Mgd2lsbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVxcdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODU6XFx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXFx0ICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XFx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjEwLVxcdCAqIGZpbmUuLi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MzQ4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9iaW5kaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgZmQsIHNpemVfdCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTg6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cXHRmb3IgKHNpemUgPSAxOyBzaXplIFxcdTAwM2MgcGFnZV9zaXplOyBzaXplKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcXHRcXHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXFx0XFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcXHRcXHRcXHQgICAgXFxcImd1ZXN0X21lbWZkKCkgd2l0aCBub24tcGFnZS1hbGlnbmVkIHBhZ2Ugc2l6ZSAnMHglbHgnIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2OC1cXHRcXHRcXHQgICAgc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3MjpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcXHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3OC1cXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFxcXCJtZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozODQ6XFx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVxcdFRFU1RfQVNTRVJUKGZkMiAhPSAtMSwgXFxcIm1lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDAxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVxcdGZvciAoZmxhZyA9IEJJVCgwKTsgZmxhZzsgZmxhZyBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDA3OlxcdFxcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDgtXFx0XFx0aWYgKGZsYWcgXFx1MDAyNiB2YWxpZF9mbGFncykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVxcdFxcdFxcdFRFU1RfQVNTRVJUKGZkIFxcdTAwM2U9IDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAnMHglbHgnIHNob3VsZCBzdWNjZWVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cXHRcXHRcXHRcXHQgICAgZmxhZyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cXHRcXHRcXHRURVNUX0FTU0VSVChmZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDE1OlxcdFxcdFxcdFxcdCAgICBcXFwiZ3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJzB4JWx4JyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXFx0XFx0XFx0XFx0ICAgIGZsYWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcXHRpbnQgZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoX192bSwgX19nbWVtX3NpemUsIF9fZmxhZ3MpO1xcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MTpzdGF0aWMgdm9pZCBfX3Rlc3RfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XFx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUodm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0OlxcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDcyOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmQodW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3OlxcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5OlxcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XFx0XFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXFx0aWYgKGZsYWdzIFxcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcXHRcXHRfX3Rlc3RfZ3Vlc3RfbWVtZmQodm0sIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXFx0XFx0XFx0XFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM1OlxcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXFx0ICogb2YgdGhlIGhvc3QgcGFnZSBzaXplLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXFx0c2l6ZSA9IG1heF90KHNpemVfdCwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcXHRmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVxcdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXFx0Zm9yX2VhY2hfc2V0X2JpdCh2bV90eXBlLCBcXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4OlxcdFxcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1ODA6XFx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjY3OnN0YXRpYyBpbmxpbmUgaW50IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cXHRcXHRcXHRcXHRcXHQgIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXFx0XFx0LnNpemUgPSBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzU6XFx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzYtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzktXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcXHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Mi1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XFx0XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2OlxcdFxcdFxcdFxcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzAyLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjcwMzpcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzA0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3MS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cXHRmbGFncyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjUwMDpcXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz04MDQ9c3RhdGljIHZvaWQgX192bV9tZW1fcmVnaW9uX2RlbGV0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XFx0aWYgKChpbnQpcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgXFx1MDAzZT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlxcdFxcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtODIxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTQ4LVxcdFxcdFxcdFxcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1Ni1cXHRcXHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU3OlxcdFxcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTg6XFx0XFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU5LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTY2PXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk2ODpcXHRcXHRcXHRcXHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3MC1cXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlxcdFxcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVxcdGlmIChmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcXHRcXHRpZiAoZ3Vlc3RfbWVtZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5OlxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlxcdFxcdFxcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDkxLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cXHRcXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcXHRcXHRcXHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDk5LVxcdFxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDUtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMTktXFx0XFx0XFxcIiAgc2xvdDogJXUgZmxhZ3M6IDB4JXhcXFxcblxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcXHRcXHRcXFwiICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIxLVxcdFxcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk1OlxcdFxcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0LCBsZW4pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTctXFx0XFx0XFx0ICAgIHB1bmNoX2hvbGUgPyBcXFwicHVuY2ggaG9sZVxcXCIgOiBcXFwiYWxsb2NhdGVcXFwiLCBncGEsIGxlbixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcXHRcXHRcXHQgICAgcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg2LVxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODc6XFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5MTpcXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXFx0XFx0VEVTVF9BU1NFUlQociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzk4LVxcdFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00MDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XFx0XFx0Y2xvc2UoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNla3ZtX2ZkLCAwLCBcXFwiS1ZNIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNlZmQsIDAsIFxcXCJWTSdzIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzktXFx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXFxcIlJlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgxLVxcdGNsb3NlKG1lbWZkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgzLVxcdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0yLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1OlxcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFxcXCJPdGhlciBWTSdzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlxcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkzLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBQQUdFX1NJWkU7IGkrKylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcXHRcXHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCBpLCBcXFwiVW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSAqIDUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjMtXFx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0OlxcdCAqIHdpdGggYSBcXFwiYmFkXFxcIiBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyOS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlxcdCAqIFZlcmlmeSB0aGF0IG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkIGJpbmRpbmdzIChpLmUuIGluIGd1ZXN0X21lbWZkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXFx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlxcdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdCdzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDEtXFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ1LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXFx0VEVTVF9BU1NFUlQociA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTg6XFx0XFx0ICAgIFxcXCJPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cXHRURVNUX0FTU0VSVChyID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVFWElTVCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcXHRcXHQgICAgXFxcIk92ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTIzMD1zdGF0aWMgdm9pZCBndWVzdF90ZXN0X3B1bmNoX2hvbGUodTY0IGJhc2VfZ3BhLCBib29sIHByZWNpc2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXFx0ICogQ29udmVydCB0aGUgZW50aXJlIHJhbmdlIHRvIHByaXZhdGUsIHRoaXMgdGVzdGNhc2UgaXMgYWxsIGFib3V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3OlxcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJ3QgbmVlZGVkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI3NTpcXHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlxcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODItXFx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzozOTc6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNjpcXHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XFx0ICogZmQuICBUaGUgZ3Vlc3RfbWVtZmQgaXMgZ2lmdGVkIGEgcmVmZXJlbmNlIHRvIGl0cyBvd25pbmcgVk0sIGkuZS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXFx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI5OlxcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVxcdCAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTo1MDo0Ny42MzQxODMzMzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0MTc1NTk4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGd1ZXN0X21lbWZkYCDigJMgdGhhdCdzIGp1c3QgYSBLVk0gZmVhdHVyZSwgbm90aGluZyBzcGVjaWZpYyB0byB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guIFNvLCB0aGUga2V5IGNvbmZpZyB0byB0YXJnZXQgaGVyZSBhcHBlYXJzIHRvIGJlIGBLVk1fQU1EX1NFVmAuIEFuZCB5ZXMsIGBLVk1fQU1EX1NFVmAgaXMgYSBzaW1wbGUgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gR29vZC4gSXQgbG9va3MgbGlrZSBpdCBzZWxlY3RzIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAsIHdoaWNoIHNvdW5kcyBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3Mgc2NydXRpbml6ZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFdlIGhhdmUgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90YCwgYF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZmAsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmAsIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AuXG5cbldhaXQsIEkgbmVlZCB0byBpbmNsdWRlIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGJlY2F1c2UgaXQncyBhIGZ1bmN0aW9uLlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIHJlYWNoYWJsZSByZWdhcmRsZXNzIG9mIFNFViBiZWluZyBlbmFibGVkLiBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgIGlzIGNhbGxlZCBkdXJpbmcgbWVtc2xvdCBtb3ZlbWVudCBvciBkZWxldGlvbiwgc28gdGhhdCdzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIHphcCBmdW5jdGlvbnMsIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgIGFuZCBgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZgLCBhcmUgcmVhY2hhYmxlIHRvbyBpZiBga3ZtX21lbXNsb3RfZmx1c2hfemFwX2FsbChrdm0pYCBpcyB0cnVlLiBIb3dldmVyLCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgYW5kIGBzZXZfc25wX3JlbG9hZF92bXNhYCBzZWVtIFNFVi1TTlAgc3BlY2lmaWMuIFNpbWlsYXJseSwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIHJlbGllcyBvbiBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCBjaGVja3MgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLCBjb25maXJtaW5nIHRoZWlyIFNFVi1TTlAgZXhjbHVzaXZpdHkuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgYWxzbyBpbmplY3RpbmcgU0VWLVNOUCBzcGVjaWZpYyBjb2RlLiBUaGF0J3MgYSBwZXJmZWN0IGNvbWJpbmF0aW9uIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNoYW5nZXMgcmVsYXRlZCB0byBib3RoIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IChtZW1zbG90IGZsdXNoaW5nLCBhbmQgemFwIGZ1bmN0aW9ucykgYW5kIHRoZSBuZXcgU0VWLVNOUCBiZWhhdmlvciAoVk1TQSByZWxvYWRpbmcsIGFuZCBwcm90ZWN0ZWQgZ3Vlc3Qgc3RhdGUgaW5pdGlhbGlzYXRpb24pLlxuXG5MZXQncyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUqKlxuKiAgICoqRW5hYmxlQ29uZmlnczogXFxbXCJLVk1cXF9BTURcXF9TRVZcIlxcXSoqXG4qICAgKipGb2N1c1N5bWJvbHM6KipcblxuICAgICogICBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RgXG4gICAgKiAgIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGZgXG4gICAgKiAgIGBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZmBcbiAgICAqICAgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgXG4gICAgKiAgIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgXG4gICAgKiAgIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYFxuICAgICogICBgc2V2X2dtZW1fZnJlZV9mb2xpb2BcbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbG9naWMgZm9yIGZsdXNoaW5nIHNoYWRvdyBtZW1zbG90cyBhbmQgaW50cm9kdWNlcyBuZXcgU0VWLVNOUCBzcGVjaWZpYyBsb2dpYyBmb3IgaGFuZGxpbmcgZ3Vlc3RcXF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uXCJcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHJ1bGUgb3V0IGFueSBvdGhlciByZWxldmFudCBjb25maWdzLiBgS1ZNYCBpcyBmYXIgdG9vIGJyb2FkLCBgS1ZNX0FNRGAgaXMgdG9vIGdlbmVyaWMuIFllcywgYEtWTV9BTURfU0VWYCBsb29rcyBsaWtlIHRoZSBwZXJmZWN0IGFuZCBvbmx5IG5lY2Vzc2FyeSBjb25maWcuIE9rYXksIEknbSByZWFkeSB0byBjb21taXQgdG8gdGhpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk4NiwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6NTA6NTguMDUxNzQ0OTYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNzY2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURfU0VWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3RcIixcbiAgICBcIl9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfZnJvbnRfaGFsZlwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGZcIixcbiAgICBcInNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVcIixcbiAgICBcIl9fc2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwic2V2X2dtZW1fZnJlZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBsb2dpYyBmb3IgZmx1c2hpbmcgc2hhZG93IG1lbXNsb3RzIGFuZCBpbnRyb2R1Y2VzIG5ldyBTRVYtU05QIHNwZWNpZmljIGxvZ2ljIGZvciBoYW5kbGluZyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb25zIGFuZCBWTVNBIHJlbG9hZGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdFwiLFxuICAgIFwiX19rdm1fbW11X3phcF9hbGxfZmFzdF9mcm9udF9oYWxmXCIsXG4gICAgXCJfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2JhY2tfaGFsZlwiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiLFxuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIGxvZ2ljIGZvciBmbHVzaGluZyBzaGFkb3cgbWVtc2xvdHMgYW5kIGludHJvZHVjZXMgbmV3IFNFVi1TTlAgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbnMgYW5kIFZNU0EgcmVsb2FkaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[1] Phase: Succeeded StartedAt: 2026-06-27 01:51:08 +0000 UTC FinishedAt: 2026-06-27 01:51:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-27 01:51:08 +0000 UTC FinishedAt: 2026-06-27 01:51:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2] Phase: Succeeded StartedAt: 2026-06-27 01:51:08 +0000 UTC FinishedAt: 2026-06-27 05:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-27 01:51:08 +0000 UTC FinishedAt: 2026-06-27 05:39:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-27 01:51:08 +0000 UTC FinishedAt: 2026-06-27 01:51:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-27 01:51:08 +0000 UTC FinishedAt: 2026-06-27 01:51:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowj9clj/series-workflowj9clj-convert-artifact-3991455866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-27 01:51:18 +0000 UTC FinishedAt: 2026-06-27 02:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-27 01:51:18 +0000 UTC FinishedAt: 2026-06-27 02:11:17 +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:*5d6879c8-55a0-4c44-9646-9e944c42f18b,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-workflowj9clj/series-workflowj9clj-convert-artifact-3991455866/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": "ea17153c-faeb-4463-afb5-83230a12867e", "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-workflowj9clj/series-workflowj9clj-build-action-2031261992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-27 01:51:18 +0000 UTC FinishedAt: 2026-06-27 02:11:07 +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:*5d6879c8-55a0-4c44-9646-9e944c42f18b,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-workflowj9clj/series-workflowj9clj-convert-artifact-3991455866/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": "ea17153c-faeb-4463-afb5-83230a12867e", "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-workflowj9clj/series-workflowj9clj-build-action-2031261992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-27 02:11:17 +0000 UTC FinishedAt: 2026-06-27 02:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-27 02:11:17 +0000 UTC FinishedAt: 2026-06-27 02:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-27 02:11:17 +0000 UTC FinishedAt: 2026-06-27 02:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-27 02:11:17 +0000 UTC FinishedAt: 2026-06-27 02:11:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowj9clj/series-workflowj9clj-convert-artifact-4026354133/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-27 02:11:27 +0000 UTC FinishedAt: 2026-06-27 02:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-27 02:11:27 +0000 UTC FinishedAt: 2026-06-27 02:13:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea17153c-faeb-4463-afb5-83230a12867e,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-workflowj9clj/series-workflowj9clj-build-action-2031261992/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-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-27 02:13:30 +0000 UTC FinishedAt: 2026-06-27 02:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-27 02:13:30 +0000 UTC FinishedAt: 2026-06-27 02:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-27 02:13:30 +0000 UTC FinishedAt: 2026-06-27 02:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-27 02:13:30 +0000 UTC FinishedAt: 2026-06-27 02:33:56 +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:*5d6879c8-55a0-4c44-9646-9e944c42f18b,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-workflowj9clj/series-workflowj9clj-convert-artifact-4026354133/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": "2a74163a-3303-43c3-b022-6723e2ad1e53", "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-workflowj9clj/series-workflowj9clj-build-action-1307470689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-27 02:13:30 +0000 UTC FinishedAt: 2026-06-27 02:33:46 +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:*5d6879c8-55a0-4c44-9646-9e944c42f18b,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-workflowj9clj/series-workflowj9clj-convert-artifact-4026354133/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": "2a74163a-3303-43c3-b022-6723e2ad1e53", "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-workflowj9clj/series-workflowj9clj-build-action-1307470689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-27 02:33:56 +0000 UTC FinishedAt: 2026-06-27 02:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-27 02:33:56 +0000 UTC FinishedAt: 2026-06-27 02:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-27 02:33:56 +0000 UTC FinishedAt: 2026-06-27 02:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-27 02:33:56 +0000 UTC FinishedAt: 2026-06-27 02:35:57 +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:*2a74163a-3303-43c3-b022-6723e2ad1e53,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-workflowj9clj/series-workflowj9clj-build-action-1307470689/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-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-27 02:36:07 +0000 UTC FinishedAt: 2026-06-27 05:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-27 02:36:07 +0000 UTC FinishedAt: 2026-06-27 05:39:03 +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":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"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:*ea17153c-faeb-4463-afb5-83230a12867e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2a74163a-3303-43c3-b022-6723e2ad1e53,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-workflowj9clj/series-workflowj9clj-build-action-2031261992/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-workflowj9clj/series-workflowj9clj-build-action-1307470689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-27 02:36:07 +0000 UTC FinishedAt: 2026-06-27 02:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-27 02:36:07 +0000 UTC FinishedAt: 2026-06-27 02:36:15 +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":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"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-workflowj9clj/series-workflowj9clj-convert-artifact-4055526586/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-27 02:36:07 +0000 UTC FinishedAt: 2026-06-27 02:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-27 02:36:07 +0000 UTC FinishedAt: 2026-06-27 02:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-27 02:36:07 +0000 UTC FinishedAt: 2026-06-27 02:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-27 02:36:18 +0000 UTC FinishedAt: 2026-06-27 05:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9clj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_flush_shadow_memslot","__kvm_mmu_zap_all_fast_front_half","__kvm_mmu_zap_all_fast_back_half","sev_snp_init_protected_guest_state","__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV"],"series_id":"4aa7878f-94d8-4f3a-a4f5-b47fffbfe070","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-27 02:36:18 +0000 UTC FinishedAt: 2026-06-27 05:38:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea17153c-faeb-4463-afb5-83230a12867e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2a74163a-3303-43c3-b022-6723e2ad1e53,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-workflowj9clj/series-workflowj9clj-build-action-2031261992/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-workflowj9clj/series-workflowj9clj-build-action-1307470689/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-workflowj9clj/series-workflowj9clj-convert-artifact-4055526586/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,}